Commit b0d22e52 authored by Ingo Molnar's avatar Ingo Molnar Committed by Arnaldo Carvalho de Melo

perf bench: Harmonize all the -l/--nr_loops options

We have three benchmarking subsystems that specify some sort of 'number
of loops' parameter - but all of them do it inconsistently:

 numa:              -l/--nr_loops
 sched messaging:   -l/--loops
 mem memset/memcpy: -i/--iterations

Harmonize them to -l/--nr_loops by picking the numa variant - which is
also the most likely one to have existing scripting which we don't want
to break.

Plus improve the parameter help texts to indicate the default value for
the nr_loops variable to keep users from guessing ...

Also propagate the naming to internal variables.
Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Hitoshi Mitake <mitake@dcl.info.waseda.ac.jp>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/1445241870-24854-13-git-send-email-mingo@kernel.org
[ Let the harmonisation reach the perf-bench man page as well ]
Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 5dd93304
...@@ -82,7 +82,7 @@ Be multi thread instead of multi process ...@@ -82,7 +82,7 @@ Be multi thread instead of multi process
Specify number of groups Specify number of groups
-l:: -l::
--loop=:: --nr_loops=::
Specify number of loops Specify number of loops
Example of *messaging* Example of *messaging*
...@@ -149,8 +149,8 @@ Specify routine to copy (default: default). ...@@ -149,8 +149,8 @@ Specify routine to copy (default: default).
Available routines are depend on the architecture. Available routines are depend on the architecture.
On x86-64, x86-64-unrolled, x86-64-movsq and x86-64-movsb are supported. On x86-64, x86-64-unrolled, x86-64-movsq and x86-64-movsb are supported.
-i:: -l::
--iterations:: --nr_loops::
Repeat memcpy invocation this number of times. Repeat memcpy invocation this number of times.
-c:: -c::
...@@ -173,8 +173,8 @@ Specify routine to set (default: default). ...@@ -173,8 +173,8 @@ Specify routine to set (default: default).
Available routines are depend on the architecture. Available routines are depend on the architecture.
On x86-64, x86-64-unrolled, x86-64-stosq and x86-64-stosb are supported. On x86-64, x86-64-unrolled, x86-64-stosq and x86-64-stosb are supported.
-i:: -l::
--iterations:: --nr_loops::
Repeat memset invocation this number of times. Repeat memset invocation this number of times.
-c:: -c::
......
...@@ -25,20 +25,20 @@ ...@@ -25,20 +25,20 @@
static const char *size_str = "1MB"; static const char *size_str = "1MB";
static const char *routine_str = "all"; static const char *routine_str = "all";
static int iterations = 1; static int nr_loops = 1;
static bool use_cycles; static bool use_cycles;
static int cycles_fd; static int cycles_fd;
static const struct option options[] = { static const struct option options[] = {
OPT_STRING('l', "size", &size_str, "1MB", OPT_STRING('s', "size", &size_str, "1MB",
"Specify the size of the memory buffers. " "Specify the size of the memory buffers. "
"Available units: B, KB, MB, GB and TB (case insensitive)"), "Available units: B, KB, MB, GB and TB (case insensitive)"),
OPT_STRING('r', "routine", &routine_str, "all", OPT_STRING('r', "routine", &routine_str, "all",
"Specify the routine to run, \"all\" runs all available routines, \"help\" lists them"), "Specify the routine to run, \"all\" runs all available routines, \"help\" lists them"),
OPT_INTEGER('i', "iterations", &iterations, OPT_INTEGER('l', "nr_loops", &nr_loops,
"Repeat the function this number of times"), "Specify the number of loops to run. (default: 1)"),
OPT_BOOLEAN('c', "cycles", &use_cycles, OPT_BOOLEAN('c', "cycles", &use_cycles,
"Use a cycles event instead of gettimeofday() to measure performance"), "Use a cycles event instead of gettimeofday() to measure performance"),
...@@ -159,7 +159,7 @@ static int bench_mem_common(int argc, const char **argv, struct bench_mem_info * ...@@ -159,7 +159,7 @@ static int bench_mem_common(int argc, const char **argv, struct bench_mem_info *
init_cycles(); init_cycles();
size = (size_t)perf_atoll((char *)size_str); size = (size_t)perf_atoll((char *)size_str);
size_total = (double)size * iterations; size_total = (double)size * nr_loops;
if ((s64)size <= 0) { if ((s64)size <= 0) {
fprintf(stderr, "Invalid size:%s\n", size_str); fprintf(stderr, "Invalid size:%s\n", size_str);
...@@ -222,7 +222,7 @@ static u64 do_memcpy_cycles(const struct routine *r, size_t size) ...@@ -222,7 +222,7 @@ static u64 do_memcpy_cycles(const struct routine *r, size_t size)
fn(dst, src, size); fn(dst, src, size);
cycle_start = get_cycles(); cycle_start = get_cycles();
for (i = 0; i < iterations; ++i) for (i = 0; i < nr_loops; ++i)
fn(dst, src, size); fn(dst, src, size);
cycle_end = get_cycles(); cycle_end = get_cycles();
...@@ -247,7 +247,7 @@ static double do_memcpy_gettimeofday(const struct routine *r, size_t size) ...@@ -247,7 +247,7 @@ static double do_memcpy_gettimeofday(const struct routine *r, size_t size)
fn(dst, src, size); fn(dst, src, size);
BUG_ON(gettimeofday(&tv_start, NULL)); BUG_ON(gettimeofday(&tv_start, NULL));
for (i = 0; i < iterations; ++i) for (i = 0; i < nr_loops; ++i)
fn(dst, src, size); fn(dst, src, size);
BUG_ON(gettimeofday(&tv_end, NULL)); BUG_ON(gettimeofday(&tv_end, NULL));
...@@ -256,7 +256,7 @@ static double do_memcpy_gettimeofday(const struct routine *r, size_t size) ...@@ -256,7 +256,7 @@ static double do_memcpy_gettimeofday(const struct routine *r, size_t size)
free(src); free(src);
free(dst); free(dst);
return (double)(((double)size * iterations) / timeval2double(&tv_diff)); return (double)(((double)size * nr_loops) / timeval2double(&tv_diff));
} }
struct routine memcpy_routines[] = { struct routine memcpy_routines[] = {
...@@ -313,7 +313,7 @@ static u64 do_memset_cycles(const struct routine *r, size_t size) ...@@ -313,7 +313,7 @@ static u64 do_memset_cycles(const struct routine *r, size_t size)
fn(dst, -1, size); fn(dst, -1, size);
cycle_start = get_cycles(); cycle_start = get_cycles();
for (i = 0; i < iterations; ++i) for (i = 0; i < nr_loops; ++i)
fn(dst, i, size); fn(dst, i, size);
cycle_end = get_cycles(); cycle_end = get_cycles();
...@@ -337,14 +337,14 @@ static double do_memset_gettimeofday(const struct routine *r, size_t size) ...@@ -337,14 +337,14 @@ static double do_memset_gettimeofday(const struct routine *r, size_t size)
fn(dst, -1, size); fn(dst, -1, size);
BUG_ON(gettimeofday(&tv_start, NULL)); BUG_ON(gettimeofday(&tv_start, NULL));
for (i = 0; i < iterations; ++i) for (i = 0; i < nr_loops; ++i)
fn(dst, i, size); fn(dst, i, size);
BUG_ON(gettimeofday(&tv_end, NULL)); BUG_ON(gettimeofday(&tv_end, NULL));
timersub(&tv_end, &tv_start, &tv_diff); timersub(&tv_end, &tv_start, &tv_diff);
free(dst); free(dst);
return (double)(((double)size * iterations) / timeval2double(&tv_diff)); return (double)(((double)size * nr_loops) / timeval2double(&tv_diff));
} }
static const char * const bench_mem_memset_usage[] = { static const char * const bench_mem_memset_usage[] = {
......
...@@ -164,8 +164,8 @@ static const struct option options[] = { ...@@ -164,8 +164,8 @@ static const struct option options[] = {
OPT_STRING('L', "mb_proc_locked", &p0.mb_proc_locked_str,"MB", "process serialized/locked memory access (MBs), <= process_memory"), OPT_STRING('L', "mb_proc_locked", &p0.mb_proc_locked_str,"MB", "process serialized/locked memory access (MBs), <= process_memory"),
OPT_STRING('T', "mb_thread" , &p0.mb_thread_str, "MB", "thread memory (MBs)"), OPT_STRING('T', "mb_thread" , &p0.mb_thread_str, "MB", "thread memory (MBs)"),
OPT_UINTEGER('l', "nr_loops" , &p0.nr_loops, "max number of loops to run"), OPT_UINTEGER('l', "nr_loops" , &p0.nr_loops, "max number of loops to run (default: unlimited)"),
OPT_UINTEGER('s', "nr_secs" , &p0.nr_secs, "max number of seconds to run"), OPT_UINTEGER('s', "nr_secs" , &p0.nr_secs, "max number of seconds to run (default: 5 secs)"),
OPT_UINTEGER('u', "usleep" , &p0.sleep_usecs, "usecs to sleep per loop iteration"), OPT_UINTEGER('u', "usleep" , &p0.sleep_usecs, "usecs to sleep per loop iteration"),
OPT_BOOLEAN('R', "data_reads" , &p0.data_reads, "access the data via writes (can be mixed with -W)"), OPT_BOOLEAN('R', "data_reads" , &p0.data_reads, "access the data via writes (can be mixed with -W)"),
......
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
#define DATASIZE 100 #define DATASIZE 100
static bool use_pipes = false; static bool use_pipes = false;
static unsigned int loops = 100; static unsigned int nr_loops = 100;
static bool thread_mode = false; static bool thread_mode = false;
static unsigned int num_groups = 10; static unsigned int num_groups = 10;
...@@ -79,7 +79,7 @@ static void ready(int ready_out, int wakefd) ...@@ -79,7 +79,7 @@ static void ready(int ready_out, int wakefd)
err(EXIT_FAILURE, "poll"); err(EXIT_FAILURE, "poll");
} }
/* Sender sprays loops messages down each file descriptor */ /* Sender sprays nr_loops messages down each file descriptor */
static void *sender(struct sender_context *ctx) static void *sender(struct sender_context *ctx)
{ {
char data[DATASIZE]; char data[DATASIZE];
...@@ -88,7 +88,7 @@ static void *sender(struct sender_context *ctx) ...@@ -88,7 +88,7 @@ static void *sender(struct sender_context *ctx)
ready(ctx->ready_out, ctx->wakefd); ready(ctx->ready_out, ctx->wakefd);
/* Now pump to every receiver. */ /* Now pump to every receiver. */
for (i = 0; i < loops; i++) { for (i = 0; i < nr_loops; i++) {
for (j = 0; j < ctx->num_fds; j++) { for (j = 0; j < ctx->num_fds; j++) {
int ret, done = 0; int ret, done = 0;
...@@ -213,7 +213,7 @@ static unsigned int group(pthread_t *pth, ...@@ -213,7 +213,7 @@ static unsigned int group(pthread_t *pth,
/* Create the pipe between client and server */ /* Create the pipe between client and server */
fdpair(fds); fdpair(fds);
ctx->num_packets = num_fds * loops; ctx->num_packets = num_fds * nr_loops;
ctx->in_fds[0] = fds[0]; ctx->in_fds[0] = fds[0];
ctx->in_fds[1] = fds[1]; ctx->in_fds[1] = fds[1];
ctx->ready_out = ready_out; ctx->ready_out = ready_out;
...@@ -250,7 +250,7 @@ static const struct option options[] = { ...@@ -250,7 +250,7 @@ static const struct option options[] = {
OPT_BOOLEAN('t', "thread", &thread_mode, OPT_BOOLEAN('t', "thread", &thread_mode,
"Be multi thread instead of multi process"), "Be multi thread instead of multi process"),
OPT_UINTEGER('g', "group", &num_groups, "Specify number of groups"), OPT_UINTEGER('g', "group", &num_groups, "Specify number of groups"),
OPT_UINTEGER('l', "loop", &loops, "Specify number of loops"), OPT_UINTEGER('l', "nr_loops", &nr_loops, "Specify the number of loops to run (default: 100)"),
OPT_END() OPT_END()
}; };
......
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