perf record: Add option to avoid updating buildid cache
authorStephane Eranian <eranian@google.com>
Thu, 17 Jun 2010 09:39:01 +0000 (11:39 +0200)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Thu, 17 Jun 2010 13:20:44 +0000 (10:20 -0300)
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: Stephane Eranian <eranian@google.com>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/Documentation/perf-record.txt
tools/perf/builtin-record.c
tools/perf/util/header.c
tools/perf/util/util.h

index 25576b477c83289cddcd65e9dc554a2b6e387220..3ee27dccfde97d6c58f562bd890a6df9c6026d25 100644 (file)
@@ -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]
index 5efc3fc68a368a273ac4fb16c0a1d289883cc316..86b1c3b6264e71790b4113a1a50a1654abcdbcfd 100644 (file)
@@ -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;
index 4a6a4b3a4ab7d1357362a041ea2d4d8eac224d0f..d7e67b167ea338a28fed519260f1069dd8e92cf9 100644 (file)
@@ -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;
+}
index de61441b6dd7d6fe3ccda56b4f31d04cdda0a987..f380fed74359034a843756256d6e7a79b0ff22b5 100644 (file)
@@ -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)
 {