我想用kthread_create()/ kthread_bind()为每个CPU启动一个内核线程。但是,我不能为我的生活弄清楚如何查询可用的CPU数量。我确实找到了CPU_SET手册页,但这也无济于事。
有什么想法吗?
答案 0 :(得分:5)
您可以使用num_online_cpus()来获取可用的cpus数。如果系统是使用与系统中cpus数量不同的maxcpus设置启动的,那么这可能与nr_cpu_ids之类的不同。
答案 1 :(得分:3)
请参阅以下链接,cpuinfo.c,proc.c,可能会对您有所帮助。和 在第143行,您可以使用两个函数遍历cpus,cpumask_first,cpumask_next。我认为,通过尝试和错误,您可以找到解决方案。
答案 2 :(得分:0)
您可以使用x86info。它不是默认安装的(sudo apt-get install x86info(ubuntu))
x86info | grep Found
Found 2 CPUs
另一种方式是:
grep processor /proc/cpuinfo | wc -l
2
你在寻找吗?
答案 3 :(得分:0)
如果你使用的是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
答案 4 :(得分:0)
$ nproc --all
4
- 全部打印已安装处理器的数量