perf tools: Add group event scheduling option to perf record/stat
Group event scheduling command line option is missing in perf record/stat. Add it to perf record/stat, which is same as in perf top. Reported-by: Andi Kleen <andi@firstfloor.org> Cc: Andi Kleen <andi@firstfloor.org> Cc: Ingo Molnar <mingo@elte.hu> Cc: Peter Zijlstra <peterz@infradead.org> Link: http://lkml.kernel.org/r/1313577727.2754.5.camel@hp6530s Signed-off-by: Lin Ming <ming.m.lin@intel.com> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
d53e8365ea
commit
43bece7979
|
@ -45,7 +45,7 @@ static int freq = 1000;
|
||||||
static int output;
|
static int output;
|
||||||
static int pipe_output = 0;
|
static int pipe_output = 0;
|
||||||
static const char *output_name = NULL;
|
static const char *output_name = NULL;
|
||||||
static int group = 0;
|
static bool group = false;
|
||||||
static int realtime_prio = 0;
|
static int realtime_prio = 0;
|
||||||
static bool nodelay = false;
|
static bool nodelay = false;
|
||||||
static bool raw_samples = false;
|
static bool raw_samples = false;
|
||||||
|
@ -753,6 +753,8 @@ const struct option record_options[] = {
|
||||||
"child tasks do not inherit counters"),
|
"child tasks do not inherit counters"),
|
||||||
OPT_UINTEGER('F', "freq", &user_freq, "profile at this frequency"),
|
OPT_UINTEGER('F', "freq", &user_freq, "profile at this frequency"),
|
||||||
OPT_UINTEGER('m', "mmap-pages", &mmap_pages, "number of mmap data pages"),
|
OPT_UINTEGER('m', "mmap-pages", &mmap_pages, "number of mmap data pages"),
|
||||||
|
OPT_BOOLEAN(0, "group", &group,
|
||||||
|
"put the counters into a counter group"),
|
||||||
OPT_BOOLEAN('g', "call-graph", &call_graph,
|
OPT_BOOLEAN('g', "call-graph", &call_graph,
|
||||||
"do call-graph (stack chain/backtrace) recording"),
|
"do call-graph (stack chain/backtrace) recording"),
|
||||||
OPT_INCR('v', "verbose", &verbose,
|
OPT_INCR('v', "verbose", &verbose,
|
||||||
|
|
|
@ -193,6 +193,7 @@ static int big_num_opt = -1;
|
||||||
static const char *cpu_list;
|
static const char *cpu_list;
|
||||||
static const char *csv_sep = NULL;
|
static const char *csv_sep = NULL;
|
||||||
static bool csv_output = false;
|
static bool csv_output = false;
|
||||||
|
static bool group = false;
|
||||||
|
|
||||||
static volatile int done = 0;
|
static volatile int done = 0;
|
||||||
|
|
||||||
|
@ -280,14 +281,14 @@ static int create_perf_stat_counter(struct perf_evsel *evsel)
|
||||||
attr->inherit = !no_inherit;
|
attr->inherit = !no_inherit;
|
||||||
|
|
||||||
if (system_wide)
|
if (system_wide)
|
||||||
return perf_evsel__open_per_cpu(evsel, evsel_list->cpus, false);
|
return perf_evsel__open_per_cpu(evsel, evsel_list->cpus, group);
|
||||||
|
|
||||||
if (target_pid == -1 && target_tid == -1) {
|
if (target_pid == -1 && target_tid == -1) {
|
||||||
attr->disabled = 1;
|
attr->disabled = 1;
|
||||||
attr->enable_on_exec = 1;
|
attr->enable_on_exec = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return perf_evsel__open_per_thread(evsel, evsel_list->threads, false);
|
return perf_evsel__open_per_thread(evsel, evsel_list->threads, group);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1043,6 +1044,8 @@ static const struct option options[] = {
|
||||||
"stat events on existing thread id"),
|
"stat events on existing thread id"),
|
||||||
OPT_BOOLEAN('a', "all-cpus", &system_wide,
|
OPT_BOOLEAN('a', "all-cpus", &system_wide,
|
||||||
"system-wide collection from all CPUs"),
|
"system-wide collection from all CPUs"),
|
||||||
|
OPT_BOOLEAN('g', "group", &group,
|
||||||
|
"put the counters into a counter group"),
|
||||||
OPT_BOOLEAN('c', "scale", &scale,
|
OPT_BOOLEAN('c', "scale", &scale,
|
||||||
"scale/normalize counters"),
|
"scale/normalize counters"),
|
||||||
OPT_INCR('v', "verbose", &verbose,
|
OPT_INCR('v', "verbose", &verbose,
|
||||||
|
|
Loading…
Reference in a new issue