linux-perf-users.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Ingo Molnar <mingo@kernel.org>
Cc: linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org,
	Arnaldo Carvalho de Melo <acme@redhat.com>,
	Adrian Hunter <adrian.hunter@intel.com>,
	David Ahern <dsahern@gmail.com>, Jiri Olsa <jolsa@kernel.org>,
	Namhyung Kim <namhyung@kernel.org>,
	Wang Nan <wangnan0@huawei.com>
Subject: [PATCH 09/28] perf record: Allow asking for the maximum allowed sample rate
Date: Mon,  5 Mar 2018 11:29:13 -0300	[thread overview]
Message-ID: <20180305142932.16921-10-acme@kernel.org> (raw)
In-Reply-To: <20180305142932.16921-1-acme@kernel.org>

From: Arnaldo Carvalho de Melo <acme@redhat.com>

Add the handy '-F max' shortcut to reading and using the
kernel.perf_event_max_sample_rate value as the user supplied
sampling frequency:

  # perf record -F max sleep 1
  info: Using a maximum frequency rate of 15,000 Hz
  [ perf record: Woken up 1 times to write data ]
  [ perf record: Captured and wrote 0.019 MB perf.data (14 samples) ]
  # sysctl kernel.perf_event_max_sample_rate
  kernel.perf_event_max_sample_rate = 15000
  # perf evlist -v
  cycles:ppp: size: 112, { sample_period, sample_freq }: 15000, sample_type: IP|TID|TIME|PERIOD, disabled: 1, inherit: 1, mmap: 1, comm: 1, freq: 1, enable_on_exec: 1, task: 1, precise_ip: 3, sample_id_all: 1, exclude_guest: 1, mmap2: 1, comm_exec: 1

  # perf record -F 10 sleep 1
  [ perf record: Woken up 1 times to write data ]
  [ perf record: Captured and wrote 0.019 MB perf.data (4 samples) ]
  # perf evlist -v
  cycles:ppp: size: 112, { sample_period, sample_freq }: 10, sample_type: IP|TID|TIME|PERIOD, disabled: 1, inherit: 1, mmap: 1, comm: 1, freq: 1, enable_on_exec: 1, task: 1, precise_ip: 3, sample_id_all: 1, exclude_guest: 1, mmap2: 1, comm_exec: 1
  #

Suggested-by: Ingo Molnar <mingo@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Wang Nan <wangnan0@huawei.com>
Link: https://lkml.kernel.org/n/tip-4y0tiuws62c64gp4cf0hme0m@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/Documentation/perf-record.txt |  4 +++-
 tools/perf/builtin-record.c              |  7 ++++++-
 tools/perf/perf.h                        |  2 ++
 tools/perf/util/record.c                 | 23 +++++++++++++++++++++++
 4 files changed, 34 insertions(+), 2 deletions(-)

diff --git a/tools/perf/Documentation/perf-record.txt b/tools/perf/Documentation/perf-record.txt
index 76bc2181d214..94f2faebc7f0 100644
--- a/tools/perf/Documentation/perf-record.txt
+++ b/tools/perf/Documentation/perf-record.txt
@@ -193,7 +193,9 @@ OPTIONS
 	Child tasks do not inherit counters.
 -F::
 --freq=::
-	Profile at this frequency.
+	Profile at this frequency. Use 'max' to use the currently maximum
+	allowed frequency, i.e. the value in the kernel.perf_event_max_sample_rate
+	sysctl.
 
 -m::
 --mmap-pages=::
diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
index 907267206973..e1821eea14ef 100644
--- a/tools/perf/builtin-record.c
+++ b/tools/perf/builtin-record.c
@@ -45,6 +45,7 @@
 
 #include <errno.h>
 #include <inttypes.h>
+#include <locale.h>
 #include <poll.h>
 #include <unistd.h>
 #include <sched.h>
