Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Wang Nan and committed by
Arnaldo Carvalho de Melo
0c1d46a8 eca857ab

+30 -2
+1 -1
tools/perf/Documentation/perf-record.txt
··· 358 358 that gets then processed, possibly via a perf script, to decide if that 359 359 particular perf.data snapshot should be kept or not. 360 360 361 - Implies --timestamp-filename. 361 + Implies --timestamp-filename, --no-buildid and --no-buildid-cache. 362 362 363 363 SEE ALSO 364 364 --------
+29 -1
tools/perf/builtin-record.c
··· 1387 1387 "If some relocation was applied (e.g. kexec) symbols may be misresolved\n" 1388 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 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 1421 if (rec->evlist->nr_entries == 0 && 1394 1422 perf_evlist__add_default(rec->evlist) < 0) {