[PATCH 1/2] perf symbols: Add machine helper routines

Previous thread: Re: [PATCH 7/8] padata: Flush the padata queues actively by Steffen Klassert on Friday, April 30, 2010 - 4:24 am. (1 message)

Next thread: [GIT PULL] Two small fixups by Jens Axboe on Thursday, April 29, 2010 - 11:37 am. (1 message)
From: Arnaldo Carvalho de Melo
Date: Thursday, April 29, 2010 - 3:14 pm

From: Arnaldo Carvalho de Melo <acme@redhat.com>

Hi Ingo,

	Please consider pulling from:

git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux-2.6 perf

	Now there are 7 patches in that repo.

Regards,

- Arnaldo

Arnaldo Carvalho de Melo (2):
  perf symbols: Add machine helper routines
  perf test: Initial regression testing command

 tools/perf/Documentation/perf-test.txt |   22 +++
 tools/perf/Makefile                    |    1 +
 tools/perf/builtin-kmem.c              |    2 +-
 tools/perf/builtin-test.c              |  281 ++++++++++++++++++++++++++++++++
 tools/perf/builtin.h                   |    1 +
 tools/perf/command-list.txt            |    1 +
 tools/perf/perf.c                      |    1 +
 tools/perf/util/map.h                  |   25 +++-
 tools/perf/util/symbol.c               |   77 +++++++---
 tools/perf/util/symbol.h               |    7 +
 10 files changed, 393 insertions(+), 25 deletions(-)
 create mode 100644 tools/perf/Documentation/perf-test.txt
 create mode 100644 tools/perf/builtin-test.c

--

From: Arnaldo Carvalho de Melo
Date: Thursday, April 29, 2010 - 3:14 pm

From: Arnaldo Carvalho de Melo <acme@redhat.com>

Created when writing the first 'perf test' regression testing routine.

Cc: Frédéric Weisbecker <fweisbec@gmail.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
LKML-Reference: <new-submission>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/builtin-kmem.c |    2 +-
 tools/perf/util/map.h     |   25 ++++++++++++--
 tools/perf/util/symbol.c  |   77 +++++++++++++++++++++++++++++++++------------
 tools/perf/util/symbol.h  |    7 ++++
 4 files changed, 86 insertions(+), 25 deletions(-)

diff --git a/tools/perf/builtin-kmem.c b/tools/perf/builtin-kmem.c
index 1563561..ee05dba 100644
--- a/tools/perf/builtin-kmem.c
+++ b/tools/perf/builtin-kmem.c
@@ -377,7 +377,7 @@ static void __print_result(struct rb_root *root, struct perf_session *session,
 		if (is_caller) {
 			addr = data->call_site;
 			if (!raw_ip)
-				sym = machine__find_function(machine, addr, &map, NULL);
+				sym = machine__find_kernel_function(machine, addr, &map, NULL);
 		} else
 			addr = data->ptr;
 
diff --git a/tools/perf/util/map.h b/tools/perf/util/map.h
index 881dba4..f391345 100644
--- a/tools/perf/util/map.h
+++ b/tools/perf/util/map.h
@@ -30,6 +30,7 @@ struct map {
 	u64			start;
 	u64			end;
 	enum map_type		type;
+	u32			priv;
 	u64			pgoff;
 
 	/* ip -> dso rip */
@@ -66,6 +67,12 @@ struct machine {
 	struct map	  *vmlinux_maps[MAP__NR_TYPES];
 };
 
+static inline
+struct map *machine__kernel_map(struct machine *self, enum map_type type)
+{
+	return self->vmlinux_maps[type];
+}
+
 static inline struct kmap *map__kmap(struct map *self)
 {
 	return (struct kmap *)(self + 1);
@@ -173,11 +180,21 @@ struct symbol *map_groups__find_symbol_by_name(struct map_groups *self,
 					       struct map **mapp,
 					       symbol_filter_t filter);
 
-static inline struct symbol *machine__find_function(struct machine *self,
-						    u64 addr, ...
From: Arnaldo Carvalho de Melo
Date: Thursday, April 29, 2010 - 3:14 pm

From: Arnaldo Carvalho de Melo <acme@redhat.com>

First an example with the first internal test:

[acme@doppio linux-2.6-tip]$ perf test
 1: vmlinux symtab matches kallsyms: Ok

So it run just one test, that is "vmlinux symtab matches kallsyms", and it was
successful.

If we run it in verbose mode, we'll see details about errors and extra warnings
for non-fatal problems:

[acme@doppio linux-2.6-tip]$ perf test -v
 1: vmlinux symtab matches kallsyms:
--- start ---
Looking at the vmlinux_path (5 entries long)
No build_id in vmlinux, ignoring it
No build_id in /boot/vmlinux, ignoring it
No build_id in /boot/vmlinux-2.6.34-rc4-tip+, ignoring it
Using /lib/modules/2.6.34-rc4-tip+/build/vmlinux for symbols
Maps only in vmlinux:
 ffffffff81cb81b1-ffffffff81e1149b 0 [kernel].init.text
 ffffffff81e1149c-ffffffff9fffffff 0 [kernel].exit.text
 ffffffffff600000-ffffffffff6000ff 0 [kernel].vsyscall_0
 ffffffffff600100-ffffffffff6003ff 0 [kernel].vsyscall_fn
 ffffffffff600400-ffffffffff6007ff 0 [kernel].vsyscall_1
 ffffffffff600800-ffffffffffffffff 0 [kernel].vsyscall_2
Maps in vmlinux with a different name in kallsyms:
 ffffffffff600000-ffffffffff6000ff 0 [kernel].vsyscall_0 in kallsyms as [kernel].0
 ffffffffff600100-ffffffffff6003ff 0 [kernel].vsyscall_fn in kallsyms as:
*ffffffffff600100-ffffffffff60012f 0 [kernel].2
 ffffffffff600400-ffffffffff6007ff 0 [kernel].vsyscall_1 in kallsyms as [kernel].6
 ffffffffff600800-ffffffffffffffff 0 [kernel].vsyscall_2 in kallsyms as [kernel].8
Maps only in kallsyms:
 ffffffffff600130-ffffffffff6003ff 0 [kernel].4
---- end ----
vmlinux symtab matches kallsyms: Ok
[acme@doppio linux-2.6-tip]$

In the above case we only know the name of the non contiguous kernel ranges in
the address space when reading the symbol information from the ELF symtab in
vmlinux.

The /proc/kallsyms file lack this, we only notice they are separate because
there are modules after the kernel and after that more kernel functions, so we
need to have a module rbtree ...
From: Ingo Molnar
Date: Friday, April 30, 2010 - 12:57 am

Pulled, thanks a lot Arnaldo!

	Ingo
--

Previous thread: Re: [PATCH 7/8] padata: Flush the padata queues actively by Steffen Klassert on Friday, April 30, 2010 - 4:24 am. (1 message)

Next thread: [GIT PULL] Two small fixups by Jens Axboe on Thursday, April 29, 2010 - 11:37 am. (1 message)