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 v1 3/8] perf stat: introduce control descriptors and --ctl-fd[-ack] options
Date: Thu, 2 Apr 2020 16:17:58 +0200 [thread overview]
Message-ID: <20200402141758.GP2518490@krava> (raw)
In-Reply-To: <98dfb3ce-dab9-3747-8748-fbf2777f69ba@linux.intel.com>
On Fri, Mar 27, 2020 at 11:47:40AM +0300, Alexey Budankov wrote:
>
> Introduce control file descriptors and --ctl-fd[-ack] options to pass
> control descriptors from command line. Extend --delay option with -1
> value to start collection in paused mode to be resumed later by resume
> command provided via control file descriptor.
could you please separate those 2 changes? also for record change
thanks,
jirka
>
> Signed-off-by: Alexey Budankov <alexey.budankov@linux.intel.com>
> ---
> tools/perf/builtin-stat.c | 28 ++++++++++++++++++++++++----
> tools/perf/util/evlist.h | 3 +++
> tools/perf/util/stat.h | 4 +++-
> 3 files changed, 30 insertions(+), 5 deletions(-)
>
> diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
> index ec053dc1e35c..0a1b79fd3f48 100644
> --- a/tools/perf/builtin-stat.c
> +++ b/tools/perf/builtin-stat.c
> @@ -187,6 +187,8 @@ static struct perf_stat_config stat_config = {
> .metric_only_len = METRIC_ONLY_LEN,
> .walltime_nsecs_stats = &walltime_nsecs_stats,
> .big_num = true,
> + .ctl_fd = -1,
> + .ctl_fd_ack = -1
> };
>
> static inline void diff_timespec(struct timespec *r, struct timespec *a,
> @@ -373,16 +375,26 @@ static void process_interval(void)
>
> static void enable_counters(void)
> {
> - if (stat_config.initial_delay)
> + if (stat_config.initial_delay < 0) {
> + pr_info(PERF_EVLIST__PAUSED_MSG);
> + return;
> + }
> +
> + if (stat_config.initial_delay > 0) {
> + pr_info(PERF_EVLIST__PAUSED_MSG);
> usleep(stat_config.initial_delay * USEC_PER_MSEC);
> + }
>
> /*
> * We need to enable counters only if:
> * - we don't have tracee (attaching to task or cpu)
> * - we have initial delay configured
> */
> - if (!target__none(&target) || stat_config.initial_delay)
> + if (!target__none(&target) || stat_config.initial_delay) {
> evlist__enable(evsel_list);
> + if (stat_config.initial_delay > 0)
> + pr_info(PERF_EVLIST__RESUMED_MSG);
> + }
> }
>
> static void disable_counters(void)
> @@ -912,8 +924,8 @@ static struct option stat_options[] = {
> "aggregate counts per thread", AGGR_THREAD),
> OPT_SET_UINT(0, "per-node", &stat_config.aggr_mode,
> "aggregate counts per numa node", AGGR_NODE),
> - OPT_UINTEGER('D', "delay", &stat_config.initial_delay,
> - "ms to wait before starting measurement after program start"),
> + OPT_INTEGER('D', "delay", &stat_config.initial_delay,
> + "ms to wait before starting measurement after program start (-1: start paused"),
> OPT_CALLBACK_NOOPT(0, "metric-only", &stat_config.metric_only, NULL,
> "Only print computed metrics. No raw values", enable_metric_only),
> OPT_BOOLEAN(0, "topdown", &topdown_run,
> @@ -933,6 +945,10 @@ static struct option stat_options[] = {
> "Use with 'percore' event qualifier to show the event "
> "counts of one hardware thread by sum up total hardware "
> "threads of same physical core"),
> + OPT_INTEGER(0, "ctl-fd", &stat_config.ctl_fd,
> + "Listen on fd descriptor for command to control measurement ('r': resume, 'p': pause)"),
> + OPT_INTEGER(0, "ctl-fd-ack", &stat_config.ctl_fd_ack,
> + "Send control command completion ('a') to fd ack descriptor"),
> OPT_END()
> };
>
> @@ -2129,6 +2145,8 @@ int cmd_stat(int argc, const char **argv)
> signal(SIGALRM, skip_signal);
> signal(SIGABRT, skip_signal);
>
> + perf_evlist__initialize_ctlfd(evsel_list, stat_config.ctl_fd, stat_config.ctl_fd_ack);
> +
> status = 0;
> for (run_idx = 0; forever || run_idx < stat_config.run_count; run_idx++) {
> if (stat_config.run_count != 1 && verbose > 0)
> @@ -2148,6 +2166,8 @@ int cmd_stat(int argc, const char **argv)
> if (!forever && status != -1 && !interval)
> print_counters(NULL, argc, argv);
>
> + perf_evlist__finalize_ctlfd(evsel_list);
> +
> if (STAT_RECORD) {
> /*
> * We synthesize the kernel mmap record just so that older tools
> diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h
> index a94b2993fafc..c91368483074 100644
> --- a/tools/perf/util/evlist.h
> +++ b/tools/perf/util/evlist.h
> @@ -369,6 +369,9 @@ enum evlist_ctl_cmd {
> CTL_CMD_ACK = 'a'
> };
>
> +#define PERF_EVLIST__RESUMED_MSG "Monitoring resumed\n"
> +#define PERF_EVLIST__PAUSED_MSG "Monitoring paused\n"
> +
> int perf_evlist__initialize_ctlfd(struct evlist *evlist, int ctl_fd, int ctl_fd_ack);
> int perf_evlist__finalize_ctlfd(struct evlist *evlist);
> int perf_evlist__ctlfd_process(struct evlist *evlist, enum evlist_ctl_cmd *cmd);
> diff --git a/tools/perf/util/stat.h b/tools/perf/util/stat.h
> index b4fdfaa7f2c0..0b0fa3a2cde2 100644
> --- a/tools/perf/util/stat.h
> +++ b/tools/perf/util/stat.h
> @@ -113,7 +113,7 @@ struct perf_stat_config {
> FILE *output;
> unsigned int interval;
> unsigned int timeout;
> - unsigned int initial_delay;
> + int initial_delay;
> unsigned int unit_width;
> unsigned int metric_only_len;
> int times;
> @@ -130,6 +130,8 @@ struct perf_stat_config {
> struct perf_cpu_map *cpus_aggr_map;
> u64 *walltime_run;
> struct rblist metric_events;
> + int ctl_fd;
> + int ctl_fd_ack;
> };
>
> void update_stats(struct stats *stats, u64 val);
> --
> 2.24.1
>
>
next prev parent reply other threads:[~2020-04-02 14:18 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-27 8:34 [PATCH v1 0/8] perf: support resume and pause commands in stat and record modes Alexey Budankov
2020-03-27 8:45 ` [PATCH v1 1/8] perf evlist: introduce control file descriptors Alexey Budankov
2020-03-27 8:46 ` [PATCH v1 2/8] perf evlist: implement control command handling functions Alexey Budankov
2020-04-02 14:17 ` Jiri Olsa
2020-04-02 15:20 ` Alexey Budankov
2020-03-27 8:47 ` [PATCH v1 3/8] perf stat: introduce control descriptors and --ctl-fd[-ack] options Alexey Budankov
2020-04-02 14:17 ` Jiri Olsa [this message]
2020-04-02 15:05 ` Alexey Budankov
2020-03-27 8:48 ` [PATCH v1 4/8] perf stat: implement resume and pause control commands handling Alexey Budankov
2020-04-02 14:17 ` Jiri Olsa
2020-04-02 15:06 ` Alexey Budankov
2020-03-27 8:49 ` [PATCH v1 5/8] perf docs: extend stat mode docs with info on --ctl-fd[-ack] options Alexey Budankov
2020-03-27 8:49 ` [PATCH v1 6/8] perf record: introduce control descriptors and " Alexey Budankov
2020-03-27 8:50 ` [PATCH v1 7/8] perf record: implement resume and pause control commands handling Alexey Budankov
2020-03-27 8:51 ` [PATCH v1 8/8] perf docs: extend record mode docs with info on --ctl-fd[-ack] options Alexey Budankov
2020-04-01 14:01 ` [PATCH v1 0/8] perf: support resume and pause commands in stat and record modes Jiri Olsa
2020-04-01 16:07 ` 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=20200402141758.GP2518490@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.