This patch set enables daemonized perf recording by utilizing overwritable backward ring buffer. With this feature one can put perf background, and dump ring buffer records by a SIGUSR2 when he/she find something unusual. For example, following command record system calls, schedule events and samples on cpu cycles continously:
# perf record -g -e cycles -e raw_syscalls:*/call-graph=no/ \ -e sched:sched_switch/call-graph=no/ \ --switch-output --overwrite -a Then by sending SIGUSR2 to perf when lagging is happen, we get multiple perf.data output, each of them correspond a abnormal event, and the data size is reasonable: # ls -l ./perf.data* -rw------- 1 root root 5122165 May 13 23:51 ./perf.data.2016051323511683 -rw------- 1 root root 5135093 May 13 23:51 ./perf.data.2016051323512107 -rw------- 1 root root 5135213 May 13 23:51 ./perf.data.2016051323512215 -rw------- 1 root root 5135157 May 13 23:51 ./perf.data.2016051323512387 Wang Nan (17): perf tools: Extract __perf_evlist__mmap_read() perf tools: Add evlist channel helpers perf tools: Automatically add new channel according to evlist perf tools: Operate multiple channels perf record: Prevent reading invalid data in record__mmap_read perf tools: Squash overwrite setting into channel perf record: Don't read from and poll overwrite channel perf record: Don't poll on overwrite channel perf tools: Detect avalibility of write_backward perf tools: Enable overwrite settings perf tools: Set write_backward attribut bit for overwrite events perf tools: Record fd into perf_mmap perf tools: Add API to pause a channel perf record: Rename variable to make code clear perf record: Read from backward ring buffer perf record: Toggle overwrite ring buffer for reading perf tools: Don't warn about out of order event if write_backward is used tools/perf/builtin-record.c | 207 +++++++++++++++++++++++-- tools/perf/perf.h | 2 + tools/perf/util/evlist.c | 332 ++++++++++++++++++++++++++++++++++++----- tools/perf/util/evlist.h | 67 ++++++++- tools/perf/util/evsel.c | 17 +++ tools/perf/util/evsel.h | 3 + tools/perf/util/parse-events.c | 20 ++- tools/perf/util/parse-events.h | 2 + tools/perf/util/parse-events.l | 2 + tools/perf/util/record.c | 11 ++ tools/perf/util/session.c | 22 ++- 11 files changed, 625 insertions(+), 60 deletions(-) Cc: Arnaldo Carvalho de Melo <a...@redhat.com> Cc: He Kuang <heku...@huawei.com> Cc: Jiri Olsa <jo...@kernel.org> Cc: Masami Hiramatsu <masami.hiramatsu...@hitachi.com> Cc: Namhyung Kim <namhy...@kernel.org> Cc: Peter Zijlstra <pet...@infradead.org> Cc: Wang Nan <wangn...@huawei.com> Cc: Zefan Li <lize...@huawei.com> Cc: pi3or...@163.com -- 1.8.3.4