Tuesday, 7 June 2016

Dynamic Kernel memory tracking using Ftrace

Ftrace:

It is mainly used for kernel function traces and also used for kernel memory tracking.

CONFIGS to be enabled
1. CONFIG_FUNCTION_TRACER=y
2. CONFIG_DYNAMIC_FTRACE=y

It needs /sys/kernel/debug file system to be mounted

It traces memory allocation using events for below api calls

1. kmalloc()
2. kfree()
3. kmem_cache_alloc()
4. kmem_cache_free()

In the events, for each mem alloc call, we get who is the caller, what is requested size, what is allocated size.

Enable ftrace

echo 1 > /sys/kernel/debug/tracing_enabled

Disable

echo 0 > /sys/kernel/debug/tracing_enabled

How to access

/sys/kernel/debug/tracing

Kernel parameter :
trace_event=kmem:kmalloc, kmem:kmem_cache_alloc, kmem:kfree,kmem:kmem_cache_free

Avoiding event buffer over commit:
trace_buf_size=1000000

Enable events:
cd /sys/kernel/debug/tracing
echo "kmem:kmalloc" > set_events
echo "kmem:kmem_cache_alloc >> set_events
echo "kmem:kfree" >> set_events
echo "kmem:kmem_cache_free" >> set_events

Function Filtering:

echo <function name> set_ftrace_filter
 
Trace only apis of kernel module <MODULE> 
echo ':<MODULE>:tg3' > set_ftrace_filter
 

No comments:

Post a Comment