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>
This commit is contained in:
parent
eca857ab38
commit
0c1d46a879
|
@ -358,7 +358,7 @@ A possible use case is to, given an external event, slice the perf.data file
|
||||||
that gets then processed, possibly via a perf script, to decide if that
|
that gets then processed, possibly via a perf script, to decide if that
|
||||||
particular perf.data snapshot should be kept or not.
|
particular perf.data snapshot should be kept or not.
|
||||||
|
|
||||||
Implies --timestamp-filename.
|
Implies --timestamp-filename, --no-buildid and --no-buildid-cache.
|
||||||
|
|
||||||
SEE ALSO
|
SEE ALSO
|
||||||
--------
|
--------
|
||||||
|
|
|
@ -1387,8 +1387,36 @@ int cmd_record(int argc, const char **argv, const char *prefix __maybe_unused)
|
||||||
"If some relocation was applied (e.g. kexec) symbols may be misresolved\n"
|
"If some relocation was applied (e.g. kexec) symbols may be misresolved\n"
|
||||||
"even with a suitable vmlinux or kallsyms file.\n\n");
|
"even with a suitable vmlinux or kallsyms file.\n\n");
|
||||||
|
|
||||||
if (rec->no_buildid_cache || rec->no_buildid)
|
if (rec->no_buildid_cache || rec->no_buildid) {
|
||||||
disable_buildid_cache();
|
disable_buildid_cache();
|
||||||
|
} else if (rec->switch_output) {
|
||||||
|
/*
|
||||||
|
* In 'perf record --switch-output', disable buildid
|
||||||
|
* generation by default to reduce data file switching
|
||||||
|
* overhead. Still generate buildid if they are required
|
||||||
|
* explicitly using
|
||||||
|
*
|
||||||
|
* perf record --signal-trigger --no-no-buildid \
|
||||||
|
* --no-no-buildid-cache
|
||||||
|
*
|
||||||
|
* Following code equals to:
|
||||||
|
*
|
||||||
|
* if ((rec->no_buildid || !rec->no_buildid_set) &&
|
||||||
|
* (rec->no_buildid_cache || !rec->no_buildid_cache_set))
|
||||||
|
* disable_buildid_cache();
|
||||||
|
*/
|
||||||
|
bool disable = true;
|
||||||
|
|
||||||
|
if (rec->no_buildid_set && !rec->no_buildid)
|
||||||
|
disable = false;
|
||||||
|
if (rec->no_buildid_cache_set && !rec->no_buildid_cache)
|
||||||
|
disable = false;
|
||||||
|
if (disable) {
|
||||||
|
rec->no_buildid = true;
|
||||||
|
rec->no_buildid_cache = true;
|
||||||
|
disable_buildid_cache();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (rec->evlist->nr_entries == 0 &&
|
if (rec->evlist->nr_entries == 0 &&
|
||||||
perf_evlist__add_default(rec->evlist) < 0) {
|
perf_evlist__add_default(rec->evlist) < 0) {
|
||||||
|
|
Loading…
Reference in New Issue