Skip to content

Commit

Permalink
perf build-id: Move the routine to find DSOs with hits to the lib
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Arnaldo Carvalho de Melo authored and Ingo Molnar committed Feb 4, 2010
1 parent 8ad94c6 commit 7b2567c
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 29 deletions.
2 changes: 2 additions & 0 deletions tools/perf/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -357,6 +357,7 @@ LIB_H += util/include/asm/uaccess.h
LIB_H += perf.h
LIB_H += util/cache.h
LIB_H += util/callchain.h
LIB_H += util/build-id.h
LIB_H += util/debug.h
LIB_H += util/debugfs.h
LIB_H += util/event.h
Expand Down Expand Up @@ -390,6 +391,7 @@ LIB_H += util/probe-event.h

LIB_OBJS += util/abspath.o
LIB_OBJS += util/alias.o
LIB_OBJS += util/build-id.o
LIB_OBJS += util/config.o
LIB_OBJS += util/ctype.o
LIB_OBJS += util/debugfs.o
Expand Down
31 changes: 2 additions & 29 deletions tools/perf/builtin-buildid-list.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
*/
#include "builtin.h"
#include "perf.h"
#include "util/build-id.h"
#include "util/cache.h"
#include "util/debug.h"
#include "util/parse-options.h"
Expand All @@ -33,34 +34,6 @@ static const struct option options[] = {
OPT_END()
};

static int build_id_list__process_event(event_t *event,
struct perf_session *session)
{
struct addr_location al;
u8 cpumode = event->header.misc & PERF_RECORD_MISC_CPUMODE_MASK;
struct thread *thread = perf_session__findnew(session, event->ip.pid);

if (thread == NULL) {
pr_err("problem processing %d event, skipping it.\n",
event->header.type);
return -1;
}

thread__find_addr_map(thread, session, cpumode, MAP__FUNCTION,
event->ip.ip, &al);

if (al.map != NULL)
al.map->dso->hit = 1;

return 0;
}

static struct perf_event_ops build_id_list__event_ops = {
.sample = build_id_list__process_event,
.mmap = event__process_mmap,
.fork = event__process_task,
};

static int __cmd_buildid_list(void)
{
int err = -1;
Expand All @@ -71,7 +44,7 @@ static int __cmd_buildid_list(void)
return -1;

if (with_hits)
perf_session__process_events(session, &build_id_list__event_ops);
perf_session__process_events(session, &build_id__mark_dso_hit_ops);

dsos__fprintf_buildid(stdout, with_hits);

Expand Down
39 changes: 39 additions & 0 deletions tools/perf/util/build-id.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
/*
* build-id.c
*
* build-id support
*
* Copyright (C) 2009, 2010 Red Hat Inc.
* Copyright (C) 2009, 2010 Arnaldo Carvalho de Melo <acme@redhat.com>
*/
#include "build-id.h"
#include "event.h"
#include "symbol.h"
#include <linux/kernel.h>

static int build_id__mark_dso_hit(event_t *event, struct perf_session *session)
{
struct addr_location al;
u8 cpumode = event->header.misc & PERF_RECORD_MISC_CPUMODE_MASK;
struct thread *thread = perf_session__findnew(session, event->ip.pid);

if (thread == NULL) {
pr_err("problem processing %d event, skipping it.\n",
event->header.type);
return -1;
}

thread__find_addr_map(thread, session, cpumode, MAP__FUNCTION,
event->ip.ip, &al);

if (al.map != NULL)
al.map->dso->hit = 1;

return 0;
}

struct perf_event_ops build_id__mark_dso_hit_ops = {
.sample = build_id__mark_dso_hit,
.mmap = event__process_mmap,
.fork = event__process_task,
};
8 changes: 8 additions & 0 deletions tools/perf/util/build-id.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#ifndef PERF_BUILD_ID_H_
#define PERF_BUILD_ID_H_ 1

#include "session.h"

extern struct perf_event_ops build_id__mark_dso_hit_ops;

#endif

0 comments on commit 7b2567c

Please sign in to comment.