你如何获得Linux内核模块中可用的CPU集?

我想用kthread_create()/ kthread_bind()为每个CPU启动一个内核线程。 但是,我不能为我的生活弄清楚如何查询可用的CPU数量。 我find了CPU_SET手册页,但是也没有帮助。

有什么想法吗?

看到下面的链接, cpuinfo.c , proc.c ,可能会帮助你。 在143行,你可以使用两个函数遍历cpus,cpumask_first,cpumask_next。 我想,通过尝试和错误,你可以找到解决方案。

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

您可以使用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 

– 所有打印的处理器数量