perf tools: Allow multiple threads or processes in record, stat, top
Allow a user to collect events for multiple threads or processes using a comma separated list. e.g., collect data on a VM and its vhost thread: perf top -p 21483,21485 perf stat -p 21483,21485 -ddd perf record -p 21483,21485 or monitoring vcpu threads perf top -t 21488,21489 perf stat -t 21488,21489 -ddd perf record -t 21488,21489 Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Ingo Molnar <mingo@elte.hu> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Link: http://lkml.kernel.org/r/1328718772-16688-1-git-send-email-dsahern@gmail.com Signed-off-by: David Ahern <dsahern@gmail.com> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
committed by
Arnaldo Carvalho de Melo
parent
eca1c3e3f9
commit
b52956c961
@ -645,8 +645,6 @@ static const char * const record_usage[] = {
|
||||
*/
|
||||
static struct perf_record record = {
|
||||
.opts = {
|
||||
.target_pid = -1,
|
||||
.target_tid = -1,
|
||||
.mmap_pages = UINT_MAX,
|
||||
.user_freq = UINT_MAX,
|
||||
.user_interval = ULLONG_MAX,
|
||||
@ -670,9 +668,9 @@ const struct option record_options[] = {
|
||||
parse_events_option),
|
||||
OPT_CALLBACK(0, "filter", &record.evlist, "filter",
|
||||
"event filter", parse_filter),
|
||||
OPT_INTEGER('p', "pid", &record.opts.target_pid,
|
||||
OPT_STRING('p', "pid", &record.opts.target_pid, "pid",
|
||||
"record events on existing process id"),
|
||||
OPT_INTEGER('t', "tid", &record.opts.target_tid,
|
||||
OPT_STRING('t', "tid", &record.opts.target_tid, "tid",
|
||||
"record events on existing thread id"),
|
||||
OPT_INTEGER('r', "realtime", &record.realtime_prio,
|
||||
"collect data with this RT SCHED_FIFO priority"),
|
||||
@ -739,7 +737,7 @@ int cmd_record(int argc, const char **argv, const char *prefix __used)
|
||||
|
||||
argc = parse_options(argc, argv, record_options, record_usage,
|
||||
PARSE_OPT_STOP_AT_NON_OPTION);
|
||||
if (!argc && rec->opts.target_pid == -1 && rec->opts.target_tid == -1 &&
|
||||
if (!argc && !rec->opts.target_pid && !rec->opts.target_tid &&
|
||||
!rec->opts.system_wide && !rec->opts.cpu_list && !rec->uid_str)
|
||||
usage_with_options(record_usage, record_options);
|
||||
|
||||
@ -785,7 +783,7 @@ int cmd_record(int argc, const char **argv, const char *prefix __used)
|
||||
if (rec->uid_str != NULL && rec->opts.uid == UINT_MAX - 1)
|
||||
goto out_free_fd;
|
||||
|
||||
if (rec->opts.target_pid != -1)
|
||||
if (rec->opts.target_pid)
|
||||
rec->opts.target_tid = rec->opts.target_pid;
|
||||
|
||||
if (perf_evlist__create_maps(evsel_list, rec->opts.target_pid,
|
||||
|
Reference in New Issue
Block a user