xref: /dpdk/buildtools/get-numa-count.py (revision 9d4efc5cc6f90bcbd93a6fed904c8cbca9f5c447)
18ef09fdcSJuraj Linkeš#!/usr/bin/env python3
28ef09fdcSJuraj Linkeš# SPDX-License-Identifier: BSD-3-Clause
38ef09fdcSJuraj Linkeš# Copyright (c) 2021 PANTHEON.tech s.r.o.
48ef09fdcSJuraj Linkeš
58ef09fdcSJuraj Linkešimport ctypes
68ef09fdcSJuraj Linkešimport glob
78ef09fdcSJuraj Linkešimport os
88ef09fdcSJuraj Linkešimport subprocess
9*9d4efc5cSPeng Zhangimport re
108ef09fdcSJuraj Linkeš
118ef09fdcSJuraj Linkešif os.name == 'posix':
128ef09fdcSJuraj Linkeš    if os.path.isdir('/sys/devices/system/node'):
138ef09fdcSJuraj Linkeš        numa_nodes = glob.glob('/sys/devices/system/node/node*')
14*9d4efc5cSPeng Zhang        numa_nodes.sort(key=lambda l: int(re.findall('\d+', l)[0]))
158ef09fdcSJuraj Linkeš        print(int(os.path.basename(numa_nodes[-1])[4:]) + 1)
168ef09fdcSJuraj Linkeš    else:
178ef09fdcSJuraj Linkeš        subprocess.run(['sysctl', '-n', 'vm.ndomains'], check=False)
188ef09fdcSJuraj Linkeš
198ef09fdcSJuraj Linkešelif os.name == 'nt':
208ef09fdcSJuraj Linkeš    libkernel32 = ctypes.windll.kernel32
218ef09fdcSJuraj Linkeš
228ef09fdcSJuraj Linkeš    numa_count = ctypes.c_ulong()
238ef09fdcSJuraj Linkeš
248ef09fdcSJuraj Linkeš    libkernel32.GetNumaHighestNodeNumber(ctypes.pointer(numa_count))
258ef09fdcSJuraj Linkeš    print(numa_count.value + 1)
26