Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1230971 > unrolled thread

[PATCH RFC 06/10] perf,tools: option to set counter read interval

Started bykan.liang@intel.com
First post2015-09-22 23:40 +0200
Last post2015-09-23 21:10 +0200
Articles 3 — 3 participants

Back to article view | Back to linux.kernel

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  [PATCH RFC 06/10] perf,tools: option to set counter read interval kan.liang@intel.com - 2015-09-22 23:40 +0200
    Re: [PATCH RFC 06/10] perf,tools: option to set counter read interval Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com> - 2015-09-23 21:00 +0200
      RE: [PATCH RFC 06/10] perf,tools: option to set counter read  interval "Liang, Kan" <kan.liang@intel.com> - 2015-09-23 21:10 +0200

#1230971 — [PATCH RFC 06/10] perf,tools: option to set counter read interval

Fromkan.liang@intel.com
Date2015-09-22 23:40 +0200
Subject[PATCH RFC 06/10] perf,tools: option to set counter read interval
Message-ID<qbDs5-IB-15@gated-at.bofh.it>
From: Kan Liang <kan.liang@intel.com>

Add a timer to read counter regularly. Option --counter-read-interval
can be used to set the interval.
Only read counter statistics at the beginning and the end 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 |  8 +++++++
 tools/perf/builtin-record.c              | 37 ++++++++++++++++++++++++++++++++
 2 files changed, 45 insertions(+)

diff --git a/tools/perf/Documentation/perf-record.txt b/tools/perf/Documentation/perf-record.txt
index 2e9ce77..c1d9024 100644
--- a/tools/perf/Documentation/perf-record.txt
+++ b/tools/perf/Documentation/perf-record.txt
@@ -308,6 +308,14 @@ 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.
 
+--counter-read-interval::
+Sets the interval to do counter read regularly. This option is only valid
+with counter read event (:C). This option is disabled by default. It means
+that the event counter can only be read at the beginning and the end.
+This option could be used when we need fine granularity to do sophisticated
+analysis. For example, 10-20ms is required to do sophisticated memory
+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 cc8fd08..cdc9d3b 100644
--- a/tools/perf/builtin-record.c
+++ b/tools/perf/builtin-record.c
@@ -505,6 +505,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;
@@ -517,6 +525,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];
@@ -530,6 +541,25 @@ static int __cmd_record(struct record *rec, int argc, const char **argv)
 	else
 		signal(SIGUSR2, SIG_IGN);
 
+	if (interval) {
+		if (interval < 10) {
+			pr_err("Regular interval for counter read must >= 10 ms.\n");
+			return -1;
+		}
+		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_sec = interval/1000;
+		timeout.it_interval.tv_sec = interval/1000;
+		timeout.it_value.tv_nsec = (interval % 1000) * 1000000ULL;
+		timeout.it_interval.tv_nsec = (interval % 1000) * 1000000ULL;
+	}
+
 	session = perf_session__new(file, false, tool);
 	if (session == NULL) {
 		pr_err("Perf session creation failed.\n");
@@ -679,6 +709,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;
@@ -723,6 +756,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;
@@ -1132,6 +1167,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, "counter-read-interval", &interval,
+			"Read event counter statistics at regular interval in ms (>= 10)"),
 	OPT_END()
 };
 
-- 
1.8.3.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [next] | [standalone]


#1231651

FromSukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
Date2015-09-23 21:00 +0200
Message-ID<qbXqO-4lb-7@gated-at.bofh.it>
In reply to#1230971
kan.liang@intel.com [kan.liang@intel.com] wrote:
| From: Kan Liang <kan.liang@intel.com>
| 
| Add a timer to read counter regularly. Option --counter-read-interval
| can be used to set the interval.
| Only read counter statistics at the beginning and the end 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 |  8 +++++++
|  tools/perf/builtin-record.c              | 37 ++++++++++++++++++++++++++++++++
|  2 files changed, 45 insertions(+)
| 
| diff --git a/tools/perf/Documentation/perf-record.txt b/tools/perf/Documentation/perf-record.txt
| index 2e9ce77..c1d9024 100644
| --- a/tools/perf/Documentation/perf-record.txt
| +++ b/tools/perf/Documentation/perf-record.txt
| @@ -308,6 +308,14 @@ 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.
| 
| +--counter-read-interval::
| +Sets the interval to do counter read regularly. This option is only valid

How about "Sets the interval at which the counter should be read"?

| +with counter read event (:C). This option is disabled by default. It means
| +that the event counter can only be read at the beginning and the end.

Should this last sentence be: "When this option is disabled, the event
counter can only be read at the beginning and the end?"

| +This option could be used when we need fine granularity to do sophisticated
| +analysis. For example, 10-20ms is required to do sophisticated memory
| +bandwidth analysis.

I guess this is independent of the sampling frequency (perf-record -F)? 

IOW, is the need for --counter-read-interval so we can sample at one
frequency, but read the counter values/statistics at a different frequency?

Sukadev

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1231657 — RE: [PATCH RFC 06/10] perf,tools: option to set counter read interval

From"Liang, Kan" <kan.liang@intel.com>
Date2015-09-23 21:10 +0200
SubjectRE: [PATCH RFC 06/10] perf,tools: option to set counter read interval
Message-ID<qbXAt-4LB-1@gated-at.bofh.it>
In reply to#1231651
> 
> kan.liang@intel.com [kan.liang@intel.com] wrote:
> | From: Kan Liang <kan.liang@intel.com>
> |
> | Add a timer to read counter regularly. Option --counter-read-interval
> | can be used to set the interval.
> | Only read counter statistics at the beginning and the end 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 |  8 +++++++
> |  tools/perf/builtin-record.c              | 37
> ++++++++++++++++++++++++++++++++
> |  2 files changed, 45 insertions(+)
> |
> | diff --git a/tools/perf/Documentation/perf-record.txt
> | b/tools/perf/Documentation/perf-record.txt
> | index 2e9ce77..c1d9024 100644
> | --- a/tools/perf/Documentation/perf-record.txt
> | +++ b/tools/perf/Documentation/perf-record.txt
> | @@ -308,6 +308,14 @@ 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.
> |
> | +--counter-read-interval::
> | +Sets the interval to do counter read regularly. This option is only
> | +valid
> 
> How about "Sets the interval at which the counter should be read"?
> 
> | +with counter read event (:C). This option is disabled by default. It
> | +means that the event counter can only be read at the beginning and the
> end.
> 
> Should this last sentence be: "When this option is disabled, the event
> counter can only be read at the beginning and the end?"
> 
> | +This option could be used when we need fine granularity to do
> | +sophisticated analysis. For example, 10-20ms is required to do
> | +sophisticated memory bandwidth analysis.
> 
> I guess this is independent of the sampling frequency (perf-record -F)?
> 
> IOW, is the need for --counter-read-interval so we can sample at one
> frequency, but read the counter values/statistics at a different frequency?

Right, --counter-read-interval is independent of sampling freq.
If we set --counter-read-interval to 10ms, it will read counter every 10ms
no matter what sampling frequency is set.

Thanks,
Kan
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web