 c351c28161
			
		
	
	
	c351c28161
	
	
	
		
			
			That means that almost everything you can do with 'perf report'
can be done with 'perf diff', for instance:
$ perf record -f find / > /dev/null
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0.062 MB perf.data (~2699
samples) ] $ perf record -f find / > /dev/null
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0.062 MB perf.data (~2687
samples) ] perf diff | head -8
     9.02%     +1.00%     find  libc-2.10.1.so               [.] _IO_vfprintf_internal
     2.91%     -1.00%     find  [kernel]                     [k] __kmalloc
     2.85%     -1.00%     find  [kernel]                     [k] ext4_htree_store_dirent
     1.99%     -1.00%     find  [kernel]                     [k] _atomic_dec_and_lock
     2.44%                find  [kernel]                     [k] half_md4_transform
$
So if you want to zoom into libc:
$ perf diff --dsos libc-2.10.1.so | head -8
    37.34%                find  [.] _IO_vfprintf_internal
    10.34%                find  [.] __GI_memmove
     8.25%     +2.00%     find  [.] _int_malloc
     5.07%     -1.00%     find  [.] __GI_mempcpy
     7.62%     +2.00%     find  [.] _int_free
$
And if there were multiple commands using libc, it is also
possible to aggregate them all by using --sort symbol:
$ perf diff --dsos libc-2.10.1.so --sort symbol | head -8
    37.34%             [.] _IO_vfprintf_internal
    10.34%             [.] __GI_memmove
     8.25%     +2.00%  [.] _int_malloc
     5.07%     -1.00%  [.] __GI_mempcpy
     7.62%     +2.00%  [.] _int_free
$
The displacement column now is off by default, to use it:
perf diff -m --dsos libc-2.10.1.so --sort symbol | head -8
    37.34%                   [.] _IO_vfprintf_internal
    10.34%                   [.] __GI_memmove
     8.25%     +2.00%        [.] _int_malloc
     5.07%     -1.00%    +2  [.] __GI_mempcpy
     7.62%     +2.00%    -1  [.] _int_free
$
Using -t/--field-separator can be used for scripting:
$ perf diff -t, -m --dsos libc-2.10.1.so --sort symbol | head -8
37.34, , ,[.] _IO_vfprintf_internal
10.34, , ,[.] __GI_memmove
8.25,+2.00%, ,[.] _int_malloc
5.07,-1.00%,  +2,[.] __GI_mempcpy
7.62,+2.00%,  -1,[.] _int_free
6.99,+1.00%,  -1,[.] _IO_new_file_xsputn
1.89,-2.00%,  +4,[.] __readdir64
$
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Frédéric Weisbecker <fweisbec@gmail.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Paul Mackerras <paulus@samba.org>
LKML-Reference: <1260978567-550-1-git-send-email-acme@infradead.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
		
	
			
		
			
				
	
	
		
			55 lines
		
	
	
	
		
			1.1 KiB
			
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
	
		
			1.1 KiB
			
		
	
	
	
		
			Text
		
	
	
	
	
	
| perf-diff(1)
 | |
| ==============
 | |
| 
 | |
| NAME
 | |
| ----
 | |
| perf-diff - Read two perf.data files and display the differential profile
 | |
| 
 | |
| SYNOPSIS
 | |
| --------
 | |
| [verse]
 | |
| 'perf diff' [oldfile] [newfile]
 | |
| 
 | |
| DESCRIPTION
 | |
| -----------
 | |
| This command displays the performance difference amongst two perf.data files
 | |
| captured via perf record.
 | |
| 
 | |
| If no parameters are passed it will assume perf.data.old and perf.data.
 | |
| 
 | |
| OPTIONS
 | |
| -------
 | |
| -d::
 | |
| --dsos=::
 | |
| 	Only consider symbols in these dsos. CSV that understands
 | |
| 	file://filename entries.
 | |
| 
 | |
| -C::
 | |
| --comms=::
 | |
| 	Only consider symbols in these comms. CSV that understands
 | |
| 	file://filename entries.
 | |
| 
 | |
| -S::
 | |
| --symbols=::
 | |
| 	Only consider these symbols. CSV that understands
 | |
| 	file://filename entries.
 | |
| 
 | |
| -s::
 | |
| --sort=::
 | |
| 	Sort by key(s): pid, comm, dso, symbol.
 | |
| 
 | |
| -t::
 | |
| --field-separator=::
 | |
| 
 | |
| 	Use a special separator character and don't pad with spaces, replacing
 | |
| 	all occurances of this separator in symbol names (and other output)
 | |
| 	with a '.' character, that thus it's the only non valid separator.
 | |
| 
 | |
| -v::
 | |
| --verbose::
 | |
| 	Be verbose, for instance, show the raw counts in addition to the
 | |
| 	diff.
 | |
| 
 | |
| SEE ALSO
 | |
| --------
 | |
| linkperf:perf-record[1]
 |