From: kan.liang@intel.com
To: acme@kernel.org
Cc: a.p.zijlstra@chello.nl, mingo@redhat.com, jolsa@kernel.org,
namhyung@kernel.org, ak@linux.intel.com, eranian@google.com,
linux-kernel@vger.kernel.org, Kan Liang <kan.liang@intel.com>
Subject: [PATCH RFC 08/10] perf,tools: option to set stat read interval
Date: Tue, 18 Aug 2015 05:25:44 -0400 [thread overview]
Message-ID: <1439889946-28986-9-git-send-email-kan.liang@intel.com> (raw)
In-Reply-To: <1439889946-28986-1-git-send-email-kan.liang@intel.com>
From: Kan Liang <kan.liang@intel.com>
Add a timer to read stat event regularly. Option --stat-read-interval
can be used to set the interval.
Only read stat event at the beginning and the end of the test is not
enough. Sometimes, we need fine granularity to do sophisticated
analysis. For example, 10-20ms is required to do sophisticated bandwidth
analysis.
Signed-off-by: Kan Liang <kan.liang@intel.com>
---
tools/perf/Documentation/perf-record.txt | 7 +++++++
tools/perf/builtin-record.c | 31 +++++++++++++++++++++++++++++++
2 files changed, 38 insertions(+)
diff --git a/tools/perf/Documentation/perf-record.txt b/tools/perf/Documentation/perf-record.txt
index 347a273..00dc000 100644
--- a/tools/perf/Documentation/perf-record.txt
+++ b/tools/perf/Documentation/perf-record.txt
@@ -304,6 +304,13 @@ This option sets the time out limit. The default value is 500 ms.
Record context switch events i.e. events of type PERF_RECORD_SWITCH or
PERF_RECORD_SWITCH_CPU_WIDE.
+--stat-read-interval::
+Sets the interval to do stat read regularly. This option is valid only with
+stat read event. This option is disabled by default. It means that counter
+only be read at the beginning and end of the test.
+But sometimes, we need fine granularity to do sophisticated analysis.
+For example, 10-20ms is required to do sophisticated bandwidth analysis.
+
SEE ALSO
--------
linkperf:perf-stat[1], linkperf:perf-list[1]
diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
index 0e5e4c0..ebf37e3 100644
--- a/tools/perf/builtin-record.c
+++ b/tools/perf/builtin-record.c
@@ -572,6 +572,14 @@ static void workload_exec_failed_signal(int signo __maybe_unused,
static void snapshot_sig_handler(int sig);
+static unsigned int interval;
+struct record *g_rec;
+
+static void perf_read_alarm(int sig __maybe_unused)
+{
+ perf_read_counter(g_rec);
+}
+
static int __cmd_record(struct record *rec, int argc, const char **argv)
{
int err;
@@ -584,6 +592,9 @@ static int __cmd_record(struct record *rec, int argc, const char **argv)
struct perf_data_file *file = &rec->file;
struct perf_session *session;
bool disabled = false, draining = false;
+ static timer_t timerid;
+ struct itimerspec timeout;
+ struct sigevent sigevent;
int fd;
rec->progname = argv[0];
@@ -597,6 +608,19 @@ static int __cmd_record(struct record *rec, int argc, const char **argv)
else
signal(SIGUSR2, SIG_IGN);
+ if (interval) {
+ signal(SIGALRM, perf_read_alarm);
+ g_rec = rec;
+
+ /* Create a timer. */
+ sigevent.sigev_notify = SIGEV_SIGNAL;
+ sigevent.sigev_signo = SIGALRM;
+ timer_create(CLOCK_REALTIME, &sigevent, &timerid);
+ memset(&timeout, 0, sizeof(timeout));
+ timeout.it_value.tv_nsec = interval * 1000000ULL;
+ timeout.it_interval.tv_nsec = interval * 1000000ULL;
+ }
+
session = perf_session__new(file, false, tool);
if (session == NULL) {
pr_err("Perf session creation failed.\n");
@@ -737,6 +761,9 @@ static int __cmd_record(struct record *rec, int argc, const char **argv)
}
perf_read_counter(rec);
+ if (interval)
+ timer_settime(timerid, 0, &timeout, NULL);
+
auxtrace_snapshot_enabled = 1;
for (;;) {
int hits = rec->samples;
@@ -781,6 +808,8 @@ static int __cmd_record(struct record *rec, int argc, const char **argv)
*/
if (done && !disabled && !target__none(&opts->target)) {
auxtrace_snapshot_enabled = 0;
+ if (interval)
+ timer_delete(timerid);
perf_read_counter(rec);
perf_evlist__disable(rec->evlist);
disabled = true;
@@ -1187,6 +1216,8 @@ struct option __record_options[] = {
"per thread proc mmap processing timeout in ms"),
OPT_BOOLEAN(0, "switch-events", &record.opts.record_switch_events,
"Record context switch events"),
+ OPT_UINTEGER(0, "stat-read-interval", &interval,
+ "Stat read counter at regular interval in ms (>= 10)"),
OPT_END()
};
--
1.8.3.1
next prev parent reply other threads:[~2015-08-18 16:42 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-18 9:25 [PATCH RFC 00/10] stat read during perf sampling kan.liang
2015-08-18 9:25 ` [PATCH RFC 01/10] perf,tools: open event on evsel cpus and threads kan.liang
2015-08-20 8:57 ` Jiri Olsa
2015-08-20 17:24 ` Liang, Kan
2015-08-21 7:43 ` Jiri Olsa
2015-08-21 13:24 ` Liang, Kan
2015-08-18 9:25 ` [PATCH RFC 02/10] perf,tools: Support new sort type --socket kan.liang
2015-08-20 9:09 ` Jiri Olsa
2015-08-21 20:25 ` Liang, Kan
2015-08-23 22:00 ` Jiri Olsa
2015-08-24 14:22 ` Liang, Kan
2015-08-24 14:27 ` Jiri Olsa
2015-08-24 16:47 ` Liang, Kan
2015-08-24 19:30 ` Jiri Olsa
2015-08-27 18:24 ` Jiri Olsa
2015-08-27 18:29 ` Liang, Kan
2015-08-18 9:25 ` [PATCH RFC 03/10] perf,tools: support option --socket kan.liang
2015-08-18 17:36 ` Stephane Eranian
2015-08-20 9:30 ` Jiri Olsa
2015-08-18 9:25 ` [PATCH RFC 04/10] perf,tools: Add 'N' event/group modifier kan.liang
2015-08-18 9:25 ` [PATCH RFC 05/10] perf,tools: Enable statistic read for perf record kan.liang
2015-08-20 9:39 ` Jiri Olsa
2015-08-20 9:41 ` Jiri Olsa
2015-08-18 9:25 ` [PATCH RFC 06/10] perf,tools: New RECORD type PERF_RECORD_STAT_READ kan.liang
2015-08-20 9:49 ` Jiri Olsa
2015-08-18 9:25 ` [PATCH RFC 07/10] perf,tools: record counter statistics during sampling kan.liang
2015-08-18 9:25 ` kan.liang [this message]
2015-08-18 9:25 ` [PATCH RFC 09/10] perf,tools: don't validate non-sample event kan.liang
2015-08-18 9:25 ` [PATCH RFC 10/10] perf,tools: Show STAT_READ in perf report kan.liang
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=1439889946-28986-9-git-send-email-kan.liang@intel.com \
--to=kan.liang@intel.com \
--cc=a.p.zijlstra@chello.nl \
--cc=acme@kernel.org \
--cc=ak@linux.intel.com \
--cc=eranian@google.com \
--cc=jolsa@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome