提交 a1ac1d3c 编写于 作者: S Stephane Eranian 提交者: Arnaldo Carvalho de Melo

perf record: Add option to avoid updating buildid cache

There are situations where there is enough information in the perf.data
to process the samples. Updating the buildid cache may add unecessary
overhead in terms of disk space and time (copying large elf images).

A persistent option to do this already exists via the perfconfig file,
simply do:

[buildid]
dir = /dev/null

This patch provides a way to suppress builid cache updates on a per-run
basis.  It addds a new option, -N, to perf record. Buildids are still
generated in the perf.data file.

Cc: David S. Miller <davem@davemloft.net>
Cc: Frédéric Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
LKML-Reference: <4c19ef89.93ecd80a.40dc.fffff8e9@mx.google.com>
Signed-off-by: NStephane Eranian <eranian@google.com>
Signed-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
上级 70c3856b
......@@ -110,6 +110,12 @@ comma-sperated list with no space: 0,1. Ranges of CPUs are specified with -: 0-2
In per-thread mode with inheritance mode on (default), samples are captured only when
the thread executes on the designated CPUs. Default is to monitor all CPUs.
-N::
--no-buildid-cache::
Do not update the builid cache. This saves some overhead in situations
where the information in the perf.data file (which includes buildids)
is sufficient.
SEE ALSO
--------
linkperf:perf-stat[1], linkperf:perf-list[1]
......@@ -60,6 +60,7 @@ static bool call_graph = false;
static bool inherit_stat = false;
static bool no_samples = false;
static bool sample_address = false;
static bool no_buildid = false;
static long samples = 0;
static u64 bytes_written = 0;
......@@ -825,6 +826,8 @@ static const struct option options[] = {
"Sample addresses"),
OPT_BOOLEAN('n', "no-samples", &no_samples,
"don't sample"),
OPT_BOOLEAN('N', "no-buildid-cache", &no_buildid,
"do not update the buildid cache"),
OPT_END()
};
......@@ -849,6 +852,8 @@ int cmd_record(int argc, const char **argv, const char *prefix __used)
}
symbol__init();
if (no_buildid)
disable_buildid_cache();
if (!nr_counters) {
nr_counters = 1;
......
......@@ -16,6 +16,8 @@
#include "symbol.h"
#include "debug.h"
static bool no_buildid_cache = false;
/*
* Create new perf.data header attribute:
*/
......@@ -470,7 +472,8 @@ static int perf_header__adds_write(struct perf_header *self, int fd)
}
buildid_sec->size = lseek(fd, 0, SEEK_CUR) -
buildid_sec->offset;
perf_session__cache_build_ids(session);
if (!no_buildid_cache)
perf_session__cache_build_ids(session);
}
lseek(fd, sec_start, SEEK_SET);
......@@ -1189,3 +1192,8 @@ int event__process_build_id(event_t *self,
session);
return 0;
}
void disable_buildid_cache(void)
{
no_buildid_cache = true;
}
......@@ -154,6 +154,7 @@ extern void set_die_routine(void (*routine)(const char *err, va_list params) NOR
extern int prefixcmp(const char *str, const char *prefix);
extern void set_buildid_dir(void);
extern void disable_buildid_cache(void);
static inline const char *skip_prefix(const char *str, const char *prefix)
{
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册