Arnaldo Carvalho de Melo
cf4e5b0838
perf symbols: Use dso->long_name in dsos__find()
...
If not we end up duplicating the module DSOs because first we
insert them using the short name found in /proc/modules, then,
when processing synthesized MMAP events we add them again.
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: <1263519930-22803-1-git-send-email-acme@infradead.org >
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2010-01-16 10:58:47 +01:00
Arnaldo Carvalho de Melo
9e201442de
perf symbols: Cache /proc/kallsyms files by build-id
...
So that when we don't have a vmlinux handy we can store the
kallsyms for later use by 'perf report'.
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: <1263501006-14185-3-git-send-email-acme@infradead.org >
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2010-01-16 10:58:47 +01:00
Arnaldo Carvalho de Melo
8d0591f6ad
perf symbols: Don't try to load kallsyms if doesn't match the record build-id
...
Now a perf.data file collected on a x86_64 fedora 12 machine
gets properly parsed on a Debian testing PARISC64 machine with
32-bit userland:
acme@parisc:~/git/linux-2.6-tip$ perf report 2> /dev/null | head -15
# Samples: 293085637
#
# Overhead Command Shared Object Symbol
# ........ ............... ................................. ......
#
35.11% find [kernel.kallsyms] [k] 0xffffffff81002b5a
18.25% perf [kernel.kallsyms] [k] 0xffffffff8102235f
9.07% find find [.] 0x0000000000fb0e
5.80% swapper [kernel.kallsyms] [k] 0xffffffff8102235f
3.29% perf libc-2.10.2.so [.] __GI_strcmp
2.70% find libc-2.10.2.so [.] __GI_memmove
2.33% init [kernel.kallsyms] [k] 0xffffffff810091b9
2.03% find libc-2.10.2.so [.] _int_malloc
1.67% find libc-2.10.2.so [.] _IO_vfprintf_internal
1.65% sshd libcrypto.so.0.9.8k [.] 0x00000000105440
acme@parisc:~/git/linux-2.6-tip$
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: <1263501006-14185-2-git-send-email-acme@infradead.org >
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2010-01-16 10:58:46 +01:00
Arnaldo Carvalho de Melo
1b75962e92
perf tools: Convert getpagesize() uses to sysconf(_SC_GETPAGESIZE)
...
Using the more portable and equivalent sysconf call.
Reported-by: Aristeu Rozanski <aris@redhat.com >
Reported-by: Ulrich Drepper <drepper@redhat.com >
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com >
Cc: Aristeu Rozanski <aris@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 >
Cc: Ulrich Drepper <drepper@redhat.com >
LKML-Reference: <1263501006-14185-1-git-send-email-acme@infradead.org >
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2010-01-16 10:58:46 +01:00
Arnaldo Carvalho de Melo
ba21594cdd
perf tools: Cross platform perf.data analysis support
...
There are still some problems related to loading vmlinux files,
but those are unrelated to the feature implemented in this
patch, so will get fixed in the next patches, but here are some
results:
1. collect perf.data file on a Fedora 12 machine, x86_64, 64-bit
userland
2. transfer it to a Debian Testing machine, PARISC64, 32-bit
userland
acme@parisc:~/git/linux-2.6-tip$ perf buildid-list | head -5
74f9930ee94475b6b3238caf3725a50d59cb994b [kernel.kallsyms]
55fdd56670453ea66c011158c4b9d30179c1d049 /lib/modules/2.6.33-rc4-tip+/kernel/net/ipv4/netfilter/ipt_MASQUERADE.ko
41adff63c730890480980d5d8ba513f1c216a858 /lib/modules/2.6.33-rc4-tip+/kernel/net/ipv4/netfilter/iptable_nat.ko
90a33def1077bb8e97b8a78546dc96c2de62df46 /lib/modules/2.6.33-rc4-tip+/kernel/net/ipv4/netfilter/nf_nat.ko
984c7bea90ce1376d5c8e7ef43a781801286e62d /lib/modules/2.6.33-rc4-tip+/kernel/drivers/net/tun.ko
acme@parisc:~/git/linux-2.6-tip$ perf buildid-list | tail -5
22492f3753c6a67de5c7ccbd6b863390c92c0723 /usr/lib64/libXt.so.6.0.0
353802bb7e1b895ba43507cc678f951e778e4c6f /usr/lib64/libMagickCore.so.2.0.0
d10c2897558595efe7be8b0584cf7e6398bc776c /usr/lib64/libfprint.so.0.0.0
a83ecfb519a788774a84d5ddde633c9ba56c03ab /home/acme/bin/perf
d3ca765a8ecf257d263801d7ad8c49c189082317 /usr/lib64/libdwarf.so.0.0
acme@parisc:~/git/linux-2.6-tip$
acme@parisc:~/git/linux-2.6-tip$ perf report --sort comm
The file [kernel.kallsyms] cannot be used, trying to use /proc/kallsyms...
^^^^ The problem related to vmlinux handling, it shouldn't be trying this
^^^^ rather alien /proc/kallsyms at all...
/lib64/libpthread-2.10.2.so with build id 5c68f7afeb33309c78037e374b0deee84dd441f6 not found, continuing without symbols
/lib64/libc-2.10.2.so with build id eb4ec8fa8b2a5eb18cad173c92f27ed8887ed1c1 not found, continuing without symbols
/home/acme/bin/perf with build id a83ecfb519a788774a84d5ddde633c9ba56c03ab not found, continuing without symbols
/usr/sbin/openvpn with build id f2037a091ef36b591187a858d75e203690ea9409 not found, continuing without symbols
Failed to open /lib/modules/2.6.33-rc4-tip+/kernel/drivers/net/e1000e/e1000e.ko, continuing without symbols
Failed to open /lib/modules/2.6.33-rc4-tip+/kernel/drivers/net/wireless/iwlwifi/iwlcore.ko, continuing without symbols
<SNIP more complaints about not finding the right build-ids,
those will have to wait for 'perf archive' or plain
copying what was collected by 'perf record' on the x86_64,
source machine, see further below for an example of this >
# Samples: 293085637
#
# Overhead Command
# ........ ...............
#
61.70% find
23.50% perf
5.86% swapper
3.12% sshd
2.39% init
0.87% bash
0.86% sleep
0.59% dbus-daemon
0.25% hald
0.24% NetworkManager
0.19% hald-addon-rfki
0.15% openvpn
0.07% phy0
0.07% events/0
0.05% iwl3945
0.05% events/1
0.03% kondemand/0
acme@parisc:~/git/linux-2.6-tip$
Which matches what we get when running the same command for the
same perf.data file on the F12, x86_64, source machine:
[root@doppio linux-2.6-tip]# perf report --sort comm
# Samples: 293085637
#
# Overhead Command
# ........ ...............
#
61.70% find
23.50% perf
5.86% swapper
3.12% sshd
2.39% init
0.87% bash
0.86% sleep
0.59% dbus-daemon
0.25% hald
0.24% NetworkManager
0.19% hald-addon-rfki
0.15% openvpn
0.07% phy0
0.07% events/0
0.05% iwl3945
0.05% events/1
0.03% kondemand/0
[root@doppio linux-2.6-tip]#
The other modes work as well, modulo the problem with vmlinux:
acme@parisc:~/git/linux-2.6-tip$ perf report --sort comm,dso 2> /dev/null | head -15
# Samples: 293085637
#
# Overhead Command Shared Object
# ........ ............... .................................
#
35.11% find ffffffff81002b5a
18.25% perf ffffffff8102235f
16.17% find libc-2.10.2.so
9.07% find find
5.80% swapper ffffffff8102235f
3.95% perf libc-2.10.2.so
2.33% init ffffffff810091b9
1.65% sshd libcrypto.so.0.9.8k
1.35% find [e1000e]
0.68% sleep libc-2.10.2.so
acme@parisc:~/git/linux-2.6-tip$
And the lack of the right buildids:
acme@parisc:~/git/linux-2.6-tip$ perf report --sort comm,dso,symbol 2> /dev/null | head -15
# Samples: 293085637
#
# Overhead Command Shared Object Symbol
# ........ ............... ................................. ......
#
35.11% find ffffffff81002b5a [k] 0xffffffff81002b5a
18.25% perf ffffffff8102235f [k] 0xffffffff8102235f
16.17% find libc-2.10.2.so [.] 0x00000000045782
9.07% find find [.] 0x0000000000fb0e
5.80% swapper ffffffff8102235f [k] 0xffffffff8102235f
3.95% perf libc-2.10.2.so [.] 0x0000000007f398
2.33% init ffffffff810091b9 [k] 0xffffffff810091b9
1.65% sshd libcrypto.so.0.9.8k [.] 0x00000000105440
1.35% find [e1000e] [k] 0x00000000010948
0.68% sleep libc-2.10.2.so [.] 0x0000000011ad5b
acme@parisc:~/git/linux-2.6-tip$
But if we:
acme@parisc:~/git/linux-2.6-tip$ ls ~/.debug
ls: cannot access /home/acme/.debug: No such file or directory
acme@parisc:~/git/linux-2.6-tip$ mkdir -p ~/.debug/lib64/libc-2.10.2.so/
acme@parisc:~/git/linux-2.6-tip$ scp doppio:.debug/lib64/libc-2.10.2.so/* ~/.debug/lib64/libc-2.10.2.so/
acme@doppio's password:
eb4ec8fa8b2a5eb18cad173c92f27ed8887ed1c1 100% 1783KB 714.7KB/s 00:02
acme@parisc:~/git/linux-2.6-tip$ mkdir -p ~/.debug/.build-id/eb
acme@parisc:~/git/linux-2.6-tip$ ln -s ../../lib64/libc-2.10.2.so/eb4ec8fa8b2a5eb18cad173c92f27ed8887ed1c1 ~/.debug/.build-id/eb/4ec8fa8b2a5eb18cad173c92f27ed8887ed1c1
acme@parisc:~/git/linux-2.6-tip$ perf report --dsos libc-2.10.2.so 2> /dev/null
# dso: libc-2.10.2.so
# Samples: 64281170
#
# Overhead Command Symbol
# ........ ............... ......
#
14.98% perf [.] __GI_strcmp
12.30% find [.] __GI_memmove
9.25% find [.] _int_malloc
7.60% find [.] _IO_vfprintf_internal
6.10% find [.] _IO_new_file_xsputn
6.02% find [.] __GI_close
3.08% find [.] _IO_file_overflow_internal
3.08% find [.] malloc_consolidate
3.08% find [.] _int_free
3.08% find [.] __strchrnul
3.08% find [.] __getdents64
3.08% find [.] __write_nocancel
3.08% sleep [.] __GI__dl_addr
3.08% sshd [.] __libc_select
3.08% find [.] _IO_new_file_write
3.07% find [.] _IO_new_do_write
3.06% find [.] __GI___errno_location
3.05% find [.] __GI___libc_malloc
3.04% perf [.] __GI_memcpy
1.71% find [.] __fprintf_chk
1.29% bash [.] __gconv_transform_utf8_internal
0.79% dbus-daemon [.] __GI_strlen
#
# (For a higher level overview, try: perf report --sort comm,dso)
#
acme@parisc:~/git/linux-2.6-tip$
Which matches what we get on the source, F12, x86_64 machine:
[root@doppio linux-2.6-tip]# perf report --dsos libc-2.10.2.so
# dso: libc-2.10.2.so
# Samples: 64281170
#
# Overhead Command Symbol
# ........ ............... ......
#
14.98% perf [.] __GI_strcmp
12.30% find [.] __GI_memmove
9.25% find [.] _int_malloc
7.60% find [.] _IO_vfprintf_internal
6.10% find [.] _IO_new_file_xsputn
6.02% find [.] __GI_close
3.08% find [.] _IO_file_overflow_internal
3.08% find [.] malloc_consolidate
3.08% find [.] _int_free
3.08% find [.] __strchrnul
3.08% find [.] __getdents64
3.08% find [.] __write_nocancel
3.08% sleep [.] __GI__dl_addr
3.08% sshd [.] __libc_select
3.08% find [.] _IO_new_file_write
3.07% find [.] _IO_new_do_write
3.06% find [.] __GI___errno_location
3.05% find [.] __GI___libc_malloc
3.04% perf [.] __GI_memcpy
1.71% find [.] __fprintf_chk
1.29% bash [.] __gconv_transform_utf8_internal
0.79% dbus-daemon [.] __GI_strlen
#
# (For a higher level overview, try: perf report --sort comm,dso)
#
[root@doppio linux-2.6-tip]#
So I think this is really, really nice in that it demonstrates
the portability of perf.data files and the use of build-ids
accross such aliens worlds :-)
There are some things to fix tho, like the bitmap on the header,
but things are looking good.
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: <1263478990-8200-2-git-send-email-acme@infradead.org >
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2010-01-16 10:58:45 +01:00
Arnaldo Carvalho de Melo
0d755034db
perf tools: Don't cast RIP to pointers
...
Since they can come from another architecture with bigger
pointers, i.e. processing a 64-bit perf.data on a 32-bit arch.
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: <1263478990-8200-1-git-send-email-acme@infradead.org >
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2010-01-16 10:58:45 +01:00
Arnaldo Carvalho de Melo
b7cece7678
perf tools: Encode kernel module mappings in perf.data
...
We were always looking at the running machine /proc/modules,
even when processing a perf.data file, which only makes sense
when we're doing 'perf record' and 'perf report' on the same
machine, and in close sucession, or if we don't use modules at
all, right Peter? ;-)
Now, at 'perf record' time we read /proc/modules, find the long
path for modules, and put them as PERF_MMAP events, just like we
did to encode the reloc reference symbol for vmlinux. Talking
about that now it is encoded in .pgoff, so that we can use
.{start,len} to store the address boundaries for the kernel so
that when we reconstruct the kmaps tree we can do lookups right
away, without having to fixup the end of the kernel maps like we
did in the past (and now only in perf record).
One more step in the 'perf archive' direction when we'll finally
be able to collect data in one machine and analyse in another.
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: <1263396139-4798-1-git-send-email-acme@infradead.org >
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2010-01-13 17:39:43 +01:00
Arnaldo Carvalho de Melo
cf5531148f
perf tools: Create typedef for common event synthesizing callback
...
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: <1262901583-8074-3-git-send-email-acme@infradead.org >
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2010-01-13 10:09:16 +01:00
Arnaldo Carvalho de Melo
a89e5abe3e
perf symbols: Record the domain of DSOs in HEADER_BUILD_ID header table
...
So that we can restore them to the right DSO list (either
dsos__kernel or dsos__user).
We do that just like the kernel does for the other events,
encoding PERF_RECORD_MISC_{KERNEL,USER} in perf_event_header.
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: <1262901583-8074-2-git-send-email-acme@infradead.org >
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2010-01-13 10:09:16 +01:00
Alexander Beregalov
8d9e503928
perf: Fix memory leak: counterwidth
...
Signed-off-by: Alexander Beregalov <a.beregalov@gmail.com >
Cc: a.p.zijlstra@chello.nl
Cc: paulus@samba.org
LKML-Reference: <1262882447-23776-2-git-send-email-a.beregalov@gmail.com >
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2010-01-13 10:09:15 +01:00
Masami Hiramatsu
631c9def80
perf probe: Support --line option to show probable source-code lines
...
Add --line option to support showing probable source-code lines.
perf probe --line SRC:LN[-LN|+NUM]
or
perf probe --line FUNC[:LN[-LN|+NUM]]
This option shows source-code with line number if the line can
be probed. Lines without line number (and blue color) means that
the line can not be probed, because debuginfo doesn't have the
information of those lines.
The argument specifies the range of lines, "source.c:100-120"
shows lines between 100th to l20th in source.c file. And
"func:10+20" shows 20 lines from 10th line of func function.
e.g.
# ./perf probe --line kernel/sched.c:1080
<kernel/sched.c:1080>
*
* called with rq->lock held and irqs disabled
*/
static void hrtick_start(struct rq *rq, u64 delay)
{
struct hrtimer *timer = &rq->hrtick_timer;
1086 ktime_t time = ktime_add_ns(timer->base->get_time(), delay);
hrtimer_set_expires(timer, time);
1090 if (rq == this_rq()) {
1091 hrtimer_restart(timer);
1092 } else if (!rq->hrtick_csd_pending) {
1093 __smp_call_function_single(cpu_of(rq), &rq->hrtick_csd,
1094 rq->hrtick_csd_pending = 1;
If you specifying function name, this shows function-relative
line number.
# ./perf probe --line schedule
<schedule:0>
asmlinkage void __sched schedule(void)
1 {
struct task_struct *prev, *next;
unsigned long *switch_count;
struct rq *rq;
int cpu;
need_resched:
preempt_disable();
9 cpu = smp_processor_id();
10 rq = cpu_rq(cpu);
11 rcu_sched_qs(cpu);
12 prev = rq->curr;
13 switch_count = &prev->nivcsw;
Signed-off-by: Masami Hiramatsu <mhiramat@redhat.com >
Cc: Frederic Weisbecker <fweisbec@gmail.com >
Cc: Arnaldo Carvalho de Melo <acme@redhat.com >
Cc: systemtap <systemtap@sources.redhat.com >
Cc: DLE <dle-develop@lists.sourceforge.net >
Cc: Frederic Weisbecker <fweisbec@gmail.com >
Cc: Paul Mackerras <paulus@samba.org >
Cc: Arnaldo Carvalho de Melo <acme@redhat.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Mike Galbraith <efault@gmx.de >
LKML-Reference: <20100106144534.27218.77939.stgit@dhcp-100-2-132.bos.redhat.com >
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2010-01-13 10:09:14 +01:00
Masami Hiramatsu
6964cd2c8e
perf tools: Enhance glob string matching
...
Enhance strglobmatch() for supporting character classes([CHARS],
complementation and ranges are also supported) and escaped
special characters (\*, \? etc).
Signed-off-by: Masami Hiramatsu <mhiramat@redhat.com >
Cc: Frederic Weisbecker <fweisbec@gmail.com >
Cc: Arnaldo Carvalho de Melo <acme@redhat.com >
Cc: systemtap <systemtap@sources.redhat.com >
Cc: DLE <dle-develop@lists.sourceforge.net >
Cc: Frederic Weisbecker <fweisbec@gmail.com >
Cc: Paul Mackerras <paulus@samba.org >
Cc: Arnaldo Carvalho de Melo <acme@redhat.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Mike Galbraith <efault@gmx.de >
LKML-Reference: <20100105224724.19431.56271.stgit@dhcp-100-2-132.bos.redhat.com >
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2010-01-13 10:09:14 +01:00
Masami Hiramatsu
fb1d2edf7e
perf tools: Support tracepoint glob matching
...
Support glob wildcard when selecting tracepoint events by -e
option. Without this patch, perf-tools supports 'GROUP:*:record'
syntax for selecting all tracepoints under GROUP group.
With this patch, user can choose tracepoints more flexibly by using
partial wildcards, e.g. 'block:*bio*:record'.
Signed-off-by: Masami Hiramatsu <mhiramat@redhat.com >
Cc: Frederic Weisbecker <fweisbec@gmail.com >
Cc: Arnaldo Carvalho de Melo <acme@redhat.com >
Cc: systemtap <systemtap@sources.redhat.com >
Cc: DLE <dle-develop@lists.sourceforge.net >
Cc: Frederic Weisbecker <fweisbec@gmail.com >
Cc: Paul Mackerras <paulus@samba.org >
Cc: Arnaldo Carvalho de Melo <acme@redhat.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Mike Galbraith <efault@gmx.de >
LKML-Reference: <20100105224717.19431.68972.stgit@dhcp-100-2-132.bos.redhat.com >
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2010-01-13 10:09:13 +01:00
Masami Hiramatsu
72041334b8
perf probe: Show probe list in pager
...
Show probe list in pager, because the list can be longer than
a page.
Signed-off-by: Masami Hiramatsu <mhiramat@redhat.com >
Cc: Frederic Weisbecker <fweisbec@gmail.com >
Cc: Arnaldo Carvalho de Melo <acme@redhat.com >
Cc: systemtap <systemtap@sources.redhat.com >
Cc: DLE <dle-develop@lists.sourceforge.net >
Cc: Frederic Weisbecker <fweisbec@gmail.com >
Cc: Paul Mackerras <paulus@samba.org >
Cc: Arnaldo Carvalho de Melo <acme@redhat.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Mike Galbraith <efault@gmx.de >
LKML-Reference: <20100105224710.19431.61542.stgit@dhcp-100-2-132.bos.redhat.com >
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2010-01-13 10:09:13 +01:00
Masami Hiramatsu
bbaa46fac6
perf probe: Remove newline from die()
...
Remove newline from die(), because it is automatically added.
Signed-off-by: Masami Hiramatsu <mhiramat@redhat.com >
Cc: Frederic Weisbecker <fweisbec@gmail.com >
Cc: Arnaldo Carvalho de Melo <acme@redhat.com >
Cc: systemtap <systemtap@sources.redhat.com >
Cc: DLE <dle-develop@lists.sourceforge.net >
Cc: Frederic Weisbecker <fweisbec@gmail.com >
Cc: Paul Mackerras <paulus@samba.org >
Cc: Arnaldo Carvalho de Melo <acme@redhat.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Mike Galbraith <efault@gmx.de >
LKML-Reference: <20100105224703.19431.42475.stgit@dhcp-100-2-132.bos.redhat.com >
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2010-01-13 10:09:13 +01:00
Arnaldo Carvalho de Melo
56b03f3c4d
perf tools: Handle relocatable kernels
...
DSOs don't have this problem because the kernel emits a
PERF_MMAP for each new executable mapping it performs on
monitored threads.
To fix the kernel case we simulate the same behaviour, by having
'perf record' to synthesize a PERF_MMAP for the kernel, encoded
like this:
[root@doppio ~]# perf record -a -f sleep 1
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0.344 MB perf.data (~15038 samples) ]
[root@doppio ~]# perf report -D | head -10
0xd0 [0x40]: event: 1
.
. ... raw event: size 64 bytes
. 0000: 01 00 00 00 00 00 40 00 00 00 00 00 00 00 00 00 ......@........
. 0010: 00 00 00 81 ff ff ff ff 00 00 00 00 00 00 00 00 ...............
. 0020: 00 00 00 00 00 00 00 00 5b 6b 65 72 6e 65 6c 2e ........ [kernel
. 0030: 6b 61 6c 6c 73 79 6d 73 2e 5f 74 65 78 74 5d 00 kallsyms._text]
. 0xd0
[0x40]: PERF_RECORD_MMAP 0/0: [0xffffffff81000000((nil)) @ (nil)]: [kernel.kallsyms._text]
I.e. we identify such event as having:
.pid = 0
.filename = [kernel.kallsyms.REFNAME]
.start = REFNAME addr in /proc/kallsyms at 'perf record' time
and use now a hardcoded value of '.text' for REFNAME.
Then, later, in 'perf report', if there are any kernel hits and
thus we need to resolve kernel symbols, we search for REFNAME
and if its address changed, relocation happened and we thus must
change the kernel mapping routines to one that uses .pgoff as
the relocation to apply.
This way we use the same mechanism used for the other DSOs and
don't have to do a two pass in all the kernel symbols.
Reported-by: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com >
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com >
Cc: Frédéric Weisbecker <fweisbec@gmail.com >
Cc: "H. Peter Anvin" <hpa@zytor.com >
Cc: Mike Galbraith <efault@gmx.de >
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl >
Cc: Paul Mackerras <paulus@samba.org >
Cc: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com >
LKML-Reference: <1262717431-1246-1-git-send-email-acme@infradead.org >
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2010-01-13 10:09:11 +01:00
Arnaldo Carvalho de Melo
de1764892a
perf session: Keep pointers to the vmlinux maps
...
So that tools such as 'perf probe' don't have to lookup
'[kernel.kallsyms]' but instead access them directly after
perf_session__create_kernel_maps or
map_groups__create_kernel_maps.
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com >
Cc: Masami Hiramatsu <mhiramat@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: <1262629169-22797-4-git-send-email-acme@infradead.org >
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2010-01-13 10:09:10 +01:00
Arnaldo Carvalho de Melo
f92cb24c78
perf tools: Create write_padded routine out of __dsos__write_buildid_table
...
Will be used by other options where padding is needed.
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: <1262629169-22797-3-git-send-email-acme@infradead.org >
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2010-01-13 10:09:09 +01:00
Arnaldo Carvalho de Melo
36a3e6461a
perf symbols: Export symbol_type__is_a
...
Will be needed by the new HEADER_DSO_INFO feature that will be a
HEADER_BUILD_ID superset, replacing it.
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: <1262629169-22797-2-git-send-email-acme@infradead.org >
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2010-01-13 10:09:09 +01:00
Arnaldo Carvalho de Melo
682b335a5b
perf symbols: Generalise the kallsyms parsing routine
...
Will be used to find an specific symbol by name on 'perf record'
to support relocation reference symbols to support relocatable
kernels.
Still have to conver the perf trace tools to use it instead of
their current reimplementation.
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: <1262629169-22797-1-git-send-email-acme@infradead.org >
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2010-01-13 10:09:08 +01:00
Arnaldo Carvalho de Melo
ae99fb2c33
perf header: perf_header__push_event() shouldn't die
...
Just propagate eventual errors.
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: <1262047716-23171-2-git-send-email-acme@infradead.org >
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2009-12-30 11:59:57 +01:00
Arnaldo Carvalho de Melo
769885f372
perf header: Do_read shouldn't die
...
Propagate the errors instead, its callers already propagate
other errors.
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: <1262047716-23171-1-git-send-email-acme@infradead.org >
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2009-12-30 11:59:56 +01:00
Liming Wang
63bbd5e2d5
perf probe: Change CONFIG_KPROBE_TRACER to CONFIG_KPROBE_EVENT
...
make the config name consistent
Signed-off-by: Liming Wang <liming.wang@windriver.com >
Acked-by: Masami Hiramatsu <mhiramat@redhat.com >
Cc: Frederic Weisbecker <fweisbec@gmail.com >
Cc: Paul Mackerras <paulus@samba.org >
Cc: Peter Zijlstra <peterz@infradead.org >
LKML-Reference: <1262075829-16257-3-git-send-email-liming.wang@windriver.com >
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2009-12-30 11:59:34 +01:00
Liming Wang
41bdcb23da
perf tools: Unify event type description
...
make event type description to a unified array and
the array index consistent to perf_type_id.
Signed-off-by: Liming Wang <liming.wang@windriver.com >
Cc: Frederic Weisbecker <fweisbec@gmail.com >
Cc: Masami Hiramatsu <mhiramat@redhat.com >
Cc: Paul Mackerras <paulus@samba.org >
Cc: Peter Zijlstra <peterz@infradead.org >
LKML-Reference: <1262075829-16257-1-git-send-email-liming.wang@windriver.com >
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2009-12-30 11:58:53 +01:00
Xiao Guangrong
9967411e5b
perf trace: Fix forgotten close of file/dir
...
Signed-off-by: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Paul Mackerras <paulus@samba.org >
Cc: Frederic Weisbecker <fweisbec@gmail.com >
Cc: Clark Williams <williams@redhat.com >
Cc: John Kacur <jkacur@redhat.com >
LKML-Reference: <4B387122.7090801@cn.fujitsu.com >
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2009-12-28 10:36:36 +01:00
Xiao Guangrong
61be3e59ba
perf trace: Clean up find_debugfs()
...
Remove redundant code for 'perf trace'
Signed-off-by: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Paul Mackerras <paulus@samba.org >
Cc: Frederic Weisbecker <fweisbec@gmail.com >
Cc: Clark Williams <williams@redhat.com >
Cc: John Kacur <jkacur@redhat.com >
LKML-Reference: <4B3870DE.7090500@cn.fujitsu.com >
[ v2: resolved conflicts with recent changes ]
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2009-12-28 10:36:36 +01:00
Xiao Guangrong
29c52aa230
perf tools: Mount debugfs automatically
...
Mount debugfs filesystem under '/sys/kernel/debug', if it's not
mounted.
Signed-off-by: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Paul Mackerras <paulus@samba.org >
Cc: Frederic Weisbecker <fweisbec@gmail.com >
Cc: Clark Williams <williams@redhat.com >
Cc: John Kacur <jkacur@redhat.com >
LKML-Reference: <4B387090.7080407@cn.fujitsu.com >
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2009-12-28 10:36:36 +01:00
Ulrich Drepper
659d8cfbb2
perf tools: Do a few more directory handling optimizations
...
A few more optimizations for perf when dealing with directories.
Some of them significantly cut down the work which has to be
done. d_type should always be set; otherwise fix the kernel
code. And there are functions available to parse fstab-like
files, so use them.
Signed-off-by: Ulrich Drepper <drepper@redhat.com >
Acked-by: Pekka Enberg <penberg@cs.helsinki.fi >
Cc: a.p.zijlstra@chello.nl
Cc: acme@redhat.com
Cc: eranian@google.com
Cc: fweisbec@gmail.com
Cc: lizf@cn.fujitsu.com
Cc: paulus@samba.org
Cc: xiaoguangrong@cn.fujitsu.com
LKML-Reference: <200912192140.nBJLeSfA028905@hs20-bc2-1.build.redhat.com >
[ v2: two small stylistic fixlets ]
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2009-12-28 10:18:37 +01:00
Arnaldo Carvalho de Melo
4cf40131a5
perf record: Introduce a symtab cache
...
Now a cache will be created in a ~/.debug debuginfo like
hierarchy, so that at the end of a 'perf record' session all the
binaries (with build-ids) involved get collected and indexed by
their build-ids, so that perf report can find them.
This is interesting when developing software where you want to
do a 'perf diff' with the previous build and opens avenues for
lots more interesting tools, like a 'perf diff --graph' that
takes more than two binaries into account.
Tunables for collecting just the symtabs can be added if one
doesn't want to have the full binary, but having the full binary
allows things like 'perf rerecord' or other tools that can
re-run the tests by having access to the exact binary in some
perf.data file, so it may well be interesting to keep the full
binary there.
Space consumption is minimised by trying to use hard links, a
'perf cache' tool to manage the space used, a la ccache is
required to purge older entries.
With this in place it will be possible also to introduce new
commands, 'perf archive' and 'perf restore' (or some more
suitable and future proof names) to create a cpio/tar file with
the perf data and the files in the cache that _had_ perf hits of
interest.
There are more aspects to polish, like finding the right vmlinux
file to cache, etc, but this is enough for a first step.
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: <1261957026-15580-10-git-send-email-acme@infradead.org >
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2009-12-28 09:03:36 +01:00
Arnaldo Carvalho de Melo
55aa640f54
perf session: Remove redundant prefix & suffix from perf_event_ops
...
Since now all that we have are perf event handlers, leave just
the name of the event.
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: <1261957026-15580-9-git-send-email-acme@infradead.org >
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2009-12-28 09:03:35 +01:00
Arnaldo Carvalho de Melo
f7d87444e6
perf session: Move full_paths config to symbol_conf
...
Now perf_event_ops has just that, event handlers.
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: <1261957026-15580-8-git-send-email-acme@infradead.org >
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2009-12-28 09:03:35 +01:00
Arnaldo Carvalho de Melo
31d337c4ee
perf session: Move total_unknown to perf_session->unknown events
...
As this is a session property, not belonging to perf_event_ops,
that can be shared by many perf_session instances.
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: <1261957026-15580-7-git-send-email-acme@infradead.org >
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2009-12-28 09:03:34 +01:00
Arnaldo Carvalho de Melo
d549c76901
perf session: Remove sample_type_check from event_ops
...
This is really something tools need to do before asking for the
events to be processed, leaving perf_session__process_events to
do just that, process events.
Also add a msg parameter to perf_session__has_traces() so that
the right message can be printed, fixing a regression added by
me in the previous cset (right timechart message) and also
fixing 'perf kmem', that was not asking if 'perf kmem record'
was ran.
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: <1261957026-15580-6-git-send-email-acme@infradead.org >
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2009-12-28 09:03:34 +01:00
Arnaldo Carvalho de Melo
27295592c2
perf session: Share the common trace sample_check routine as perf_session__has_traces
...
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: <1261957026-15580-5-git-send-email-acme@infradead.org >
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2009-12-28 09:03:33 +01:00
Arnaldo Carvalho de Melo
4a58e61161
perf tools: Move the map class definition to a separate header
...
And this resulted in the need for adding some missing includes
in some places that were getting the definitions needed out of
sheer luck.
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: <1261957026-15580-4-git-send-email-acme@infradead.org >
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2009-12-28 09:03:33 +01:00
Arnaldo Carvalho de Melo
06aae59003
perf session: Move the event processing routines to session.c
...
No need for an extra "data_map" file since the routines there
operate mainly on a perf_session instance.
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: <1261957026-15580-3-git-send-email-acme@infradead.org >
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2009-12-28 09:03:32 +01:00
Arnaldo Carvalho de Melo
b5b60fda1e
perf session: Make events_stats u64 to avoid overflow on 32-bit arches
...
Pekka Enberg reported weird percentages in perf report. It
turns out we are overflowing a 32-bit variables in struct
events_stats on 32-bit architectures.
Before:
[acme@ana linux-2.6-tip]$ perf report -i pekka.perf.data 2> /dev/null | head -10
281.96% Xorg b710a561 [.] 0x000000b710a561
140.15% Xorg [kernel] [k] __initramfs_end
51.56% metacity libgobject-2.0.so.0.2000.1 [.] 0x00000000026e46
35.12% evolution libcairo.so.2.10800.6 [.] 0x000000000203bd
33.84% metacity libpthread-2.9.so [.] 0x00000000007a3d
After:
[acme@ana linux-2.6-tip]$ perf report -i pekka.perf.data 2> /dev/null | head -10
30.04% Xorg b710a561 [.] 0x000000b710a561
14.93% Xorg [kernel] [k] __initramfs_end
5.49% metacity libgobject-2.0.so.0.2000.1 [.] 0x00000000026e46
3.74% evolution libcairo.so.2.10800.6 [.] 0x000000000203bd
3.61% metacity libpthread-2.9.so [.] 0x00000000007a3d
Reported-by: Pekka Enberg <penberg@cs.helsinki.fi >
Tested-by: Pekka Enberg <penberg@cs.helsinki.fi >
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com >
Cc: Frederic 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: <1261148583-20395-1-git-send-email-acme@infradead.org >
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2009-12-18 16:22:52 +01:00
Masami Hiramatsu
b7702a2136
perf probe: Check new event name
...
Check new event name is same syntax as a C symbol in perf command.
In other words, checking the name is as like as other tracepoint
events.
This can prevent user to create an event with useless name (e.g.
foo|bar, foo*bar).
Signed-off-by: Masami Hiramatsu <mhiramat@redhat.com >
Cc: Frederic Weisbecker <fweisbec@gmail.com >
Cc: Paul Mackerras <paulus@samba.org >
Cc: Arnaldo Carvalho de Melo <acme@redhat.com >
Cc: Steven Rostedt <rostedt@goodmis.org >
Cc: Jim Keniston <jkenisto@us.ibm.com >
Cc: Ananth N Mavinakayanahalli <ananth@in.ibm.com >
Cc: Christoph Hellwig <hch@infradead.org >
Cc: Jason Baron <jbaron@redhat.com >
Cc: K.Prasad <prasad@linux.vnet.ibm.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com >
Cc: Frederic Weisbecker <fweisbec@gmail.com >
Cc: systemtap <systemtap@sources.redhat.com >
Cc: DLE <dle-develop@lists.sourceforge.net >
LKML-Reference: <20091216222415.14459.71383.stgit@dhcp-100-2-132.bos.redhat.com >
[ v2: minor cleanups ]
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2009-12-17 09:42:44 +01:00
Masami Hiramatsu
27f3b24de0
perf probe: Fix libdwarf include path for Debian
...
Fix libdwarf include path to fit debian-like systems too.
Borislav Petkov reported:
> even after installing libdwarf-dev on my debian box here,
> make in tools/perf/ still complains that it cannot find libdwarf:
>
> Makefile:491: No libdwarf.h found or old libdwarf.h found, disables dwarf
> support. Please install libdwarf-dev/libdwarf-devel >= 20081231
>
> The problem is that the include path on debian is not
> /usr/include/libdwarf/ but simply /usr/include because the debian
> package libdwarf-dev puts the headers straight into
> /usr/include.
This patch adds -I/usr/include/libdwarf to BASIC_CFLAGS
and fix probe-finder.h to include just libdwarf.h/dwarf.h.
This patch also adds a workaround for the undefined _MIPS_SZLONG
bug in libdwarf.h.
Reported-by: Borislav Petkov <borislav.petkov@amd.com >
Signed-off-by: Masami Hiramatsu <mhiramat@redhat.com >
Cc: Frederic Weisbecker <fweisbec@gmail.com >
Cc: Paul Mackerras <paulus@samba.org >
Cc: Arnaldo Carvalho de Melo <acme@redhat.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com >
Cc: Gabor Gombas <gombasg@sztaki.hu >
Cc: systemtap <systemtap@sources.redhat.com >
Cc: DLE <dle-develop@lists.sourceforge.net >
LKML-Reference: <20091216221618.13816.83296.stgit@dhcp-100-2-132.bos.redhat.com >
[ v2: small stylistic fixlets to probe-finder.h ]
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2009-12-17 08:06:41 +01:00
Arnaldo Carvalho de Melo
9b33827de6
perf diff: Percent calcs should use double values
...
Otherwise we do integer math and the delta values round up to
multiples of 1.0%.
Also, calculate absolute values. Things look precise now:
$ perf report -i perf.data.old --sort dso,symbol | head -13
9.02% libc-2.10.1.so [.] _IO_vfprintf_internal
4.88% find [.] 0x00000000014af0
2.91% [kernel] [k] __kmalloc
2.85% [kernel] [k] ext4_htree_store_dirent
2.50% libc-2.10.1.so [.] __GI_memmove
2.44% [kernel] [k] half_md4_transform
2.43% [kernel] [k] _spin_lock
2.33% [kernel] [k] system_call
$ perf report -i perf.data --sort dso,symbol | head -13
8.55% libc-2.10.1.so [.] _IO_vfprintf_internal
3.11% [kernel] [k] __kmalloc
3.07% [kernel] [k] ext4_htree_store_dirent
2.66% find [.] 0x00000000016bcf
2.61% [kernel] [k] _atomic_dec_and_lock
2.46% [kernel] [k] half_md4_transform
2.41% libc-2.10.1.so [.] __GI_memmove
2.30% find [.] 0x00000000009219
$ perf diff | head -13
9.02% -0.47% libc-2.10.1.so [.] _IO_vfprintf_internal
2.91% +0.20% [kernel] [k] __kmalloc
2.85% +0.23% [kernel] [k] ext4_htree_store_dirent
1.99% +0.62% [kernel] [k] _atomic_dec_and_lock
2.44% +0.02% [kernel] [k] half_md4_transform
2.50% -0.09% libc-2.10.1.so [.] __GI_memmove
1.88% +0.01% [kernel] [k] __d_lookup
2.43% -0.75% [kernel] [k] _spin_lock
0.97% +0.62% [kernel] [k] path_get
1.99% -0.42% libc-2.10.1.so [.] _int_malloc
$
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: <1260981109-2621-1-git-send-email-acme@infradead.org >
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2009-12-16 18:29:10 +01:00
Arnaldo Carvalho de Melo
c351c28161
perf diff: Use perf_session__fprintf_hists just like 'perf record'
...
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 >
2009-12-16 16:53:37 +01:00
Arnaldo Carvalho de Melo
3e6055ab98
perf session: Move perf report specific hits out of perf_session__fprintf_hists
...
Those don't make sense for tools such as 'perf diff'.
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: <1260973631-28035-2-git-send-email-acme@infradead.org >
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2009-12-16 16:51:50 +01:00
Arnaldo Carvalho de Melo
4ecf84d086
perf tools: Move hist entries printing routines from perf report
...
Will be used in other tools such as 'perf diff'.
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: <1260973631-28035-1-git-send-email-acme@infradead.org >
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2009-12-16 16:51:50 +01:00
Arnaldo Carvalho de Melo
d599db3fc5
perf report: Generalize perf_session__fprintf_hists()
...
Pull it out of builtin-report - further changes will be made and it
will then be reusable in 'perf diff' as well.
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: <1260914682-29652-4-git-send-email-acme@infradead.org >
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2009-12-16 08:53:50 +01:00
Arnaldo Carvalho de Melo
c410a33887
perf symbols: Move symbol filtering to event__preprocess_sample()
...
So that --dsos, --comm, --symbols can bem used in more tools,
like in perf diff:
$ perf record -f find / > /dev/null
$ perf record -f find / > /dev/null
$ perf diff --dsos /lib64/libc-2.10.1.so | head -5
1 +22392124 /lib64/libc-2.10.1.so _IO_vfprintf_internal
2 +6410655 /lib64/libc-2.10.1.so __GI_memmove
3 +1 +9192692 /lib64/libc-2.10.1.so _int_malloc
4 -1 -15158605 /lib64/libc-2.10.1.so _int_free
5 +45669 /lib64/libc-2.10.1.so _IO_new_file_xsputn
$
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: <1260914682-29652-3-git-send-email-acme@infradead.org >
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2009-12-16 08:53:49 +01:00
Arnaldo Carvalho de Melo
655000e7c7
perf symbols: Adopt the strlists for dso, comm
...
Will be used in perf diff too.
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: <1260914682-29652-2-git-send-email-acme@infradead.org >
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2009-12-16 08:53:49 +01:00
Arnaldo Carvalho de Melo
75be6cf487
perf symbols: Make symbol_conf global
...
This simplifies a lot of functions, less stuff to be done by
tool writers.
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: <1260914682-29652-1-git-send-email-acme@infradead.org >
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2009-12-16 08:53:48 +01:00
Masami Hiramatsu
7ef17aafc9
perf probe: Fix to show which probe point is not found
...
Fix perf probe to show which probe point is not found.
With out this patch, it shows just "No probe point found."
This doesn't help users if they specify several probes.
e.g.
# perf probe -f --add schedule --add test
Fatal: No probe point found.
This patch makes error message more helpful as below.
# perf probe --add schedule --add test
Fatal: Probe point 'test' not found. - probe not added.
Signed-off-by: Masami Hiramatsu <mhiramat@redhat.com >
Cc: Paul Mackerras <paulus@samba.org >
Cc: Arnaldo Carvalho de Melo <acme@redhat.com >
Cc: Steven Rostedt <rostedt@goodmis.org >
Cc: Jim Keniston <jkenisto@us.ibm.com >
Cc: Ananth N Mavinakayanahalli <ananth@in.ibm.com >
Cc: Christoph Hellwig <hch@infradead.org >
Cc: Frank Ch. Eigler <fche@redhat.com >
Cc: Jason Baron <jbaron@redhat.com >
Cc: K.Prasad <prasad@linux.vnet.ibm.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com >
Cc: systemtap <systemtap@sources.redhat.com >
Cc: DLE <dle-develop@lists.sourceforge.net >
Cc: Frederic Weisbecker <fweisbec@gmail.com >
LKML-Reference: <20091215153247.17436.49068.stgit@dhcp-100-2-132.bos.redhat.com >
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2009-12-15 20:22:05 +01:00
Masami Hiramatsu
a128168d1e
perf probe: Check build-id of vmlinux
...
Check build-id of vmlinux by using functions in symbol.c.
This also exposes map__load() for getting vmlinux path,
and removes vmlinux path list in builtin-probe.c,
because symbol.c already has that. Checking build-id
prevents users to open old or different debuginfo from
current running kernel.
Signed-off-by: Masami Hiramatsu <mhiramat@redhat.com >
Cc: Paul Mackerras <paulus@samba.org >
Cc: Arnaldo Carvalho de Melo <acme@redhat.com >
Cc: Steven Rostedt <rostedt@goodmis.org >
Cc: Jim Keniston <jkenisto@us.ibm.com >
Cc: Ananth N Mavinakayanahalli <ananth@in.ibm.com >
Cc: Christoph Hellwig <hch@infradead.org >
Cc: Frank Ch. Eigler <fche@redhat.com >
Cc: Jason Baron <jbaron@redhat.com >
Cc: K.Prasad <prasad@linux.vnet.ibm.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com >
Cc: systemtap <systemtap@sources.redhat.com >
Cc: DLE <dle-develop@lists.sourceforge.net >
Cc: Frederic Weisbecker <fweisbec@gmail.com >
LKML-Reference: <20091215153232.17436.45539.stgit@dhcp-100-2-132.bos.redhat.com >
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2009-12-15 20:22:04 +01:00
Masami Hiramatsu
d761b08bff
perf probe: Reject second attempt of adding same-name event
...
Reject second attempt of adding same-name event. This patch
also provides --force option which allows user to add additional
probe events on the same-name event.
e.g.
(the first attempt : success)
./perf probe schedule
Added new event:
probe:schedule (on schedule+0)
(the second attempt : failure)
./perf probe schedule:11
Error: event "schedule" already exists. (Use -f to force duplicates.)
Fatal: Can't add new event.
(the second attempt with -f : successfully added)
./perf probe -f schedule:11
Added new event:
probe:schedule_1 (on schedule+45)
Signed-off-by: Masami Hiramatsu <mhiramat@redhat.com >
Cc: Paul Mackerras <paulus@samba.org >
Cc: Arnaldo Carvalho de Melo <acme@redhat.com >
Cc: Steven Rostedt <rostedt@goodmis.org >
Cc: Jim Keniston <jkenisto@us.ibm.com >
Cc: Ananth N Mavinakayanahalli <ananth@in.ibm.com >
Cc: Christoph Hellwig <hch@infradead.org >
Cc: Frank Ch. Eigler <fche@redhat.com >
Cc: Jason Baron <jbaron@redhat.com >
Cc: K.Prasad <prasad@linux.vnet.ibm.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com >
Cc: systemtap <systemtap@sources.redhat.com >
Cc: DLE <dle-develop@lists.sourceforge.net >
Cc: Frederic Weisbecker <fweisbec@gmail.com >
LKML-Reference: <20091215153225.17436.15166.stgit@dhcp-100-2-132.bos.redhat.com >
Signed-off-by: Ingo Molnar <mingo@elte.hu >
2009-12-15 20:22:04 +01:00