aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWang Nan <wangnan0@huawei.com>2016-04-20 14:59:52 -0400
committerArnaldo Carvalho de Melo <acme@redhat.com>2016-04-28 08:58:59 -0400
commit0c1d46a8796e8309f1ca693e5cad6f318e4b8159 (patch)
tree498eda9d8a2a2164bcfe409813fe44df2501d1a3
parenteca857ab381858450ec2f91f5aaae7f2f7a7a180 (diff)
perf record: Disable buildid cache options by default in switch output mode
The cost of buildid cache processing is high: reading all events in output perf.data, opening each elf file to read buildids then copying them into ~/.debug directory. In switch output mode, these heavy works block perf from receiving perf events for too long. Enable no-buildid and no-buildid-cache by default if --switch-output is provided. Still allow user use --no-no-buildid to explicitly enable buildid in this case. Signed-off-by: Wang Nan <wangnan0@huawei.com> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Masami Hiramatsu <mhiramat@kernel.org> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Zefan Li <lizefan@huawei.com> Cc: pi3orama@163.com Link: http://lkml.kernel.org/r/1461178794-40467-6-git-send-email-wangnan0@huawei.com Signed-off-by: He Kuang <hekuang@huawei.com> [ Updated man page ] Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
-rw-r--r--tools/perf/Documentation/perf-record.txt2
-rw-r--r--tools/perf/builtin-record.c30
2 files changed, 30 insertions, 2 deletions
diff --git a/tools/perf/Documentation/perf-record.txt b/tools/perf/Documentation/perf-record.txt
index 79a8a14f37b1..8dbee832abd9 100644
--- a/tools/perf/Documentation/perf-record.txt
+++ b/tools/perf/Documentation/perf-record.txt
@@ -358,7 +358,7 @@ A possible use case is to, given an external event, slice the perf.data file
358that gets then processed, possibly via a perf script, to decide if that 358that gets then processed, possibly via a perf script, to decide if that
359particular perf.data snapshot should be kept or not. 359particular perf.data snapshot should be kept or not.
360 360
361Implies --timestamp-filename. 361Implies --timestamp-filename, --no-buildid and --no-buildid-cache.
362 362
363SEE ALSO 363SEE ALSO
364-------- 364--------
diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
index 80b805b7f5c7..178b49ecd05f 100644
--- a/tools/perf/builtin-record.c
+++ b/tools/perf/builtin-record.c
@@ -1387,8 +1387,36 @@ int cmd_record(int argc, const char **argv, const char *prefix __maybe_unused)
1387"If some relocation was applied (e.g. kexec) symbols may be misresolved\n" 1387"If some relocation was applied (e.g. kexec) symbols may be misresolved\n"
1388"even with a suitable vmlinux or kallsyms file.\n\n"); 1388"even with a suitable vmlinux or kallsyms file.\n\n");
1389 1389
1390 if (rec->no_buildid_cache || rec->no_buildid) 1390 if (rec->no_buildid_cache || rec->no_buildid) {
1391 disable_buildid_cache(); 1391 disable_buildid_cache();
1392 } else if (rec->switch_output) {
1393 /*
1394 * In 'perf record --switch-output', disable buildid
1395 * generation by default to reduce data file switching
1396 * overhead. Still generate buildid if they are required
1397 * explicitly using
1398 *
1399 * perf record --signal-trigger --no-no-buildid \
1400 * --no-no-buildid-cache
1401 *
1402 * Following code equals to:
1403 *
1404 * if ((rec->no_buildid || !rec->no_buildid_set) &&
1405 * (rec->no_buildid_cache || !rec->no_buildid_cache_set))
1406 * disable_buildid_cache();
1407 */
1408 bool disable = true;
1409
1410 if (rec->no_buildid_set && !rec->no_buildid)
1411 disable = false;
1412 if (rec->no_buildid_cache_set && !rec->no_buildid_cache)
1413 disable = false;
1414 if (disable) {
1415 rec->no_buildid = true;
1416 rec->no_buildid_cache = true;
1417 disable_buildid_cache();
1418 }
1419 }
1392 1420
1393 if (rec->evlist->nr_entries == 0 && 1421 if (rec->evlist->nr_entries == 0 &&
1394 perf_evlist__add_default(rec->evlist) < 0) { 1422 perf_evlist__add_default(rec->evlist) < 0) {