如何在Linux内核模块中获得一组可用的CPU



我想使用kthread_create()/kthread_bind()启动每个CPU的一个内核线程。但是,我一生无法弄清楚如何查询可用CPU的数量。我确实找到了CPU_SET人页面,但这也没有帮助。

有什么想法?

您可以使用num_online_cpus()获取可用CPU的数量。如果使用MAXCPUS设置启动系统,则可能与NR_CPU_ID之类的东西有所不同,该设置与系统中的CPU数量不同。

请参阅以下链接,cpuinfo.c,proc.c,可能会为您提供帮助。和在第143行,您可以使用两个功能来遍历CPU,CPUMASK_FIRST,CPUMASK_NEXT。我认为,通过尝试和错误,您可以找到解决方案。

您可以使用x86info。它不是默认安装的(sudo apt-get install x86info(ubuntu))

x86info | grep Found
Found 2 CPUs

另一种方法是:

grep processor /proc/cpuinfo | wc -l
2

您正在寻找吗?

如果您使用的是fedora linux/rhel/centos v6 /debian linux v6 的系统,则可以使用 lscpu

michael@test:~$ lscpu
Architecture:          i686
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0-3
Thread(s) per core:    2
Core(s) per socket:    2
Socket(s):             1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 37
Stepping:              5
CPU MHz:               1199.000
BogoMIPS:              5319.88
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              3072K

尤其是您可能对-p选项感兴趣,该选项可为您提供可分析的输出:

michael@test:~$ lscpu -p
# The following is the parsable format, which can be fed to other
# programs. Each different item in every column has an unique ID
# starting from zero.
# CPU,Core,Socket,Node,,L1d,L1i,L2,L3
0,0,0,,,0,0,0,0
1,0,0,,,0,0,0,0
2,1,0,,,1,1,1,0
3,1,0,,,1,1,1,0
$ nproc --all
4

- 全部打印已安装的处理器的数量

最新更新