tracing/kmemtrace: normalize the raw tracer event to the unified tracing API
Impact: new tracer plugin
This patch adapts kmemtrace raw events tracing to the unified tracing API.
To enable and use this tracer, just do the following:
 echo kmemtrace > /debugfs/tracing/current_tracer
 cat /debugfs/tracing/trace
You will have the following output:
 # tracer: kmemtrace
 #
 #
 # ALLOC  TYPE  REQ   GIVEN  FLAGS           POINTER         NODE    CALLER
 # FREE   |      |     |       |              |   |            |        |
 # |
type_id 1 call_site 
18446744071565527833 ptr 
18446612134395152256
type_id 0 call_site 
18446744071565585597 ptr 
18446612134405955584 bytes_req 4096 bytes_alloc 4096 gfp_flags 208 node -1
type_id 1 call_site 
18446744071565585534 ptr 
18446612134405955584
type_id 0 call_site 
18446744071565585597 ptr 
18446612134405955584 bytes_req 4096 bytes_alloc 4096 gfp_flags 208 node -1
type_id 0 call_site 
18446744071565636711 ptr 
18446612134345164672 bytes_req 240 bytes_alloc 240 gfp_flags 208 node -1
type_id 1 call_site 
18446744071565585534 ptr 
18446612134405955584
type_id 0 call_site 
18446744071565585597 ptr 
18446612134405955584 bytes_req 4096 bytes_alloc 4096 gfp_flags 208 node -1
type_id 0 call_site 
18446744071565636711 ptr 
18446612134345164912 bytes_req 240 bytes_alloc 240 gfp_flags 208 node -1
type_id 1 call_site 
18446744071565585534 ptr 
18446612134405955584
type_id 0 call_site 
18446744071565585597 ptr 
18446612134405955584 bytes_req 4096 bytes_alloc 4096 gfp_flags 208 node -1
type_id 0 call_site 
18446744071565636711 ptr 
18446612134345165152 bytes_req 240 bytes_alloc 240 gfp_flags 208 node -1
type_id 0 call_site 
18446744071566144042 ptr 
18446612134346191680 bytes_req 1304 bytes_alloc 1312 gfp_flags 208 node -1
type_id 1 call_site 
18446744071565585534 ptr 
18446612134405955584
type_id 0 call_site 
18446744071565585597 ptr 
18446612134405955584 bytes_req 4096 bytes_alloc 4096 gfp_flags 208 node -1
type_id 1 call_site 
18446744071565585534 ptr 
18446612134405955584
That was to stay backward compatible with the format output produced in
inux/tracepoint.h.
This is the default ouput, but note that I tried something else.
If you change an option:
echo kmem_minimalistic > /debugfs/trace_options
and then cat /debugfs/trace, you will have the following output:
 # tracer: kmemtrace
 #
 #
 # ALLOC  TYPE  REQ   GIVEN  FLAGS           POINTER         NODE    CALLER
 # FREE   |      |     |       |              |   |            |        |
 # |
   -      C                            0xffff88007c088780          file_free_rcu
   +      K   4096   4096   
000000d0   0xffff88007cad6000     -1   getname
   -      C                            0xffff88007cad6000          putname
   +      K   4096   4096   
000000d0   0xffff88007cad6000     -1   getname
   +      K    240    240   
000000d0   0xffff8800790dc780     -1   d_alloc
   -      C                            0xffff88007cad6000          putname
   +      K   4096   4096   
000000d0   0xffff88007cad6000     -1   getname
   +      K    240    240   
000000d0   0xffff8800790dc870     -1   d_alloc
   -      C                            0xffff88007cad6000          putname
   +      K   4096   4096   
000000d0   0xffff88007cad6000     -1   getname
   +      K    240    240   
000000d0   0xffff8800790dc960     -1   d_alloc
   +      K   1304   1312   
000000d0   0xffff8800791d7340     -1   reiserfs_alloc_inode
   -      C                            0xffff88007cad6000          putname
   +      K   4096   4096   
000000d0   0xffff88007cad6000     -1   getname
   -      C                            0xffff88007cad6000          putname
   +      K    992   1000   
000000d0   0xffff880079045b58     -1   alloc_inode
   +      K    768   1024   
000080d0   0xffff88007c096400     -1   alloc_pipe_info
   +      K    240    240   
000000d0   0xffff8800790dca50     -1   d_alloc
   +      K    272    320   
000080d0   0xffff88007c088780     -1   get_empty_filp
   +      K    272    320   
000080d0   0xffff88007c088000     -1   get_empty_filp
Yeah I shall confess kmem_minimalistic should be: kmem_alternative.
Whatever, I find it more readable but this a personal opinion of course.
We can drop it if you want.
On the ALLOC/FREE column, + means an allocation and - a free.
On the type column, you have K = kmalloc, C = cache, P = page
I would like the flags to be GFP_* strings but that would not be easy to not
break the column with strings....
About the node...it seems to always be -1. I don't know why but that shouldn't
be difficult to find.
I moved linux/tracepoint.h to trace/tracepoint.h as well. I think that would
be more easy to find the tracer headers if they are all in their common
directory.
Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>