aboutsummaryrefslogtreecommitdiff
path: root/tools/perf/bench/futex-hash.c
diff options
context:
space:
mode:
authorIngo Molnar <mingo@kernel.org>2016-10-28 19:37:34 +0200
committerIngo Molnar <mingo@kernel.org>2016-10-28 19:37:34 +0200
commit91a79e5fa696fa626bfbd47f827eaf3eb7d76dc5 (patch)
tree4a9c4582fa25b2d59d0b8a67516d28b0f8da1776 /tools/perf/bench/futex-hash.c
parent76e2d2617d767c445498c4c4b1162eb2201cdd77 (diff)
parent46cb25b1a0ee74bf4a79cfb3081ae3567b2f7135 (diff)
Merge tag 'perf-core-for-mingo-20161028' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core
perf/core improvements and fixes from Arnaldo Carvalho de Melo: New features: - Support matching by topic in 'perf list' (Andi Kleen) User visible: - Apply cpu color only when there was activity in 'perf sched map' (Namhyung Kim) - Always show the task's COMM in 'perf sched map -v' (Namhyung Kim) - Fix hierarchy column counts in the perf hist browser (top, report), avoiding showing nothing after pressing the RIGHT key a number of times (Namhyung Kim) Infrastructure: - Support cascading options in libsubcmd and use it to share common options in 'perf sched' subcommands (Namhyung Kim) - Avoid worker cacheline bouncing in 'perf bench futex' (Davidlohr Bueso) - Sanitize numeric parameters in 'perf bench futex' (Davidlohr Bueso) - Update copies of kernel files (Arnaldo Carvalho de Melo) - Fix scripting (perl, python) setup to avoid leaks (Arnaldo Carvalho de Melo) - Add missing object file to the python binding linkage list (Arnaldo Carvalho de Melo) Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'tools/perf/bench/futex-hash.c')
-rw-r--r--tools/perf/bench/futex-hash.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/tools/perf/bench/futex-hash.c b/tools/perf/bench/futex-hash.c
index d9e5e80bb4d0..bfbb6b5f609c 100644
--- a/tools/perf/bench/futex-hash.c
+++ b/tools/perf/bench/futex-hash.c
@@ -39,15 +39,12 @@ static unsigned int threads_starting;
static struct stats throughput_stats;
static pthread_cond_t thread_parent, thread_worker;
-#define SMP_CACHE_BYTES 256
-#define __cacheline_aligned __attribute__ ((aligned (SMP_CACHE_BYTES)))
-
struct worker {
int tid;
u_int32_t *futex;
pthread_t thread;
unsigned long ops;
-} __cacheline_aligned;
+};
static const struct option options[] = {
OPT_UINTEGER('t', "threads", &nthreads, "Specify amount of threads"),
@@ -66,8 +63,9 @@ static const char * const bench_futex_hash_usage[] = {
static void *workerfn(void *arg)
{
int ret;
- unsigned int i;
struct worker *w = (struct worker *) arg;
+ unsigned int i;
+ unsigned long ops = w->ops; /* avoid cacheline bouncing */
pthread_mutex_lock(&thread_lock);
threads_starting--;
@@ -77,7 +75,7 @@ static void *workerfn(void *arg)
pthread_mutex_unlock(&thread_lock);
do {
- for (i = 0; i < nfutexes; i++, w->ops++) {
+ for (i = 0; i < nfutexes; i++, ops++) {
/*
* We want the futex calls to fail in order to stress
* the hashing of uaddr and not measure other steps,
@@ -91,6 +89,7 @@ static void *workerfn(void *arg)
}
} while (!done);
+ w->ops = ops;
return NULL;
}
@@ -131,6 +130,8 @@ int bench_futex_hash(int argc, const char **argv,
}
ncpus = sysconf(_SC_NPROCESSORS_ONLN);
+ nsecs = futexbench_sanitize_numeric(nsecs);
+ nfutexes = futexbench_sanitize_numeric(nfutexes);
sigfillset(&act.sa_mask);
act.sa_sigaction = toggle_done;
@@ -138,6 +139,8 @@ int bench_futex_hash(int argc, const char **argv,
if (!nthreads) /* default to the number of CPUs */
nthreads = ncpus;
+ else
+ nthreads = futexbench_sanitize_numeric(nthreads);
worker = calloc(nthreads, sizeof(*worker));
if (!worker)