On 20.05.2020 15:38, Jiri Olsa wrote: > On Wed, May 13, 2020 at 11:05:08AM +0300, Alexey Budankov wrote: >> >> Introduce --ctl-fd[-ack] options to pass open file descriptors numbers >> from command line. Extend perf-record.txt file with --ctl-fd[-ack] >> options description. Document possible usage model introduced by >> --ctl-fd[-ack] options by providing example bash shell script. >> >> Signed-off-by: Alexey Budankov <alexey.budan...@linux.intel.com> >> --- >> tools/perf/Documentation/perf-record.txt | 39 ++++++++++++++++++++++++ >> tools/perf/builtin-record.c | 9 ++++++ >> tools/perf/util/record.h | 2 ++ >> 3 files changed, 50 insertions(+) >> >> diff --git a/tools/perf/Documentation/perf-record.txt >> b/tools/perf/Documentation/perf-record.txt >> index c2c4ce7ccee2..5c012cfe68a4 100644 >> --- a/tools/perf/Documentation/perf-record.txt >> +++ b/tools/perf/Documentation/perf-record.txt >> @@ -614,6 +614,45 @@ appended unit character - B/K/M/G >> The number of threads to run when synthesizing events for existing >> processes. >> By default, the number of threads equals 1. >> >> +--ctl-fd:: >> +--ctl-fd-ack:: >> +Listen on ctl-fd descriptor for command to control measurement ('enable': >> enable events, >> +'disable': disable events. Optionally send control command completion >> ('ack') to fd-ack >> +descriptor to synchronize with the controlling process. Example of bash >> shell script >> +to enable and disable events during measurements: >> + >> +#!/bin/bash >> + >> +ctl_dir=/tmp/ >> + >> +ctl_fifo=${ctl_dir}perf_ctl.fifo >> +test -p ${ctl_fifo} && unlink ${ctl_fifo} >> +mkfifo ${ctl_fifo} >> +exec {ctl_fd}<>${ctl_fifo} >> + >> +ctl_ack_fifo=${ctl_dir}perf_ctl_ack.fifo >> +test -p ${ctl_ack_fifo} && unlink ${ctl_ack_fifo} >> +mkfifo ${ctl_ack_fifo} >> +exec {ctl_fd_ack}<>${ctl_ack_fifo} >> + >> +perf record -D -1 -e cpu-cycles -a \ >> + --ctl-fd ${ctl_fd} --ctl-fd-ack ${ctl_fd_ack} \ >> + -- sleep 30 & >> +perf_pid=$! >> + >> +sleep 5 && echo 'enable' >&${ctl_fd} && read -u ${ctl_fd_ack} e1 && echo >> "enabled(${e1})" >> +sleep 10 && echo 'disable' >&${ctl_fd} && read -u ${ctl_fd_ack} d1 && echo >> "disabled(${d1})" >> + >> +exec {ctl_fd_ack}>&- >> +unlink ${ctl_ack_fifo} >> + >> +exec {ctl_fd}>&- >> +unlink ${ctl_fifo} >> + >> +wait -n ${perf_pid} >> +exit $? >> + >> + >> SEE ALSO >> -------- >> linkperf:perf-stat[1], linkperf:perf-list[1], linkperf:perf-intel-pt[1] >> diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c >> index 72f388623364..218cfaafaf10 100644 >> --- a/tools/perf/builtin-record.c >> +++ b/tools/perf/builtin-record.c >> @@ -1713,6 +1713,8 @@ static int __cmd_record(struct record *rec, int argc, >> const char **argv) >> perf_evlist__start_workload(rec->evlist); >> } >> >> + evlist__initialize_ctlfd(rec->evlist, opts->ctl_fd, opts->ctl_fd_ack); > > please check return value in here
Accepted in v4. ~Alexey