Re: [PATCH 1/3] perf record: support duration option to run duringspecified time

From: Joonsoo Kim
Date: Mon Jul 01 2013 - 01:46:44 EST


On Fri, Jun 28, 2013 at 05:27:24PM -0700, Sukadev Bhattiprolu wrote:
> Joonsoo Kim [iamjoonsoo.kim@xxxxxxx] wrote:
> | Currently, there is no method to quit at specified time later.
> | We are used to using 'sleep N' as command argument if we need it,
> | but explicitly supporting this feature maybe makes sense.
> |
> | Cc: Namhyung Kim <namhyung@xxxxxxxxxx>
> | Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@xxxxxxx>
> |
> | diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
> | index cdf58ec..19c65b5 100644
> | --- a/tools/perf/builtin-record.c
> | +++ b/tools/perf/builtin-record.c
> | @@ -29,6 +29,7 @@
> | #include <sched.h>
> | #include <sys/mman.h>
> |
> | +static unsigned int duration;
> | #ifndef HAVE_ON_EXIT
> | #ifndef ATEXIT_MAX
> | #define ATEXIT_MAX 32
> | @@ -194,7 +195,7 @@ static void perf_record__sig_exit(int exit_status __maybe_unused, void *arg)
> | psignal(WTERMSIG(status), rec->progname);
> | }
> |
> | - if (signr == -1 || signr == SIGUSR1)
> | + if (signr == -1 || signr == SIGUSR1 || signr == SIGALRM)
> | return;
> |
> | signal(signr, SIG_DFL);
> | @@ -404,6 +405,7 @@ static int __cmd_record(struct perf_record *rec, int argc, const char **argv)
> | signal(SIGCHLD, sig_handler);
> | signal(SIGINT, sig_handler);
> | signal(SIGUSR1, sig_handler);
> | + signal(SIGALRM, sig_handler);
> |
> | if (!output_name) {
> | if (!fstat(STDOUT_FILENO, &st) && S_ISFIFO(st.st_mode))
> | @@ -471,6 +473,7 @@ static int __cmd_record(struct perf_record *rec, int argc, const char **argv)
> | goto out_delete_session;
> | }
> |
> | + alarm(duration);
> | if (forks) {
> | err = perf_evlist__prepare_workload(evsel_list, &opts->target,
> | argv, opts->pipe_output,
> | @@ -955,6 +958,7 @@ const struct option record_options[] = {
> | parse_branch_stack),
> | OPT_BOOLEAN('W', "weight", &record.opts.sample_weight,
> | "sample by weight (on special events only)"),
> | + OPT_UINTEGER(0, "duration", &duration, "run during specified seconds"),
>
> nit: A slight ambiguity in the help text. Would you mind changing it to:
>
> "run for specified duration (seconds)" ?
>
> Sukadev

Hello, Sukadev.
Okay.

Here goes v2 with your suggestion.
---------------->8------------------------------