我想用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
– 所有打印的处理器数量