perf tools: Introduce per user view
The new --uid command line option will show only the tasks for a given user, using the proc interface to figure out the existing tasks. Kernel work is needed to close races at startup, but this should already be useful in many use cases. Cc: David Ahern <dsahern@gmail.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Mike Galbraith <efault@gmx.de> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Stephane Eranian <eranian@google.com> Link: http://lkml.kernel.org/n/tip-bdnspm000gw2l984a2t53o8z@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
@@ -44,6 +44,7 @@ struct perf_record {
|
||||
struct perf_evlist *evlist;
|
||||
struct perf_session *session;
|
||||
const char *progname;
|
||||
const char *uid_str;
|
||||
int output;
|
||||
unsigned int page_size;
|
||||
int realtime_prio;
|
||||
@@ -727,6 +728,7 @@ const struct option record_options[] = {
|
||||
OPT_CALLBACK('G', "cgroup", &record.evlist, "name",
|
||||
"monitor event in cgroup name only",
|
||||
parse_cgroups),
|
||||
OPT_STRING('u', "uid", &record.uid_str, "user", "user to profile"),
|
||||
OPT_END()
|
||||
};
|
||||
|
||||
@@ -748,7 +750,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 &&
|
||||
!rec->opts.system_wide && !rec->opts.cpu_list)
|
||||
!rec->opts.system_wide && !rec->opts.cpu_list && !rec->uid_str)
|
||||
usage_with_options(record_usage, record_options);
|
||||
|
||||
if (rec->force && rec->append_file) {
|
||||
@@ -788,11 +790,17 @@ int cmd_record(int argc, const char **argv, const char *prefix __used)
|
||||
goto out_symbol_exit;
|
||||
}
|
||||
|
||||
rec->opts.uid = parse_target_uid(rec->uid_str, rec->opts.target_tid,
|
||||
rec->opts.target_pid);
|
||||
if (rec->uid_str != NULL && rec->opts.uid == UINT_MAX - 1)
|
||||
goto out_free_fd;
|
||||
|
||||
if (rec->opts.target_pid != -1)
|
||||
rec->opts.target_tid = rec->opts.target_pid;
|
||||
|
||||
if (perf_evlist__create_maps(evsel_list, rec->opts.target_pid,
|
||||
rec->opts.target_tid, rec->opts.cpu_list) < 0)
|
||||
rec->opts.target_tid, rec->opts.uid,
|
||||
rec->opts.cpu_list) < 0)
|
||||
usage_with_options(record_usage, record_options);
|
||||
|
||||
list_for_each_entry(pos, &evsel_list->entries, node) {
|
||||
|
Reference in New Issue
Block a user