From: Jiri Olsa <jolsa@redhat.com>
To: Alexey Budankov <alexey.budankov@linux.intel.com>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>,
Namhyung Kim <namhyung@kernel.org>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>, Andi Kleen <ak@linux.intel.com>,
linux-kernel <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v3 9/9] perf record: introduce --ctl-fd[-ack] options
Date: Wed, 20 May 2020 14:38:42 +0200 [thread overview]
Message-ID: <20200520123842.GH157452@krava> (raw)
In-Reply-To: <8df14d46-42c6-2f14-8842-5d0f40a78fbb@linux.intel.com>
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.budankov@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
jirka
> +
> if (opts->initial_delay) {
> pr_info(EVLIST_DISABLED_MSG);
> if (opts->initial_delay > 0) {
> @@ -1859,6 +1861,7 @@ static int __cmd_record(struct record *rec, int argc, const char **argv)
> record__synthesize_workload(rec, true);
>
> out_child:
> + evlist__finalize_ctlfd(rec->evlist);
> record__mmap_read_all(rec, true);
> record__aio_mmap_read_sync(rec);
>
> @@ -2340,6 +2343,8 @@ static struct record record = {
> },
> .mmap_flush = MMAP_FLUSH_DEFAULT,
> .nr_threads_synthesize = 1,
> + .ctl_fd = -1,
> + .ctl_fd_ack = -1,
> },
> .tool = {
> .sample = process_sample_event,
> @@ -2535,6 +2540,10 @@ static struct option __record_options[] = {
> OPT_UINTEGER(0, "num-thread-synthesize",
> &record.opts.nr_threads_synthesize,
> "number of threads to run for event synthesis"),
> + OPT_INTEGER(0, "ctl-fd", &record.opts.ctl_fd,
> + "Listen on fd descriptor for command to control measurement ('enable': enable events, 'disable': disable events)"),
> + OPT_INTEGER(0, "ctl-fd-ack", &record.opts.ctl_fd_ack,
> + "Send control command completion ('ack') to fd ack descriptor"),
> OPT_END()
> };
>
> diff --git a/tools/perf/util/record.h b/tools/perf/util/record.h
> index 96a73bbd8cd4..da18aeca3623 100644
> --- a/tools/perf/util/record.h
> +++ b/tools/perf/util/record.h
> @@ -69,6 +69,8 @@ struct record_opts {
> int mmap_flush;
> unsigned int comp_level;
> unsigned int nr_threads_synthesize;
> + int ctl_fd;
> + int ctl_fd_ack;
> };
>
> extern const char * const *record_usage;
> --
> 2.24.1
>
>
next prev parent reply other threads:[~2020-05-20 12:38 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-13 7:53 [PATCH v3 0/9] perf: support enable and disable commands in stat and record modes Alexey Budankov
2020-05-13 7:59 ` [PATCH v3 1/9] perf evlist: introduce control file descriptors Alexey Budankov
2020-05-20 12:38 ` Jiri Olsa
2020-05-20 14:46 ` Alexey Budankov
2020-05-13 8:00 ` [PATCH v3 2/9] perf evlist: implement control command handling functions Alexey Budankov
2020-05-20 12:38 ` Jiri Olsa
2020-05-20 14:56 ` Alexey Budankov
2020-05-13 8:00 ` [PATCH v3 3/9] perf stat: factor out event handling loop into a function Alexey Budankov
2020-05-20 12:38 ` Jiri Olsa
2020-05-20 15:17 ` Alexey Budankov
2020-05-21 11:48 ` Jiri Olsa
2020-05-13 8:01 ` [PATCH v3 4/9] perf stat: extend -D,--delay option with -1 value Alexey Budankov
2020-05-13 8:02 ` [PATCH v3 5/9] perf stat: implement control commands handling Alexey Budankov
2020-05-13 8:03 ` [PATCH v3 6/9] perf stat: introduce --ctl-fd[-ack] options Alexey Budankov
2020-05-20 12:38 ` Jiri Olsa
2020-05-20 15:05 ` Alexey Budankov
2020-05-13 8:03 ` [PATCH v3 7/9] perf record: extend -D,--delay option with -1 value Alexey Budankov
2020-05-13 8:04 ` [PATCH v3 8/9] perf record: implement control commands handling Alexey Budankov
2020-05-20 12:38 ` Jiri Olsa
2020-05-20 18:06 ` Alexey Budankov
2020-05-13 8:05 ` [PATCH v3 9/9] perf record: introduce --ctl-fd[-ack] options Alexey Budankov
2020-05-20 12:38 ` Jiri Olsa [this message]
2020-05-20 15:21 ` Alexey Budankov
2020-05-18 8:08 ` [PATCH v3 0/9] perf: support enable and disable commands in stat and record modes Alexey Budankov
2020-05-20 10:55 ` Jiri Olsa
-- strict thread matches above, loose matches on Subject: below --
2020-05-08 10:43 Alexey Budankov
2020-05-08 10:54 ` [PATCH v3 9/9] perf record: introduce --ctl-fd[-ack] options Alexey Budankov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200520123842.GH157452@krava \
--to=jolsa@redhat.com \
--cc=acme@redhat.com \
--cc=ak@linux.intel.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=alexey.budankov@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.