From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Ingo Molnar <mingo@kernel.org>
Cc: Clark Williams <williams@redhat.com>,
linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org,
Jiri Olsa <jolsa@kernel.org>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Andi Kleen <andi@firstfloor.org>, David Ahern <dsahern@gmail.com>,
Namhyung Kim <namhyung@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Arnaldo Carvalho de Melo <acme@redhat.com>
Subject: [PATCH 66/77] perf stat: Move 'walltime_*' data to 'struct perf_stat_config'
Date: Wed, 5 Sep 2018 19:04:29 -0300 [thread overview]
Message-ID: <20180905220440.20256-67-acme@kernel.org> (raw)
In-Reply-To: <20180905220440.20256-1-acme@kernel.org>
From: Jiri Olsa <jolsa@kernel.org>
Move the static variables 'walltime_*' to 'struct perf_stat_config', so
that it can be passed around and used outside 'perf stat' command.
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/20180830063252.23729-42-jolsa@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/builtin-stat.c | 22 ++++++++++------------
tools/perf/util/stat.h | 2 ++
2 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
index 486b0cf7818d..8a4979748cbb 100644
--- a/tools/perf/builtin-stat.c
+++ b/tools/perf/builtin-stat.c
@@ -158,13 +158,11 @@ static const char *post_cmd = NULL;
static bool sync_run = false;
static bool forever = false;
static bool force_metric_only = false;
-static bool walltime_run_table = false;
static struct timespec ref_time;
static bool append_file;
static bool interval_count;
static const char *output_name;
static int output_fd;
-static u64 *walltime_run;
struct perf_stat {
bool record;
@@ -604,8 +602,8 @@ static int __run_perf_stat(int argc, const char **argv, int run_idx)
t1 = rdclock();
- if (walltime_run_table)
- walltime_run[run_idx] = t1 - t0;
+ if (stat_config.walltime_run_table)
+ stat_config.walltime_run[run_idx] = t1 - t0;
update_stats(&walltime_nsecs_stats, t1 - t0);
@@ -1646,7 +1644,7 @@ static void print_table(struct perf_stat_config *config,
fprintf(output, "%*s# Table of individual measurements:\n", indent, "");
for (idx = 0; idx < config->run_count; idx++) {
- double run = (double) walltime_run[idx] / NSEC_PER_SEC;
+ double run = (double) config->walltime_run[idx] / NSEC_PER_SEC;
int h, n = 1 + abs((int) (100.0 * (run - avg)/run) / 5);
fprintf(output, " %17.*f (%+.*f) ",
@@ -1694,7 +1692,7 @@ static void print_footer(struct perf_stat_config *config)
*/
int precision = get_precision(sd) + 2;
- if (walltime_run_table)
+ if (config->walltime_run_table)
print_table(config, output, precision, avg);
fprintf(output, " %17.*f +- %.*f seconds time elapsed",
@@ -1888,7 +1886,7 @@ static const struct option stat_options[] = {
"be more verbose (show counter open errors, etc)"),
OPT_INTEGER('r', "repeat", &stat_config.run_count,
"repeat command and print average + stddev (max: 100, forever: 0)"),
- OPT_BOOLEAN(0, "table", &walltime_run_table,
+ OPT_BOOLEAN(0, "table", &stat_config.walltime_run_table,
"display details about each run (only with -r option)"),
OPT_BOOLEAN('n', "null", &stat_config.null_run,
"null run - dont start any counters"),
@@ -2802,7 +2800,7 @@ int cmd_stat(int argc, const char **argv)
goto out;
}
- if (walltime_run_table && stat_config.run_count <= 1) {
+ if (stat_config.walltime_run_table && stat_config.run_count <= 1) {
fprintf(stderr, "--table is only supported with -r\n");
parse_options_usage(stat_usage, stat_options, "r", 1);
parse_options_usage(NULL, stat_options, "table", 0);
@@ -2870,9 +2868,9 @@ int cmd_stat(int argc, const char **argv)
stat_config.run_count = 1;
}
- if (walltime_run_table) {
- walltime_run = zalloc(stat_config.run_count * sizeof(walltime_run[0]));
- if (!walltime_run) {
+ if (stat_config.walltime_run_table) {
+ stat_config.walltime_run = zalloc(stat_config.run_count * sizeof(stat_config.walltime_run[0]));
+ if (!stat_config.walltime_run) {
pr_err("failed to setup -r option");
goto out;
}
@@ -3052,7 +3050,7 @@ int cmd_stat(int argc, const char **argv)
perf_stat__exit_aggr_mode();
perf_evlist__free_stats(evsel_list);
out:
- free(walltime_run);
+ free(stat_config.walltime_run);
if (smi_cost && smi_reset)
sysfs__write_int(FREEZE_ON_SMI_PATH, 0);
diff --git a/tools/perf/util/stat.h b/tools/perf/util/stat.h
index 0758107fe56f..5193cbf6e4c6 100644
--- a/tools/perf/util/stat.h
+++ b/tools/perf/util/stat.h
@@ -105,6 +105,7 @@ struct perf_stat_config {
bool ru_display;
bool big_num;
bool no_merge;
+ bool walltime_run_table;
FILE *output;
unsigned int interval;
unsigned int timeout;
@@ -123,6 +124,7 @@ struct perf_stat_config {
struct cpu_map *aggr_map;
aggr_get_id_t aggr_get_id;
struct cpu_map *cpus_aggr_map;
+ u64 *walltime_run;
};
void update_stats(struct stats *stats, u64 val);
--
2.14.4
next prev parent reply other threads:[~2018-09-05 22:04 UTC|newest]
Thread overview: 80+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-09-05 22:03 [GIT PULL 00/77] perf/core improvements and fixes Arnaldo Carvalho de Melo
2018-09-05 22:03 ` [PATCH 01/77] perf trace: Pass augmented args to the arg formatters when available Arnaldo Carvalho de Melo
2018-09-05 22:03 ` [PATCH 02/77] perf trace: Make the augmented_syscalls filter out the tracepoint event Arnaldo Carvalho de Melo
2018-09-05 22:03 ` [PATCH 03/77] perf trace: Print the syscall name for augmented_syscalls Arnaldo Carvalho de Melo
2018-09-05 22:03 ` [PATCH 04/77] perf trace: Extract the comm/tid printing for syscall enter Arnaldo Carvalho de Melo
2018-09-05 22:03 ` [PATCH 05/77] perf trace: Show comm/tid for augmented_syscalls Arnaldo Carvalho de Melo
2018-09-05 22:03 ` [PATCH 06/77] perf trace: Use the augmented filename, expanding syscall enter pointers Arnaldo Carvalho de Melo
2018-09-05 22:03 ` [PATCH 07/77] perf trace: Augment the 'open' syscall 'filename' arg Arnaldo Carvalho de Melo
2018-09-05 22:03 ` [PATCH 08/77] perf trace: Augment inotify_add_watch pathname syscall arg Arnaldo Carvalho de Melo
2018-09-05 22:03 ` [PATCH 09/77] perf trace: Introduce augmented_filename_syscall_enter() declarator Arnaldo Carvalho de Melo
2018-09-05 22:03 ` [PATCH 10/77] perf trace: Augment 'newstat' (aka 'stat') filename ptr Arnaldo Carvalho de Melo
2018-09-05 22:03 ` [PATCH 11/77] perf trace: Add a etcsnoop.c augmented syscalls eBPF utility Arnaldo Carvalho de Melo
2018-09-05 22:03 ` [PATCH 12/77] perf bpf: Give precedence to bpf header dir Arnaldo Carvalho de Melo
2018-09-05 22:03 ` [PATCH 13/77] perf bpf: Add linux/socket.h to the headers accessible to bpf proggies Arnaldo Carvalho de Melo
2018-09-05 22:03 ` [PATCH 14/77] perf trace augmented_syscalls: Augment connect's 'sockaddr' arg Arnaldo Carvalho de Melo
2018-09-05 22:03 ` [PATCH 15/77] perf trace augmented_syscalls: Add augmented_sockaddr_syscall_enter() Arnaldo Carvalho de Melo
2018-09-05 22:03 ` [PATCH 16/77] perf trace augmented_syscalls: Augment bind's 'myaddr' sockaddr arg Arnaldo Carvalho de Melo
2018-09-05 22:03 ` [PATCH 17/77] perf trace augmented_syscalls: Augment sendto's 'addr' arg Arnaldo Carvalho de Melo
2018-09-05 22:03 ` [PATCH 18/77] perf trace beauty: Reorganize 'struct sockaddr *' beautifier Arnaldo Carvalho de Melo
2018-09-05 22:03 ` [PATCH 19/77] perf report: Create auxiliary trace data files for s390 Arnaldo Carvalho de Melo
2018-09-05 22:03 ` [PATCH 20/77] tools lib traceevent, perf tools: Split trace-seq related APIs in a separate header file Arnaldo Carvalho de Melo
2018-09-05 22:03 ` [PATCH 21/77] perf bpf: Add syscall_exit() helper Arnaldo Carvalho de Melo
2018-09-05 22:03 ` [PATCH 22/77] perf augmented_syscalls: Update the header comments Arnaldo Carvalho de Melo
2018-09-05 22:03 ` [PATCH 23/77] perf trace augmented_syscalls: Rename augmented_*_syscall__enter to just *_syscall Arnaldo Carvalho de Melo
2018-09-05 22:03 ` [PATCH 24/77] perf trace augmented_syscalls: Hook into syscalls:sys_exit_SYSCALL too Arnaldo Carvalho de Melo
2018-09-05 22:03 ` [PATCH 25/77] perf trace: Show comm and tid for tracepoint events Arnaldo Carvalho de Melo
2018-09-05 22:03 ` [PATCH 26/77] perf stat: Use evsel->threads in create_perf_stat_counter() Arnaldo Carvalho de Melo
2018-09-05 22:03 ` [PATCH 27/77] perf stat: Move 'initial_delay' to 'struct perf_stat_config' Arnaldo Carvalho de Melo
2018-09-05 22:03 ` [PATCH 28/77] perf stat: Move 'no_inherit' " Arnaldo Carvalho de Melo
2018-09-05 22:03 ` [PATCH 29/77] perf stat: Use local config arg for scale in create_perf_stat_counter() Arnaldo Carvalho de Melo
2018-09-05 22:03 ` [PATCH 30/77] perf stat: Add 'identifier' flag to 'struct perf_stat_config' Arnaldo Carvalho de Melo
2018-09-05 22:03 ` [PATCH 31/77] perf tools: Switch 'session' argument to 'evlist' in perf_event__synthesize_attrs() Arnaldo Carvalho de Melo
2018-09-05 22:03 ` [PATCH 32/77] perf evsel: Introduce perf_evsel__store_ids() Arnaldo Carvalho de Melo
2018-09-05 22:03 ` [PATCH 33/77] perf stat: Move create_perf_stat_counter() to stat.c Arnaldo Carvalho de Melo
2018-09-05 22:03 ` [PATCH 34/77] perf stat: Rename 'is_pipe' argument to 'attrs' in perf_stat_synthesize_config() Arnaldo Carvalho de Melo
2018-09-05 22:03 ` [PATCH 35/77] perf stat: Add 'struct perf_stat_config' argument to perf_stat_synthesize_config() Arnaldo Carvalho de Melo
2018-09-05 22:03 ` [PATCH 36/77] perf stat: Add 'struct perf_tool' " Arnaldo Carvalho de Melo
2018-09-05 22:04 ` [PATCH 37/77] perf stat: Add 'struct perf_evlist' " Arnaldo Carvalho de Melo
2018-09-05 22:04 ` [PATCH 38/77] perf stat: Add 'perf_event__handler_t' " Arnaldo Carvalho de Melo
2018-09-05 22:04 ` [PATCH 39/77] perf stat: Move perf_stat_synthesize_config() to stat.c Arnaldo Carvalho de Melo
2018-09-05 22:04 ` [PATCH 40/77] perf stat: Introduce perf_evlist__print_counters() Arnaldo Carvalho de Melo
2018-09-05 22:04 ` [PATCH 41/77] perf stat: Move STAT_RECORD out of perf_evlist__print_counters() Arnaldo Carvalho de Melo
2018-09-05 22:04 ` [PATCH 42/77] perf stat: Add 'struct perf_stat_config' argument to perf_evlist__print_counters() Arnaldo Carvalho de Melo
2018-09-05 22:04 ` [PATCH 43/77] perf stat: Pass 'struct perf_stat_config' argument to local print functions Arnaldo Carvalho de Melo
2018-09-05 22:04 ` [PATCH 44/77] perf stat: Pass a 'struct perf_stat_config' argument to global " Arnaldo Carvalho de Melo
2018-09-05 22:04 ` [PATCH 45/77] perf stat: Move csv_* to 'struct perf_stat_config' Arnaldo Carvalho de Melo
2018-09-05 22:04 ` [PATCH 46/77] perf stat: Move 'interval_clear' " Arnaldo Carvalho de Melo
2018-09-05 22:04 ` [PATCH 47/77] perf stat: Move 'metric_only' " Arnaldo Carvalho de Melo
2018-09-05 22:04 ` [PATCH 48/77] perf stat: Move 'unit_width' " Arnaldo Carvalho de Melo
2018-09-05 22:04 ` [PATCH 49/77] perf stat: Add 'target' argument to perf_evlist__print_counters() Arnaldo Carvalho de Melo
2018-09-05 22:04 ` [PATCH 50/77] perf stat: Pass 'evlist' argument to print functions Arnaldo Carvalho de Melo
2018-09-05 22:04 ` [PATCH 51/77] perf stat: Use 'evsel->evlist' instead of 'evsel_list' in collect_all_aliases() Arnaldo Carvalho de Melo
2018-09-05 22:04 ` [PATCH 52/77] perf stat: Move 'run_count' to 'struct perf_stat_config' Arnaldo Carvalho de Melo
2018-09-05 22:04 ` [PATCH 53/77] perf stat: Move 'metric_only_len' " Arnaldo Carvalho de Melo
2018-09-05 22:04 ` [PATCH 54/77] perf stat: Pass 'struct perf_stat_config' to first_shadow_cpu() Arnaldo Carvalho de Melo
2018-09-05 22:04 ` [PATCH 55/77] perf stat: Pass 'evlist' to aggr_update_shadow() Arnaldo Carvalho de Melo
2018-09-05 22:04 ` [PATCH 56/77] perf stat: Add 'walltime_nsecs_stats' pointer to 'struct perf_stat_config' Arnaldo Carvalho de Melo
2018-09-05 22:04 ` [PATCH 57/77] perf stat: Move 'null_run' " Arnaldo Carvalho de Melo
2018-09-05 22:04 ` [PATCH 58/77] perf stat: Move 'print_free_counters_hint' " Arnaldo Carvalho de Melo
2018-09-05 22:04 ` [PATCH 59/77] perf stat: Move 'print_mixed_hw_group_error' " Arnaldo Carvalho de Melo
2018-09-05 22:04 ` [PATCH 60/77] perf stat: Move ru_* data " Arnaldo Carvalho de Melo
2018-09-05 22:04 ` [PATCH 61/77] perf stat: Move *_aggr_* " Arnaldo Carvalho de Melo
2018-09-05 22:04 ` [PATCH 62/77] perf stat: Do not use the global 'evsel_list' in print functions Arnaldo Carvalho de Melo
2018-09-05 22:04 ` [PATCH 63/77] perf stat: Move 'big_num' data to 'struct perf_stat_config' Arnaldo Carvalho de Melo
2018-09-05 22:04 ` [PATCH 64/77] perf stat: Move 'no_merge' " Arnaldo Carvalho de Melo
2018-09-05 22:04 ` [PATCH 65/77] perf stat: Propagate 'struct target' arg to sort_aggr_thread() Arnaldo Carvalho de Melo
2018-09-05 22:04 ` Arnaldo Carvalho de Melo [this message]
2018-09-05 22:04 ` [PATCH 67/77] perf stat: Move 'metric_events' to 'struct perf_stat_config' Arnaldo Carvalho de Melo
2018-09-05 22:04 ` [PATCH 68/77] perf stat: Move the display functions to stat-display.c Arnaldo Carvalho de Melo
2018-09-05 22:04 ` [PATCH 69/77] perf trace beauty: Alias 'umount' to 'umount2' Arnaldo Carvalho de Melo
2018-09-05 22:04 ` [PATCH 70/77] perf annotate: Handle arm64 move instructions Arnaldo Carvalho de Melo
2018-09-05 22:04 ` [PATCH 71/77] perf augmented_syscalls: Check probe_read_str() return separately Arnaldo Carvalho de Melo
2018-09-05 22:04 ` [PATCH 72/77] perf augmented_syscalls: Avoid optimization to pass older BPF validators Arnaldo Carvalho de Melo
2018-09-05 22:04 ` [PATCH 73/77] perf trace: Introduce syscall__augmented_args() method Arnaldo Carvalho de Melo
2018-09-05 22:04 ` [PATCH 74/77] perf trace: Setup augmented_args in the raw_syscalls:sys_enter handler Arnaldo Carvalho de Melo
2018-09-05 22:04 ` [PATCH 75/77] perf trace: Use the raw_syscalls:sys_enter for the augmented syscalls Arnaldo Carvalho de Melo
2018-09-05 22:04 ` [PATCH 76/77] perf map: Turn some pr_warning() to pr_debug() Arnaldo Carvalho de Melo
2018-09-05 22:04 ` [PATCH 77/77] perf tests: Fix record+probe_libc_inet_pton.sh without ping's debuginfo Arnaldo Carvalho de Melo
2018-09-07 12:09 ` Thomas-Mich Richter
2018-09-10 15:19 ` Arnaldo Carvalho de Melo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180905220440.20256-67-acme@kernel.org \
--to=acme@kernel.org \
--cc=acme@redhat.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=andi@firstfloor.org \
--cc=dsahern@gmail.com \
--cc=jolsa@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.org \
--cc=williams@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).