mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-12-29 17:25:38 +00:00
tools/perf: Fix perf bench futex to enable the run when some CPU's are offline
Perf bench futex fails as below when attempted to run on on a powerpc system: ./perf bench futex all Running futex/hash benchmark... Run summary [PID 626307]: 80 threads, each operating on 1024 [private] futexes for 10 secs. perf: pthread_create: No such file or directory In the setup where this perf bench was ran, difference was that partition had 640 CPU's, but not all CPUs were online. 80 CPUs were online. While blocking the threads with futex_wait, code sets the affinity using cpumask. The cpumask size used is 80 which is picked from "nrcpus = perf_cpu_map__nr(cpu)". Here the benchmark reports fail while setting affinity for cpu number which is greater than 80 or higher, because it attempts to set a bit position which is not allocated on the cpumask. Fix this by changing the size of cpumask to number of possible cpus and not the number of online cpus. Signed-off-by: Athira Rajeev <atrajeev@linux.vnet.ibm.com> Reviewed-by: Ian Rogers <irogers@google.com> Tested-by: Disha Goel <disgoel@linux.ibm.com> Cc: akanksha@linux.ibm.com Cc: kjain@linux.ibm.com Cc: maddy@linux.ibm.com Cc: linuxppc-dev@lists.ozlabs.org Signed-off-by: Namhyung Kim <namhyung@kernel.org> Link: https://lore.kernel.org/r/20240607044354.82225-1-atrajeev@linux.vnet.ibm.com
This commit is contained in:
parent
6c1785cd75
commit
1833735867
@ -174,7 +174,7 @@ int bench_futex_hash(int argc, const char **argv)
|
||||
pthread_attr_init(&thread_attr);
|
||||
gettimeofday(&bench__start, NULL);
|
||||
|
||||
nrcpus = perf_cpu_map__nr(cpu);
|
||||
nrcpus = cpu__max_cpu().cpu;
|
||||
cpuset = CPU_ALLOC(nrcpus);
|
||||
BUG_ON(!cpuset);
|
||||
size = CPU_ALLOC_SIZE(nrcpus);
|
||||
|
@ -122,7 +122,7 @@ static void create_threads(struct worker *w, struct perf_cpu_map *cpu)
|
||||
{
|
||||
cpu_set_t *cpuset;
|
||||
unsigned int i;
|
||||
int nrcpus = perf_cpu_map__nr(cpu);
|
||||
int nrcpus = cpu__max_cpu().cpu;
|
||||
size_t size;
|
||||
|
||||
threads_starting = params.nthreads;
|
||||
|
@ -125,7 +125,7 @@ static void block_threads(pthread_t *w, struct perf_cpu_map *cpu)
|
||||
{
|
||||
cpu_set_t *cpuset;
|
||||
unsigned int i;
|
||||
int nrcpus = perf_cpu_map__nr(cpu);
|
||||
int nrcpus = cpu__max_cpu().cpu;
|
||||
size_t size;
|
||||
|
||||
threads_starting = params.nthreads;
|
||||
|
@ -149,7 +149,7 @@ static void block_threads(pthread_t *w, struct perf_cpu_map *cpu)
|
||||
{
|
||||
cpu_set_t *cpuset;
|
||||
unsigned int i;
|
||||
int nrcpus = perf_cpu_map__nr(cpu);
|
||||
int nrcpus = cpu__max_cpu().cpu;
|
||||
size_t size;
|
||||
|
||||
threads_starting = params.nthreads;
|
||||
|
@ -100,7 +100,7 @@ static void block_threads(pthread_t *w, struct perf_cpu_map *cpu)
|
||||
cpu_set_t *cpuset;
|
||||
unsigned int i;
|
||||
size_t size;
|
||||
int nrcpus = perf_cpu_map__nr(cpu);
|
||||
int nrcpus = cpu__max_cpu().cpu;
|
||||
threads_starting = params.nthreads;
|
||||
|
||||
cpuset = CPU_ALLOC(nrcpus);
|
||||
|
Loading…
Reference in New Issue
Block a user