Commit 7b2567c1f57c059de29d3f2ca03aca84473865c8

Authored by Arnaldo Carvalho de Melo
Committed by Ingo Molnar
1 parent 8ad94c6052

perf build-id: Move the routine to find DSOs with hits to the lib

Because 'perf record' will have to find the build-ids in after
we stop recording, so as to reduce even more the impact in the
workload while we do the measurement.

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: <1265223128-11786-5-git-send-email-acme@infradead.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>

Showing 4 changed files with 51 additions and 29 deletions Side-by-side Diff

... ... @@ -357,6 +357,7 @@
357 357 LIB_H += perf.h
358 358 LIB_H += util/cache.h
359 359 LIB_H += util/callchain.h
  360 +LIB_H += util/build-id.h
360 361 LIB_H += util/debug.h
361 362 LIB_H += util/debugfs.h
362 363 LIB_H += util/event.h
... ... @@ -390,6 +391,7 @@
390 391  
391 392 LIB_OBJS += util/abspath.o
392 393 LIB_OBJS += util/alias.o
  394 +LIB_OBJS += util/build-id.o
393 395 LIB_OBJS += util/config.o
394 396 LIB_OBJS += util/ctype.o
395 397 LIB_OBJS += util/debugfs.o
tools/perf/builtin-buildid-list.c
... ... @@ -8,6 +8,7 @@
8 8 */
9 9 #include "builtin.h"
10 10 #include "perf.h"
  11 +#include "util/build-id.h"
11 12 #include "util/cache.h"
12 13 #include "util/debug.h"
13 14 #include "util/parse-options.h"
... ... @@ -33,34 +34,6 @@
33 34 OPT_END()
34 35 };
35 36  
36   -static int build_id_list__process_event(event_t *event,
37   - struct perf_session *session)
38   -{
39   - struct addr_location al;
40   - u8 cpumode = event->header.misc & PERF_RECORD_MISC_CPUMODE_MASK;
41   - struct thread *thread = perf_session__findnew(session, event->ip.pid);
42   -
43   - if (thread == NULL) {
44   - pr_err("problem processing %d event, skipping it.\n",
45   - event->header.type);
46   - return -1;
47   - }
48   -
49   - thread__find_addr_map(thread, session, cpumode, MAP__FUNCTION,
50   - event->ip.ip, &al);
51   -
52   - if (al.map != NULL)
53   - al.map->dso->hit = 1;
54   -
55   - return 0;
56   -}
57   -
58   -static struct perf_event_ops build_id_list__event_ops = {
59   - .sample = build_id_list__process_event,
60   - .mmap = event__process_mmap,
61   - .fork = event__process_task,
62   -};
63   -
64 37 static int __cmd_buildid_list(void)
65 38 {
66 39 int err = -1;
... ... @@ -71,7 +44,7 @@
71 44 return -1;
72 45  
73 46 if (with_hits)
74   - perf_session__process_events(session, &build_id_list__event_ops);
  47 + perf_session__process_events(session, &build_id__mark_dso_hit_ops);
75 48  
76 49 dsos__fprintf_buildid(stdout, with_hits);
77 50  
tools/perf/util/build-id.c
  1 +/*
  2 + * build-id.c
  3 + *
  4 + * build-id support
  5 + *
  6 + * Copyright (C) 2009, 2010 Red Hat Inc.
  7 + * Copyright (C) 2009, 2010 Arnaldo Carvalho de Melo <acme@redhat.com>
  8 + */
  9 +#include "build-id.h"
  10 +#include "event.h"
  11 +#include "symbol.h"
  12 +#include <linux/kernel.h>
  13 +
  14 +static int build_id__mark_dso_hit(event_t *event, struct perf_session *session)
  15 +{
  16 + struct addr_location al;
  17 + u8 cpumode = event->header.misc & PERF_RECORD_MISC_CPUMODE_MASK;
  18 + struct thread *thread = perf_session__findnew(session, event->ip.pid);
  19 +
  20 + if (thread == NULL) {
  21 + pr_err("problem processing %d event, skipping it.\n",
  22 + event->header.type);
  23 + return -1;
  24 + }
  25 +
  26 + thread__find_addr_map(thread, session, cpumode, MAP__FUNCTION,
  27 + event->ip.ip, &al);
  28 +
  29 + if (al.map != NULL)
  30 + al.map->dso->hit = 1;
  31 +
  32 + return 0;
  33 +}
  34 +
  35 +struct perf_event_ops build_id__mark_dso_hit_ops = {
  36 + .sample = build_id__mark_dso_hit,
  37 + .mmap = event__process_mmap,
  38 + .fork = event__process_task,
  39 +};
tools/perf/util/build-id.h
  1 +#ifndef PERF_BUILD_ID_H_
  2 +#define PERF_BUILD_ID_H_ 1
  3 +
  4 +#include "session.h"
  5 +
  6 +extern struct perf_event_ops build_id__mark_dso_hit_ops;
  7 +
  8 +#endif