Commit f9cef0a9 authored by Ingo Molnar's avatar Ingo Molnar

perf stat: Add --sync/-S option

--sync will tell perf stat to run sync() before starting a command.

This allows IO-heavy tests to be used with --repeat, without one
iteration impacting the other.

Elapsed time will stabilize for example:

  before:        3.971525714  seconds time elapsed  ( +-  8.56% )
  after:         3.211098537  seconds time elapsed  ( +-  1.52% )

So measurements will be more accurate.

Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Link: http://lkml.kernel.org/n/tip-7y40wib8n1eqio7hjpn1dsrm@git.kernel.orgSigned-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 8a850cad
...@@ -128,6 +128,7 @@ static pid_t target_tid = -1; ...@@ -128,6 +128,7 @@ static pid_t target_tid = -1;
static pid_t child_pid = -1; static pid_t child_pid = -1;
static bool null_run = false; static bool null_run = false;
static bool detailed_run = false; static bool detailed_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 *cpu_list;
...@@ -819,6 +820,8 @@ static const struct option options[] = { ...@@ -819,6 +820,8 @@ static const struct option options[] = {
"null run - dont start any counters"), "null run - dont start any counters"),
OPT_BOOLEAN('d', "detailed", &detailed_run, OPT_BOOLEAN('d', "detailed", &detailed_run,
"detailed run - start a lot of events"), "detailed run - start a lot of events"),
OPT_BOOLEAN('S', "sync", &sync_run,
"call sync() before starting a run"),
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),
...@@ -944,6 +947,10 @@ int cmd_stat(int argc, const char **argv, const char *prefix __used) ...@@ -944,6 +947,10 @@ int cmd_stat(int argc, const char **argv, const char *prefix __used)
for (run_idx = 0; run_idx < run_count; run_idx++) { for (run_idx = 0; run_idx < run_count; run_idx++) {
if (run_count != 1 && verbose) if (run_count != 1 && verbose)
fprintf(stderr, "[ perf stat: executing run #%d ... ]\n", run_idx + 1); fprintf(stderr, "[ perf stat: executing run #%d ... ]\n", run_idx + 1);
if (sync_run)
sync();
status = run_perf_stat(argc, argv); status = run_perf_stat(argc, argv);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment