• Athira Rajeev's avatar
    perf bench numa: Fix the condition checks for max number of NUMA nodes · 394e4306
    Athira Rajeev authored
    In systems having higher node numbers available like node
    255, perf numa bench will fail with SIGABORT.
    
      <<>>
      perf: bench/numa.c:1416: init: Assertion `!(g->p.nr_nodes > 64 || g->p.nr_nodes < 0)' failed.
      Aborted (core dumped)
      <<>>
    
    Snippet from 'numactl -H' below on a powerpc system where the highest
    node number available is 255:
    
      available: 6 nodes (0,8,252-255)
      node 0 cpus: <cpu-list>
      node 0 size: 519587 MB
      node 0 free: 516659 MB
      node 8 cpus: <cpu-list>
      node 8 size: 523607 MB
      node 8 free: 486757 MB
      node 252 cpus:
      node 252 size: 0 MB
      node 252 free: 0 MB
      node 253 cpus:
      node 253 size: 0 MB
      node 253 free: 0 MB
      node 254 cpus:
      node 254 size: 0 MB
      node 254 free: 0 MB
      node 255 cpus:
      node 255 size: 0 MB
      node 255 free: 0 MB
      node distances:
      node   0   8  252  253  254  255
    
    Note: <cpu-list> expands to actual cpu list in the original output.
    These nodes 252-255 are to represent the memory on GPUs and are valid
    nodes.
    
    The perf numa bench init code has a condition check to see if the number
    of NUMA nodes (nr_nodes) exceeds MAX_NR_NODES. The value of MAX_NR_NODES
    defined in perf code is 64. And the 'nr_nodes' is the value from
    numa_max_node() which represents the highest node number available in the
    system. In some systems where we could have NUMA node 255, this condition
    check fails and results in SIGABORT.
    
    The numa benchmark uses static value of MAX_NR_NODES in the code to
    represent size of two NUMA node arrays and node bitmask used for setting
    memory policy. Patch adds a fix to dynamically allocate size for the
    two arrays and bitmask value based on the node numbers available in the
    system. With the fix, perf numa benchmark will work with node configuration
    on any system and thus removes the static MAX_NR_NODES value.
    Signed-off-by: default avatarAthira Jajeev <atrajeev@linux.vnet.ibm.com>
    Reviewed-by: default avatarSrikar Dronamraju <srikar@linux.vnet.ibm.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Kajol Jain <kjain@linux.ibm.com>
    Cc: Kan Liang <kan.liang@linux.intel.com>
    Cc: Madhavan Srinivasan <maddy@linux.ibm.com>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Ravi Bangoria <ravi.bangoria@linux.ibm.com>
    Cc: linuxppc-dev@lists.ozlabs.org
    Link: http://lore.kernel.org/lkml/1614271802-1503-1-git-send-email-atrajeev@linux.vnet.ibm.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    394e4306
numa.c 44.8 KB