perf record: Extend -D,--delay option with -1 value
authorAlexey Budankov <alexey.budankov@linux.intel.com>
Fri, 17 Jul 2020 07:07:03 +0000 (10:07 +0300)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Tue, 4 Aug 2020 11:50:04 +0000 (08:50 -0300)
Extend -D,--delay option with -1 to start collection with events
disabled to be enabled later by 'enable' command provided via control
file descriptor.

Signed-off-by: Alexey Budankov <alexey.budankov@linux.intel.com>
Acked-by: Jiri Olsa <jolsa@redhat.com>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lore.kernel.org/lkml/3e7d362c-7973-ee5d-e81e-c60ea22432c3@linux.intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/Documentation/perf-record.txt
tools/perf/builtin-record.c
tools/perf/builtin-trace.c
tools/perf/util/record.h

index fa8a5fc..a843766 100644 (file)
@@ -407,8 +407,9 @@ if combined with -a or -C options.
 
 -D::
 --delay=::
-After starting the program, wait msecs before measuring. This is useful to
-filter out the startup phase of the program, which is often very different.
+After starting the program, wait msecs before measuring (-1: start with events
+disabled). This is useful to filter out the startup phase of the program, which
+is often very different.
 
 -I::
 --intr-regs::
index b6bdccd..1dc8166 100644 (file)
@@ -1786,8 +1786,12 @@ static int __cmd_record(struct record *rec, int argc, const char **argv)
        }
 
        if (opts->initial_delay) {
-               usleep(opts->initial_delay * USEC_PER_MSEC);
-               evlist__enable(rec->evlist);
+               pr_info(EVLIST_DISABLED_MSG);
+               if (opts->initial_delay > 0) {
+                       usleep(opts->initial_delay * USEC_PER_MSEC);
+                       evlist__enable(rec->evlist);
+                       pr_info(EVLIST_ENABLED_MSG);
+               }
        }
 
        trigger_ready(&auxtrace_snapshot_trigger);
@@ -2499,8 +2503,8 @@ static struct option __record_options[] = {
        OPT_CALLBACK('G', "cgroup", &record.evlist, "name",
                     "monitor event in cgroup name only",
                     parse_cgroups),
-       OPT_UINTEGER('D', "delay", &record.opts.initial_delay,
-                 "ms to wait before starting measurement after program start"),
+       OPT_INTEGER('D', "delay", &record.opts.initial_delay,
+                 "ms to wait before starting measurement after program start (-1: start with events disabled)"),
        OPT_BOOLEAN(0, "kcore", &record.opts.kcore, "copy /proc/kcore"),
        OPT_STRING('u', "uid", &record.opts.target.uid_str, "user",
                   "user to profile"),
index a333a9a..bea461b 100644 (file)
@@ -4812,7 +4812,7 @@ int cmd_trace(int argc, const char **argv)
                        "per thread proc mmap processing timeout in ms"),
        OPT_CALLBACK('G', "cgroup", &trace, "name", "monitor event in cgroup name only",
                     trace__parse_cgroups),
-       OPT_UINTEGER('D', "delay", &trace.opts.initial_delay,
+       OPT_INTEGER('D', "delay", &trace.opts.initial_delay,
                     "ms to wait before starting measurement after program "
                     "start"),
        OPTS_EVSWITCH(&trace.evswitch),
index 84dbbc3..e9b3842 100644 (file)
@@ -62,7 +62,7 @@ struct record_opts {
        const char    *auxtrace_snapshot_opts;
        const char    *auxtrace_sample_opts;
        bool          sample_transaction;
-       unsigned      initial_delay;
+       int           initial_delay;
        bool          use_clockid;
        clockid_t     clockid;
        u64           clockid_res_ns;