提交 20f946b4 编写于 作者: N Namhyung Kim 提交者: Arnaldo Carvalho de Melo

perf stat: Convert to struct perf_target

Use struct perf_target as it is introduced by previous patch.

This is a preparation of further changes.
Signed-off-by: NNamhyung Kim <namhyung.kim@lge.com>
Reviewed-by: NDavid Ahern <dsahern@gmail.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Namhyung Kim <namhyung@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1335417327-11796-3-git-send-email-namhyung.kim@lge.comSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
上级 bea03405
...@@ -175,22 +175,19 @@ static struct perf_event_attr very_very_detailed_attrs[] = { ...@@ -175,22 +175,19 @@ static struct perf_event_attr very_very_detailed_attrs[] = {
static struct perf_evlist *evsel_list; static struct perf_evlist *evsel_list;
static bool system_wide = false; static struct perf_target target;
static int run_idx = 0;
static int run_idx = 0;
static int run_count = 1; static int run_count = 1;
static bool no_inherit = false; static bool no_inherit = false;
static bool scale = true; static bool scale = true;
static bool no_aggr = false; static bool no_aggr = false;
static const char *target_pid;
static const char *target_tid;
static pid_t child_pid = -1; static pid_t child_pid = -1;
static bool null_run = false; static bool null_run = false;
static int detailed_run = 0; static int detailed_run = 0;
static bool sync_run = false; static bool sync_run = false;
static bool big_num = true; static bool big_num = true;
static int big_num_opt = -1; static int big_num_opt = -1;
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 bool group = false;
...@@ -293,10 +290,10 @@ static int create_perf_stat_counter(struct perf_evsel *evsel, ...@@ -293,10 +290,10 @@ static int create_perf_stat_counter(struct perf_evsel *evsel,
attr->inherit = !no_inherit; attr->inherit = !no_inherit;
if (system_wide) if (target.system_wide)
return perf_evsel__open_per_cpu(evsel, evsel_list->cpus, return perf_evsel__open_per_cpu(evsel, evsel_list->cpus,
group, group_fd); group, group_fd);
if (!target_pid && !target_tid && (!group || evsel == first)) { if (!target.pid && !target.tid && (!group || evsel == first)) {
attr->disabled = 1; attr->disabled = 1;
attr->enable_on_exec = 1; attr->enable_on_exec = 1;
} }
...@@ -446,7 +443,7 @@ static int run_perf_stat(int argc __used, const char **argv) ...@@ -446,7 +443,7 @@ static int run_perf_stat(int argc __used, const char **argv)
exit(-1); exit(-1);
} }
if (!target_tid && !target_pid && !system_wide) if (!target.tid && !target.pid && !target.system_wide)
evsel_list->threads->map[0] = child_pid; evsel_list->threads->map[0] = child_pid;
/* /*
...@@ -476,7 +473,7 @@ static int run_perf_stat(int argc __used, const char **argv) ...@@ -476,7 +473,7 @@ static int run_perf_stat(int argc __used, const char **argv)
error("You may not have permission to collect %sstats.\n" error("You may not have permission to collect %sstats.\n"
"\t Consider tweaking" "\t Consider tweaking"
" /proc/sys/kernel/perf_event_paranoid or running as root.", " /proc/sys/kernel/perf_event_paranoid or running as root.",
system_wide ? "system-wide " : ""); target.system_wide ? "system-wide " : "");
} else { } else {
error("open_counter returned with %d (%s). " error("open_counter returned with %d (%s). "
"/bin/dmesg may provide additional information.\n", "/bin/dmesg may provide additional information.\n",
...@@ -968,14 +965,14 @@ static void print_stat(int argc, const char **argv) ...@@ -968,14 +965,14 @@ static void print_stat(int argc, const char **argv)
if (!csv_output) { if (!csv_output) {
fprintf(output, "\n"); fprintf(output, "\n");
fprintf(output, " Performance counter stats for "); fprintf(output, " Performance counter stats for ");
if (!target_pid && !target_tid) { if (!target.pid && !target.tid) {
fprintf(output, "\'%s", argv[0]); fprintf(output, "\'%s", argv[0]);
for (i = 1; i < argc; i++) for (i = 1; i < argc; i++)
fprintf(output, " %s", argv[i]); fprintf(output, " %s", argv[i]);
} else if (target_pid) } else if (target.pid)
fprintf(output, "process id \'%s", target_pid); fprintf(output, "process id \'%s", target.pid);
else else
fprintf(output, "thread id \'%s", target_tid); fprintf(output, "thread id \'%s", target.tid);
fprintf(output, "\'"); fprintf(output, "\'");
if (run_count > 1) if (run_count > 1)
...@@ -1049,11 +1046,11 @@ static const struct option options[] = { ...@@ -1049,11 +1046,11 @@ static const struct option options[] = {
"event filter", parse_filter), "event filter", parse_filter),
OPT_BOOLEAN('i', "no-inherit", &no_inherit, OPT_BOOLEAN('i', "no-inherit", &no_inherit,
"child tasks do not inherit counters"), "child tasks do not inherit counters"),
OPT_STRING('p', "pid", &target_pid, "pid", OPT_STRING('p', "pid", &target.pid, "pid",
"stat events on existing process id"), "stat events on existing process id"),
OPT_STRING('t', "tid", &target_tid, "tid", OPT_STRING('t', "tid", &target.tid, "tid",
"stat events on existing thread id"), "stat events on existing thread id"),
OPT_BOOLEAN('a', "all-cpus", &system_wide, OPT_BOOLEAN('a', "all-cpus", &target.system_wide,
"system-wide collection from all CPUs"), "system-wide collection from all CPUs"),
OPT_BOOLEAN('g', "group", &group, OPT_BOOLEAN('g', "group", &group,
"put the counters into a counter group"), "put the counters into a counter group"),
...@@ -1072,7 +1069,7 @@ static const struct option options[] = { ...@@ -1072,7 +1069,7 @@ static const struct option options[] = {
OPT_CALLBACK_NOOPT('B', "big-num", NULL, NULL, OPT_CALLBACK_NOOPT('B', "big-num", NULL, NULL,
"print large numbers with thousands\' separators", "print large numbers with thousands\' separators",
stat__set_big_num), stat__set_big_num),
OPT_STRING('C', "cpu", &cpu_list, "cpu", OPT_STRING('C', "cpu", &target.cpu_list, "cpu",
"list of cpus to monitor in system-wide"), "list of cpus to monitor in system-wide"),
OPT_BOOLEAN('A', "no-aggr", &no_aggr, OPT_BOOLEAN('A', "no-aggr", &no_aggr,
"disable CPU count aggregation"), "disable CPU count aggregation"),
...@@ -1190,13 +1187,13 @@ int cmd_stat(int argc, const char **argv, const char *prefix __used) ...@@ -1190,13 +1187,13 @@ int cmd_stat(int argc, const char **argv, const char *prefix __used)
} else if (big_num_opt == 0) /* User passed --no-big-num */ } else if (big_num_opt == 0) /* User passed --no-big-num */
big_num = false; big_num = false;
if (!argc && !target_pid && !target_tid) if (!argc && !target.pid && !target.tid)
usage_with_options(stat_usage, options); usage_with_options(stat_usage, options);
if (run_count <= 0) if (run_count <= 0)
usage_with_options(stat_usage, options); usage_with_options(stat_usage, options);
/* no_aggr, cgroup are for system-wide only */ /* no_aggr, cgroup are for system-wide only */
if ((no_aggr || nr_cgroups) && !system_wide) { if ((no_aggr || nr_cgroups) && !target.system_wide) {
fprintf(stderr, "both cgroup and no-aggregation " fprintf(stderr, "both cgroup and no-aggregation "
"modes only available in system-wide mode\n"); "modes only available in system-wide mode\n");
...@@ -1206,18 +1203,18 @@ int cmd_stat(int argc, const char **argv, const char *prefix __used) ...@@ -1206,18 +1203,18 @@ int cmd_stat(int argc, const char **argv, const char *prefix __used)
if (add_default_attributes()) if (add_default_attributes())
goto out; goto out;
if (target_pid) if (target.pid)
target_tid = target_pid; target.tid = target.pid;
evsel_list->threads = thread_map__new_str(target_pid, evsel_list->threads = thread_map__new_str(target.pid,
target_tid, UINT_MAX); target.tid, UINT_MAX);
if (evsel_list->threads == NULL) { if (evsel_list->threads == NULL) {
pr_err("Problems finding threads of monitor\n"); pr_err("Problems finding threads of monitor\n");
usage_with_options(stat_usage, options); usage_with_options(stat_usage, options);
} }
if (system_wide) if (target.system_wide)
evsel_list->cpus = cpu_map__new(cpu_list); evsel_list->cpus = cpu_map__new(target.cpu_list);
else else
evsel_list->cpus = cpu_map__dummy_new(); evsel_list->cpus = cpu_map__dummy_new();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册