Merge branch 'perf/urgent' into perf/core, to resolve conflicts
Conflicts: tools/perf/builtin-kmem.c Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
@@ -132,6 +132,9 @@ int bench_futex_requeue(int argc, const char **argv,
|
||||
if (!fshared)
|
||||
futex_flag = FUTEX_PRIVATE_FLAG;
|
||||
|
||||
if (nrequeue > nthreads)
|
||||
nrequeue = nthreads;
|
||||
|
||||
printf("Run summary [PID %d]: Requeuing %d threads (from [%s] %p to %p), "
|
||||
"%d at a time.\n\n", getpid(), nthreads,
|
||||
fshared ? "shared":"private", &futex1, &futex2, nrequeue);
|
||||
@@ -161,20 +164,18 @@ int bench_futex_requeue(int argc, const char **argv,
|
||||
|
||||
/* Ok, all threads are patiently blocked, start requeueing */
|
||||
gettimeofday(&start, NULL);
|
||||
for (nrequeued = 0; nrequeued < nthreads; nrequeued += nrequeue) {
|
||||
while (nrequeued < nthreads) {
|
||||
/*
|
||||
* Do not wakeup any tasks blocked on futex1, allowing
|
||||
* us to really measure futex_wait functionality.
|
||||
*/
|
||||
futex_cmp_requeue(&futex1, 0, &futex2, 0,
|
||||
nrequeue, futex_flag);
|
||||
nrequeued += futex_cmp_requeue(&futex1, 0, &futex2, 0,
|
||||
nrequeue, futex_flag);
|
||||
}
|
||||
|
||||
gettimeofday(&end, NULL);
|
||||
timersub(&end, &start, &runtime);
|
||||
|
||||
if (nrequeued > nthreads)
|
||||
nrequeued = nthreads;
|
||||
|
||||
update_stats(&requeued_stats, nrequeued);
|
||||
update_stats(&requeuetime_stats, runtime.tv_usec);
|
||||
|
||||
@@ -184,7 +185,7 @@ int bench_futex_requeue(int argc, const char **argv,
|
||||
}
|
||||
|
||||
/* everybody should be blocked on futex2, wake'em up */
|
||||
nrequeued = futex_wake(&futex2, nthreads, futex_flag);
|
||||
nrequeued = futex_wake(&futex2, nrequeued, futex_flag);
|
||||
if (nthreads != nrequeued)
|
||||
warnx("couldn't wakeup all tasks (%d/%d)", nrequeued, nthreads);
|
||||
|
||||
|
@@ -184,7 +184,7 @@ static const struct option options[] = {
|
||||
OPT_INTEGER('H', "thp" , &p0.thp, "MADV_NOHUGEPAGE < 0 < MADV_HUGEPAGE"),
|
||||
OPT_BOOLEAN('c', "show_convergence", &p0.show_convergence, "show convergence details"),
|
||||
OPT_BOOLEAN('m', "measure_convergence", &p0.measure_convergence, "measure convergence latency"),
|
||||
OPT_BOOLEAN('q', "quiet" , &p0.show_quiet, "bzero the initial allocations"),
|
||||
OPT_BOOLEAN('q', "quiet" , &p0.show_quiet, "quiet mode"),
|
||||
OPT_BOOLEAN('S', "serialize-startup", &p0.serialize_startup,"serialize thread startup"),
|
||||
|
||||
/* Special option string parsing callbacks: */
|
||||
@@ -832,6 +832,9 @@ static int count_process_nodes(int process_nr)
|
||||
td = g->threads + task_nr;
|
||||
|
||||
node = numa_node_of_cpu(td->curr_cpu);
|
||||
if (node < 0) /* curr_cpu was likely still -1 */
|
||||
return 0;
|
||||
|
||||
node_present[node] = 1;
|
||||
}
|
||||
|
||||
@@ -886,6 +889,11 @@ static void calc_convergence_compression(int *strong)
|
||||
for (p = 0; p < g->p.nr_proc; p++) {
|
||||
unsigned int nodes = count_process_nodes(p);
|
||||
|
||||
if (!nodes) {
|
||||
*strong = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
nodes_min = min(nodes, nodes_min);
|
||||
nodes_max = max(nodes, nodes_max);
|
||||
}
|
||||
@@ -1407,7 +1415,7 @@ static void print_res(const char *name, double val,
|
||||
if (!name)
|
||||
name = "main,";
|
||||
|
||||
if (g->p.show_quiet)
|
||||
if (!g->p.show_quiet)
|
||||
printf(" %-30s %15.3f, %-15s %s\n", name, val, txt_unit, txt_short);
|
||||
else
|
||||
printf(" %14.3f %s\n", val, txt_long);
|
||||
|
Reference in New Issue
Block a user