perf bench numa: fix few minor issues
cover perf bench numa: fix few minor issues
Hi all,
Please, find couple of fixes to the tool. Note, I did not bother fixing leaked memory allocated with numa_allocate_cpumask().
Alexander Gordeev (3):
perf bench numa: fix incorrect NUMA toplogy assumption perf bench numa: fix benchmark names
perf bench numa: fix wrong benchmark configuration
tools/perf/bench/numa.c | 72 ++++++++++++++++++++++++------------------------- 1 file changed, 35 insertions(+), 37 deletions(-)
Signature · 1 line
1.8.3.1
PATCH 1/3 perf bench numa: fix incorrect NUMA toplogy assumption
The current code assumes that CPUs are evenly spread among NUMA nodes. That is generally incorrect and leads to failure on systems that have different NUMA topology.
--- tools/perf/bench/numa.c | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-)
tools/perf/bench/numa.c +13 -14
@@ -247,12 +247,13 @@ static int is_node_present(int node)*/ static bool node_has_cpus (int node) { -struct bitmask *cpu =numa_allocate_cpumask (); +struct bitmask *cpumask =numa_allocate_cpumask ();unsigned int i; -if (cpu && !numa_node_to_cpus (node, cpu)) { -for (i =0 ; i < cpu->size; i++) { -if (numa_bitmask_isbitset (cpu, i)) +BUG_ON (!cpumask); +if (!numa_node_to_cpus (node, cpumask)) { +for (i =0 ; i < cpumask->size; i++) { +if (numa_bitmask_isbitset (cpumask, i))return true; } }
@@ -288,14 +289,10 @@ static cpu_set_t bind_to_cpu(int target_cpu)static cpu_set_t bind_to_node (int target_node) { -int cpus_per_node = g->p.nr_cpus /nr_numa_nodes ();cpu_set_t orig_mask, mask;int cpu;int ret; -BUG_ON (cpus_per_node *nr_numa_nodes () != g->p.nr_cpus); -BUG_ON (!cpus_per_node); - ret =sched_getaffinity (0 ,sizeof (orig_mask), &orig_mask);BUG_ON (ret);
@@ -305,13 +302,15 @@ static cpu_set_t bind_to_node(int target_node)for (cpu =0 ; cpu < g->p.nr_cpus; cpu++)CPU_SET (cpu, &mask); }else { -int cpu_start = (target_node +0 ) * cpus_per_node; -int cpu_stop = (target_node +1 ) * cpus_per_node; - -BUG_ON (cpu_stop > g->p.nr_cpus); +struct bitmask *cpumask =numa_allocate_cpumask (); -for (cpu = cpu_start; cpu < cpu_stop; cpu++) -CPU_SET (cpu, &mask); +BUG_ON (!cpumask); +if (!numa_node_to_cpus (target_node, cpumask)) { +for (cpu =0 ; cpu < (int )cpumask->size; cpu++) { +if (numa_bitmask_isbitset (cpumask, cpu)) +CPU_SET (cpu, &mask); + } + } } ret =sched_setaffinity (0 ,sizeof (mask), &mask);
Signature · 1 line
1.8.3.1
PATCH 2/3 perf bench numa: fix benchmark names
In reply to Alexander GordeevSeveral benchmarks have names that do not correspond to their configuration. Fix that and also some whitespace inconsistencies.
--- tools/perf/bench/numa.c | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-)
tools/perf/bench/numa.c +21 -21
@@ -812,12 +812,12 @@ static u64 do_work(u8 *__data, long bytes, int nr, int nr_max, int loop, u64 val } } }else if (!g->p.data_backwards || (nr + loop) &1 ) { +/* Process data forwards: */ d0 = data + off; d = data + off +1 ; d1 = data + words; -/* Process data forwards: */ for (;;) {if (unlikely (d >= d1)) d = data;
@@ -835,7 +835,6 @@ static u64 do_work(u8 *__data, long bytes, int nr, int nr_max, int loop, u64 val d = data + off -1 ; d1 = data + words; -/* Process data forwards: */ for (;;) {if (unlikely (d < data)) d = data + words-1 ;
@@ -1732,12 +1731,12 @@ static int run_bench_numa(const char *name, const char **argv)*/ static const char *tests[][MAX_ARGS ] = {/* Basic single-stream NUMA bandwidth measurements: */ - {"RAM-bw-local," ,"mem" ,"-p" ,"1" ,"-t" ,"1" ,"-P" ,"1024" , + {"RAM-bw-local," ,"mem" ,"-p" ,"1" ,"-t" ,"1" ,"-P" ,"1024" ,"-C" ,"0" ,"-M" ,"0" ,OPT_BW_RAM }, {"RAM-bw-local-NOTHP," ,"mem" ,"-p" ,"1" ,"-t" ,"1" ,"-P" ,"1024" ,"-C" ,"0" ,"-M" ,"0" ,OPT_BW_RAM_NOTHP }, - {"RAM-bw-remote," ,"mem" ,"-p" ,"1" ,"-t" ,"1" ,"-P" ,"1024" , + {"RAM-bw-remote," ,"mem" ,"-p" ,"1" ,"-t" ,"1" ,"-P" ,"1024" ,"-C" ,"0" ,"-M" ,"1" ,OPT_BW_RAM },/* 2-stream NUMA bandwidth measurements: */
@@ -1779,27 +1778,28 @@ static int run_bench_numa(const char *name, const char **argv) "mem", "-p", "8", "-t", "1", "-P", " 512", OPT_BW_NOTHP }, { "16x1-bw-process,", "mem", "-p", "16", "-t", "1", "-P", "256", OPT_BW }, - { " 4x1-bw-thread,", "mem", "-p", "1", "-t", "4", "-T", "256", OPT_BW }, - { " 8x1-bw-thread,", "mem", "-p", "1", "-t", "8", "-T", "256", OPT_BW }, - { "16x1-bw-thread,", "mem", "-p", "1", "-t", "16", "-T", "128", OPT_BW }, - { "32x1-bw-thread,", "mem", "-p", "1", "-t", "32", "-T", "64", OPT_BW }, + { " 1x4-bw-thread,", "mem", "-p", "1", "-t", "4", "-T", "256", OPT_BW }, + { " 1x8-bw-thread,", "mem", "-p", "1", "-t", "8", "-T", "256", OPT_BW }, + { "1x16-bw-thread,", "mem", "-p", "1", "-t", "16", "-T", "128", OPT_BW }, + { "1x32-bw-thread,", "mem", "-p", "1", "-t", "32", "-T", "64", OPT_BW }, - { " 2x3-bw-thread,", "mem", "-p", "2", "-t", "3", "-P", "512", OPT_BW }, - { " 4x4-bw-thread,", "mem", "-p", "4", "-t", "4", "-P", "512", OPT_BW }, - { " 4x6-bw-thread,", "mem", "-p", "4", "-t", "6", "-P", "512", OPT_BW }, - { " 4x8-bw-thread,", "mem", "-p", "4", "-t", "8", "-P", "512", OPT_BW }, - { " 4x8-bw-thread-NOTHP,", + { " 2x3-bw-process,", "mem", "-p", "2", "-t", "3", "-P", "512", OPT_BW }, + { " 4x4-bw-process,", "mem", "-p", "4", "-t", "4", "-P", "512", OPT_BW }, + { " 4x6-bw-process,", "mem", "-p", "4", "-t", "6", "-P", "512", OPT_BW }, + { " 4x8-bw-process,", "mem", "-p", "4", "-t", "8", "-P", "512", OPT_BW }, + { " 4x8-bw-process-NOTHP,", "mem", "-p", "4", "-t", "8", "-P", "512", OPT_BW_NOTHP }, - { " 3x3-bw-thread,", "mem", "-p", "3", "-t", "3", "-P", "512", OPT_BW }, - { " 5x5-bw-thread,", "mem", "-p", "5", "-t", "5", "-P", "512", OPT_BW }, + { " 3x3-bw-process,", "mem", "-p", "3", "-t", "3", "-P", "512", OPT_BW }, + { " 5x5-bw-process,", "mem", "-p", "5", "-t", "5", "-P", "512", OPT_BW }, - { "2x16-bw-thread,", "mem", "-p", "2", "-t", "16", "-P", "512", OPT_BW }, - { "1x32-bw-thread,", "mem", "-p", "1", "-t", "32", "-P", "2048", OPT_BW }, + { "2x16-bw-process,", "mem", "-p", "2", "-t", "16", "-P", "512", OPT_BW }, + { "1x32-bw-process,", "mem", "-p", "1", "-t", "32", "-P", "2048", OPT_BW }, - { "numa02-bw,", "mem", "-p", "1", "-t", "32", "-T", "32", OPT_BW }, - { "numa02-bw-NOTHP,", "mem", "-p", "1", "-t", "32", "-T", "32", OPT_BW_NOTHP }, - { "numa01-bw-thread,", "mem", "-p", "2", "-t", "16", "-T", "192", OPT_BW }, - { "numa01-bw-thread-NOTHP,", + { "1x32-bw-thread,", "mem", "-p", "1", "-t", "32", "-T", "32", OPT_BW }, + { "1x32-bw-thread-NOTHP,", + "mem", "-p", "1", "-t", "32", "-T", "32", OPT_BW_NOTHP }, + { "2x16-bw-thread,", "mem", "-p", "2", "-t", "16", "-T", "192", OPT_BW }, + { "2x16-bw-thread-NOTHP,", "mem", "-p", "2", "-t", "16", "-T", "192", OPT_BW_NOTHP }, };
Signature · 1 line
1.8.3.1
PATCH 3/3 perf bench numa: fix wrong benchmark configuration
In reply to Alexander GordeevThis update fixes a wrong number of processes for one benchmark and consolidates two others in a unified way.
--- tools/perf/bench/numa.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-)
tools/perf/bench/numa.c +3 -4
@@ -1753,7 +1753,7 @@ static int run_bench_numa(const char *name, const char **argv) { " 1x3-convergence,", "mem", "-p", "1", "-t", "3", "-P", "512", OPT_CONV }, { " 1x4-convergence,", "mem", "-p", "1", "-t", "4", "-P", "512", OPT_CONV }, { " 1x6-convergence,", "mem", "-p", "1", "-t", "6", "-P", "1020", OPT_CONV }, - { " 2x3-convergence,", "mem", "-p", "3", "-t", "3", "-P", "1020", OPT_CONV }, + { " 2x3-convergence,", "mem", "-p", "2", "-t", "3", "-P", "1020", OPT_CONV }, { " 3x3-convergence,", "mem", "-p", "3", "-t", "3", "-P", "1020", OPT_CONV }, { " 4x4-convergence,", "mem", "-p", "4", "-t", "4", "-P", "512", OPT_CONV }, { " 4x4-convergence-NOTHP,",
@@ -1782,6 +1782,8 @@ static int run_bench_numa(const char *name, const char **argv) { " 1x8-bw-thread,", "mem", "-p", "1", "-t", "8", "-T", "256", OPT_BW }, { "1x16-bw-thread,", "mem", "-p", "1", "-t", "16", "-T", "128", OPT_BW }, { "1x32-bw-thread,", "mem", "-p", "1", "-t", "32", "-T", "64", OPT_BW }, + { "1x32-bw-thread-NOTHP,", + "mem", "-p", "1", "-t", "32", "-T", "64", OPT_BW_NOTHP }, { " 2x3-bw-process,", "mem", "-p", "2", "-t", "3", "-P", "512", OPT_BW }, { " 4x4-bw-process,", "mem", "-p", "4", "-t", "4", "-P", "512", OPT_BW },
@@ -1795,9 +1797,6 @@ static int run_bench_numa(const char *name, const char **argv) { "2x16-bw-process,", "mem", "-p", "2", "-t", "16", "-P", "512", OPT_BW }, { "1x32-bw-process,", "mem", "-p", "1", "-t", "32", "-P", "2048", OPT_BW }, - { "1x32-bw-thread,", "mem", "-p", "1", "-t", "32", "-T", "32", OPT_BW }, - { "1x32-bw-thread-NOTHP,", - "mem", "-p", "1", "-t", "32", "-T", "32", OPT_BW_NOTHP }, { "2x16-bw-thread,", "mem", "-p", "2", "-t", "16", "-T", "192", OPT_BW }, { "2x16-bw-thread-NOTHP,", "mem", "-p", "2", "-t", "16", "-T", "192", OPT_BW_NOTHP },
Signature · 1 line
1.8.3.1