3

我想用 kthread_create()/kthread_bind() 为每个 CPU 启动一个内核线程。但是,我一生都无法弄清楚如何查询可用 CPU 的数量。我确实找到了 CPU_SET 手册页,但这也无济于事。

有什么想法吗?

4

5 回答 5

5

您可以使用 num_online_cpus() 来获取可用 cpus 的数量。如果系统是使用与系统中的 cpu 数量不同的 maxcpus 设置引导的,则这可能与 nr_cpu_ids 之类的不同。

于 2014-04-04T12:10:40.060 回答
3

请参阅以下链接,cpuinfo.cproc.c,可能会对您有所帮助。并且在第 143 行,可以使用两个函数来遍历 cpus,cpumask_first,cpumask_next。我认为,通过尝试和错误,您可以找到解决方案。

于 2012-11-03T18:32:45.360 回答
0

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

x86info | grep Found
Found 2 CPUs

另一种方法是:

grep processor /proc/cpuinfo | wc -l
2

是你要找的吗?

于 2012-11-03T17:49:04.120 回答
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
于 2012-11-03T18:01:00.740 回答
0
$ nproc --all
4

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

于 2012-11-03T18:08:58.843 回答