@@ -1542,7 +1543,9 @@ static struct option __record_options[] = {
 	OPT_BOOLEAN(0, "tail-synthesize", &record.opts.tail_synthesize,
 		    "synthesize non-sample events at the end of output"),
 	OPT_BOOLEAN(0, "overwrite", &record.opts.overwrite, "use overwrite mode"),
-	OPT_UINTEGER('F', "freq", &record.opts.user_freq, "profile at this frequency"),
+	OPT_CALLBACK('F', "freq", &record.opts, "freq or 'max'",
+		     "profile at this frequency",
+		      record__parse_freq),
 	OPT_CALLBACK('m', "mmap-pages", &record.opts, "pages[,pages]",
 		     "number of mmap data pages and AUX area tracing mmap pages",
 		     record__parse_mmap_pages),
@@ -1651,6 +1654,8 @@ int cmd_record(int argc, const char **argv)
 	struct record *rec = &record;
 	char errbuf[BUFSIZ];
 
+	setlocale(LC_ALL, "");
+
 #ifndef HAVE_LIBBPF_SUPPORT
 # define set_nobuild(s, l, c) set_option_nobuild(record_options, s, l, "NO_LIBBPF=1", c)
 	set_nobuild('\0', "clang-path", true);
diff --git a/tools/perf/perf.h b/tools/perf/perf.h
index cfe46236a5e5..a5df8bf73a68 100644
--- a/tools/perf/perf.h
+++ b/tools/perf/perf.h
@@ -82,4 +82,6 @@ struct record_opts {
 struct option;
 extern const char * const *record_usage;
 extern struct option *record_options;
+
+int record__parse_freq(const struct option *opt, const char *str, int unset);
 #endif
diff --git a/tools/perf/util/record.c b/tools/perf/util/record.c
index 1e97937b03a9..acabf54ceccb 100644
--- a/tools/perf/util/record.c
+++ b/tools/perf/util/record.c
@@ -5,6 +5,7 @@
 #include "parse-events.h"
 #include <errno.h>
 #include <api/fs/fs.h>
+#include <subcmd/parse-options.h>
 #include "util.h"
 #include "cloexec.h"
 
@@ -287,3 +288,25 @@ bool perf_evlist__can_select_event(struct perf_evlist *evlist, const char *str)
 	perf_evlist__delete(temp_evlist);
 	return ret;
 }
+
+int record__parse_freq(const struct option *opt, const char *str, int unset __maybe_unused)
+{
+	unsigned int freq;
+	struct record_opts *opts = opt->value;
+
+	if (!str)
+		return -EINVAL;
+
+	if (strcasecmp(str, "max") == 0) {
+		if (get_max_rate(&freq)) {
+			pr_err("couldn't read /proc/sys/kernel/perf_event_max_sample_rate\n");
+			return -1;
+		}
+		pr_info("info: Using a maximum frequency rate of %'d Hz\n", freq);
+	} else {
+		freq = atoi(str);
+	}
+
+	opts->user_freq = freq;
+	return 0;
+}
-- 
2.14.3

  parent reply	other threads:[~2018-03-05 14:29 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-05 14:29 [GIT PULL 00/28] perf/core improvements and fixes Arnaldo Carvalho de Melo
2018-03-05 14:29 ` [PATCH 01/28] perf kallsyms: Fix the usage on the man page Arnaldo Carvalho de Melo
2018-03-05 14:29 ` [PATCH 02/28] perf stat: Use xyarray dimensions to iterate fds Arnaldo Carvalho de Melo
2018-03-05 14:29 ` [PATCH 03/28] perf cgroup: Simplify arguments when tracking multiple events Arnaldo Carvalho de Melo
2018-03-05 14:29 ` [PATCH 04/28] perf top: Fix annoying fallback message on older kernels Arnaldo Carvalho de Melo
2018-03-05 14:29 ` [PATCH 05/28] perf stat: Ignore error thread when enabling system-wide --per-thread Arnaldo Carvalho de Melo
2018-03-05 14:29 ` [PATCH 06/28] perf annotate browser: Be more robust when drawing jump arrows Arnaldo Carvalho de Melo
2018-03-05 14:29 ` [PATCH 07/28] perf tests: Switch trace+probe_libc_inet_pton to use record Arnaldo Carvalho de Melo
2018-03-05 14:29 ` [PATCH 08/28] perf tests: Rename trace+probe_libc_inet_pton to record+probe_libc_inet_pton Arnaldo Carvalho de Melo
2018-03-05 14:29 ` Arnaldo Carvalho de Melo [this message]
2018-03-05 14:29 ` [PATCH 10/28] perf top browser: Show sample_freq in browser title line Arnaldo Carvalho de Melo
2018-03-05 14:29 ` [PATCH 11/28] perf top: Allow asking for the maximum allowed sample rate Arnaldo Carvalho de Melo
2018-03-05 14:29 ` [PATCH 12/28] perf record: Throttle user defined frequencies to the maximum allowed Arnaldo Carvalho de Melo
2018-03-05 14:29 ` [PATCH 13/28] perf annotate: Find 'call' instruction target symbol at parsing time Arnaldo Carvalho de Melo
2018-03-05 14:29 ` [PATCH 14/28] perf record: Fix crash in pipe mode Arnaldo Carvalho de Melo
2018-03-05 14:29 ` [PATCH 15/28] perf kvm: Switch to new perf_mmap__read_event() interface Arnaldo Carvalho de Melo
2018-03-05 14:29 ` [PATCH 16/28] perf trace: " Arnaldo Carvalho de Melo
2018-03-05 14:29 ` [PATCH 17/28] perf python: " Arnaldo Carvalho de Melo
2018-03-05 14:29 ` [PATCH 18/28] perf test: Switch to new perf_mmap__read_event() interface for bpf Arnaldo Carvalho de Melo
2018-03-05 14:29 ` [PATCH 19/28] perf test: Switch to new perf_mmap__read_event() interface for 'code reading' test Arnaldo Carvalho de Melo
2018-03-05 14:29 ` [PATCH 20/28] perf test: Switch to new perf_mmap__read_event() interface for "keep tracking" test Arnaldo Carvalho de Melo
2018-03-05 14:29 ` [PATCH 21/28] perf test: Switch to new perf_mmap__read_event() interface for mmap-basic Arnaldo Carvalho de Melo
2018-03-05 14:29 ` [PATCH 22/28] perf test: Switch to new perf_mmap__read_event() interface for tp fields Arnaldo Carvalho de Melo
2018-03-05 14:29 ` [PATCH 23/28] perf test: Switch to new perf_mmap__read_event() interface for perf-record Arnaldo Carvalho de Melo
2018-03-05 14:29 ` [PATCH 24/28] perf test: Switch to new perf_mmap__read_event() interface for time-to-tsc Arnaldo Carvalho de Melo
2018-03-05 14:29 ` [PATCH 25/28] perf test: Switch to new perf_mmap__read_event() interface for sw-clock Arnaldo Carvalho de Melo
2018-03-05 14:29 ` [PATCH 26/28] perf test: Switch to new perf_mmap__read_event() interface for switch-tracking Arnaldo Carvalho de Melo
2018-03-05 14:29 ` [PATCH 27/28] perf test: Switch to new perf_mmap__read_event() interface for task-exit Arnaldo Carvalho de Melo
2018-03-05 14:29 ` [PATCH 28/28] perf mmap: Discard legacy interfaces for mmap read forward Arnaldo Carvalho de Melo
2018-03-06  6:35 ` [GIT PULL 00/28] perf/core improvements and fixes Ingo Molnar

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=20180305142932.16921-10-acme@kernel.org \
    --to=acme@kernel.org \
    --cc=acme@redhat.com \
    --cc=adrian.hunter@intel.com \
    --cc=dsahern@gmail.com \
    --cc=jolsa@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=namhyung@kernel.org \
    --cc=wangnan0@huawei.com \
    /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;
as well as URLs for NNTP newsgroup(s).