• Alexei Starovoitov's avatar
    samples/bpf: Add kmem_alloc()/free() tracker tool · 9811e353
    Alexei Starovoitov authored
    One BPF program attaches to kmem_cache_alloc_node() and
    remembers all allocated objects in the map.
    Another program attaches to kmem_cache_free() and deletes
    corresponding object from the map.
    
    User space walks the map every second and prints any objects
    which are older than 1 second.
    
    Usage:
    
    	$ sudo tracex4
    
    Then start few long living processes. The 'tracex4' will print
    something like this:
    
    	obj 0xffff880465928000 is 13sec old was allocated at ip ffffffff8105dc32
    	obj 0xffff88043181c280 is 13sec old was allocated at ip ffffffff8105dc32
    	obj 0xffff880465848000 is  8sec old was allocated at ip ffffffff8105dc32
    	obj 0xffff8804338bc280 is 15sec old was allocated at ip ffffffff8105dc32
    
    	$ addr2line -fispe vmlinux ffffffff8105dc32
    	do_fork at fork.c:1665
    
    As soon as processes exit the memory is reclaimed and 'tracex4'
    prints nothing.
    
    Similar experiment can be done with the __kmalloc()/kfree() pair.
    Signed-off-by: default avatarAlexei Starovoitov <ast@plumgrid.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Arnaldo Carvalho de Melo <acme@infradead.org>
    Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Daniel Borkmann <daniel@iogearbox.net>
    Cc: David S. Miller <davem@davemloft.net>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Link: http://lkml.kernel.org/r/1427312966-8434-10-git-send-email-ast@plumgrid.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    9811e353
tracex4_kern.c 1.24 KB