diff options
Diffstat (limited to 'tools/perf/bench')
-rw-r--r-- | tools/perf/bench/mem-memcpy-arch.h | 2 | ||||
-rw-r--r-- | tools/perf/bench/mem-memcpy.c | 2 | ||||
-rw-r--r-- | tools/perf/bench/mem-memset-arch.h | 2 | ||||
-rw-r--r-- | tools/perf/bench/mem-memset.c | 2 | ||||
-rw-r--r-- | tools/perf/bench/numa.c | 38 | ||||
-rw-r--r-- | tools/perf/bench/sched-pipe.c | 115 |
6 files changed, 48 insertions, 113 deletions
diff --git a/tools/perf/bench/mem-memcpy-arch.h b/tools/perf/bench/mem-memcpy-arch.h index 57b4ed8..a72e36c 100644 --- a/tools/perf/bench/mem-memcpy-arch.h +++ b/tools/perf/bench/mem-memcpy-arch.h @@ -1,5 +1,5 @@ -#ifdef HAVE_ARCH_X86_64_SUPPORT +#ifdef ARCH_X86_64 #define MEMCPY_FN(fn, name, desc) \ extern void *fn(void *, const void *, size_t); diff --git a/tools/perf/bench/mem-memcpy.c b/tools/perf/bench/mem-memcpy.c index 5ce71d3..8cdca43 100644 --- a/tools/perf/bench/mem-memcpy.c +++ b/tools/perf/bench/mem-memcpy.c @@ -58,7 +58,7 @@ struct routine routines[] = { { "default", "Default memcpy() provided by glibc", memcpy }, -#ifdef HAVE_ARCH_X86_64_SUPPORT +#ifdef ARCH_X86_64 #define MEMCPY_FN(fn, name, desc) { name, desc, fn }, #include "mem-memcpy-x86-64-asm-def.h" diff --git a/tools/perf/bench/mem-memset-arch.h b/tools/perf/bench/mem-memset-arch.h index 633800c..a040fa7 100644 --- a/tools/perf/bench/mem-memset-arch.h +++ b/tools/perf/bench/mem-memset-arch.h @@ -1,5 +1,5 @@ -#ifdef HAVE_ARCH_X86_64_SUPPORT +#ifdef ARCH_X86_64 #define MEMSET_FN(fn, name, desc) \ extern void *fn(void *, int, size_t); diff --git a/tools/perf/bench/mem-memset.c b/tools/perf/bench/mem-memset.c index 9af79d2..4a2f120 100644 --- a/tools/perf/bench/mem-memset.c +++ b/tools/perf/bench/mem-memset.c @@ -58,7 +58,7 @@ static const struct routine routines[] = { { "default", "Default memset() provided by glibc", memset }, -#ifdef HAVE_ARCH_X86_64_SUPPORT +#ifdef ARCH_X86_64 #define MEMSET_FN(fn, name, desc) { name, desc, fn }, #include "mem-memset-x86-64-asm-def.h" diff --git a/tools/perf/bench/numa.c b/tools/perf/bench/numa.c index d4c83c6..30d1c32 100644 --- a/tools/perf/bench/numa.c +++ b/tools/perf/bench/numa.c @@ -429,14 +429,14 @@ static int parse_cpu_list(const char *arg) return 0; } -static int parse_setup_cpu_list(void) +static void parse_setup_cpu_list(void) { struct thread_data *td; char *str0, *str; int t; if (!g->p.cpu_list_str) - return 0; + return; dprintf("g->p.nr_tasks: %d\n", g->p.nr_tasks); @@ -500,12 +500,8 @@ static int parse_setup_cpu_list(void) dprintf("CPUs: %d_%d-%d#%dx%d\n", bind_cpu_0, bind_len, bind_cpu_1, step, mul); - if (bind_cpu_0 >= g->p.nr_cpus || bind_cpu_1 >= g->p.nr_cpus) { - printf("\nTest not applicable, system has only %d CPUs.\n", g->p.nr_cpus); - return -1; - } - - BUG_ON(bind_cpu_0 < 0 || bind_cpu_1 < 0); + BUG_ON(bind_cpu_0 < 0 || bind_cpu_0 >= g->p.nr_cpus); + BUG_ON(bind_cpu_1 < 0 || bind_cpu_1 >= g->p.nr_cpus); BUG_ON(bind_cpu_0 > bind_cpu_1); for (bind_cpu = bind_cpu_0; bind_cpu <= bind_cpu_1; bind_cpu += step) { @@ -545,7 +541,6 @@ out: printf("# NOTE: %d tasks bound, %d tasks unbound\n", t, g->p.nr_tasks - t); free(str0); - return 0; } static int parse_cpus_opt(const struct option *opt __maybe_unused, @@ -566,14 +561,14 @@ static int parse_node_list(const char *arg) return 0; } -static int parse_setup_node_list(void) +static void parse_setup_node_list(void) { struct thread_data *td; char *str0, *str; int t; if (!g->p.node_list_str) - return 0; + return; dprintf("g->p.nr_tasks: %d\n", g->p.nr_tasks); @@ -624,12 +619,8 @@ static int parse_setup_node_list(void) dprintf("NODEs: %d-%d #%d\n", bind_node_0, bind_node_1, step); - if (bind_node_0 >= g->p.nr_nodes || bind_node_1 >= g->p.nr_nodes) { - printf("\nTest not applicable, system has only %d nodes.\n", g->p.nr_nodes); - return -1; - } - - BUG_ON(bind_node_0 < 0 || bind_node_1 < 0); + BUG_ON(bind_node_0 < 0 || bind_node_0 >= g->p.nr_nodes); + BUG_ON(bind_node_1 < 0 || bind_node_1 >= g->p.nr_nodes); BUG_ON(bind_node_0 > bind_node_1); for (bind_node = bind_node_0; bind_node <= bind_node_1; bind_node += step) { @@ -660,7 +651,6 @@ out: printf("# NOTE: %d tasks mem-bound, %d tasks unbound\n", t, g->p.nr_tasks - t); free(str0); - return 0; } static int parse_nodes_opt(const struct option *opt __maybe_unused, @@ -1120,7 +1110,7 @@ static void *worker_thread(void *__tdata) /* Check whether our max runtime timed out: */ if (g->p.nr_secs) { timersub(&stop, &start0, &diff); - if ((u32)diff.tv_sec >= g->p.nr_secs) { + if (diff.tv_sec >= g->p.nr_secs) { g->stop_work = true; break; } @@ -1167,7 +1157,7 @@ static void *worker_thread(void *__tdata) runtime_ns_max += diff.tv_usec * 1000; if (details >= 0) { - printf(" #%2d / %2d: %14.2lf nsecs/op [val: %016"PRIx64"]\n", + printf(" #%2d / %2d: %14.2lf nsecs/op [val: %016lx]\n", process_nr, thread_nr, runtime_ns_max / bytes_done, val); } fflush(stdout); @@ -1366,8 +1356,8 @@ static int init(void) init_thread_data(); tprintf("#\n"); - if (parse_setup_cpu_list() || parse_setup_node_list()) - return -1; + parse_setup_cpu_list(); + parse_setup_node_list(); tprintf("#\n"); print_summary(); @@ -1610,6 +1600,7 @@ static int run_bench_numa(const char *name, const char **argv) return 0; err: + usage_with_options(numa_usage, options); return -1; } @@ -1710,7 +1701,8 @@ static int bench_all(void) BUG_ON(ret < 0); for (i = 0; i < nr; i++) { - run_bench_numa(tests[i][0], tests[i] + 1); + if (run_bench_numa(tests[i][0], tests[i] + 1)) + return -1; } printf("\n"); diff --git a/tools/perf/bench/sched-pipe.c b/tools/perf/bench/sched-pipe.c index 07a8d76..69cfba8 100644 --- a/tools/perf/bench/sched-pipe.c +++ b/tools/perf/bench/sched-pipe.c @@ -7,7 +7,9 @@ * Based on pipe-test-1m.c by Ingo Molnar <mingo@redhat.com> * http://people.redhat.com/mingo/cfs-scheduler/tools/pipe-test-1m.c * Ported to perf by Hitoshi Mitake <mitake@dcl.info.waseda.ac.jp> + * */ + #include "../perf.h" #include "../util/util.h" #include "../util/parse-options.h" @@ -26,24 +28,12 @@ #include <sys/time.h> #include <sys/types.h> -#include <pthread.h> - -struct thread_data { - int nr; - int pipe_read; - int pipe_write; - pthread_t pthread; -}; - #define LOOPS_DEFAULT 1000000 -static int loops = LOOPS_DEFAULT; - -/* Use processes by default: */ -static bool threaded; +static int loops = LOOPS_DEFAULT; static const struct option options[] = { - OPT_INTEGER('l', "loop", &loops, "Specify number of loops"), - OPT_BOOLEAN('T', "threaded", &threaded, "Specify threads/process based task setup"), + OPT_INTEGER('l', "loop", &loops, + "Specify number of loops"), OPT_END() }; @@ -52,37 +42,13 @@ static const char * const bench_sched_pipe_usage[] = { NULL }; -static void *worker_thread(void *__tdata) -{ - struct thread_data *td = __tdata; - int m = 0, i; - int ret; - - for (i = 0; i < loops; i++) { - if (!td->nr) { - ret = read(td->pipe_read, &m, sizeof(int)); - BUG_ON(ret != sizeof(int)); - ret = write(td->pipe_write, &m, sizeof(int)); - BUG_ON(ret != sizeof(int)); - } else { - ret = write(td->pipe_write, &m, sizeof(int)); - BUG_ON(ret != sizeof(int)); - ret = read(td->pipe_read, &m, sizeof(int)); - BUG_ON(ret != sizeof(int)); - } - } - - return NULL; -} - -int bench_sched_pipe(int argc, const char **argv, const char *prefix __maybe_unused) +int bench_sched_pipe(int argc, const char **argv, + const char *prefix __maybe_unused) { - struct thread_data threads[2], *td; int pipe_1[2], pipe_2[2]; + int m = 0, i; struct timeval start, stop, diff; unsigned long long result_usec = 0; - int nr_threads = 2; - int t; /* * why does "ret" exist? @@ -92,66 +58,43 @@ int bench_sched_pipe(int argc, const char **argv, const char *prefix __maybe_unu int __maybe_unused ret, wait_stat; pid_t pid, retpid __maybe_unused; - argc = parse_options(argc, argv, options, bench_sched_pipe_usage, 0); + argc = parse_options(argc, argv, options, + bench_sched_pipe_usage, 0); BUG_ON(pipe(pipe_1)); BUG_ON(pipe(pipe_2)); - gettimeofday(&start, NULL); - - for (t = 0; t < nr_threads; t++) { - td = threads + t; + pid = fork(); + assert(pid >= 0); - td->nr = t; - - if (t == 0) { - td->pipe_read = pipe_1[0]; - td->pipe_write = pipe_2[1]; - } else { - td->pipe_write = pipe_1[1]; - td->pipe_read = pipe_2[0]; - } - } - - - if (threaded) { - - for (t = 0; t < nr_threads; t++) { - td = threads + t; - - ret = pthread_create(&td->pthread, NULL, worker_thread, td); - BUG_ON(ret); - } - - for (t = 0; t < nr_threads; t++) { - td = threads + t; + gettimeofday(&start, NULL); - ret = pthread_join(td->pthread, NULL); - BUG_ON(ret); + if (!pid) { + for (i = 0; i < loops; i++) { + ret = read(pipe_1[0], &m, sizeof(int)); + ret = write(pipe_2[1], &m, sizeof(int)); } - } else { - pid = fork(); - assert(pid >= 0); - - if (!pid) { - worker_thread(threads + 0); - exit(0); - } else { - worker_thread(threads + 1); + for (i = 0; i < loops; i++) { + ret = write(pipe_1[1], &m, sizeof(int)); + ret = read(pipe_2[0], &m, sizeof(int)); } - - retpid = waitpid(pid, &wait_stat, 0); - assert((retpid == pid) && WIFEXITED(wait_stat)); } gettimeofday(&stop, NULL); timersub(&stop, &start, &diff); + if (pid) { + retpid = waitpid(pid, &wait_stat, 0); + assert((retpid == pid) && WIFEXITED(wait_stat)); + } else { + exit(0); + } + switch (bench_format) { case BENCH_FORMAT_DEFAULT: - printf("# Executed %d pipe operations between two %s\n\n", - loops, threaded ? "threads" : "processes"); + printf("# Executed %d pipe operations between two tasks\n\n", + loops); result_usec = diff.tv_sec * 1000000; result_usec += diff.tv_usec; |