Linux-查看系统CPU个数、核心数、线程数
1.CPU个数(socket的个数)
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
2.每个CPU的核心数
grep 'core id' /proc/cpuinfo | sort -u | wc -l
3.线程数
grep 'processor' /proc/cpuinfo | sort -u | wc -l
所以,CPU总的并发线程数为:
线程数=CPU个数(socket个数) x 核心数/CPU x 线程数/核心(考虑到超线程)
注意,对于分大小核的情况,核心数/CPU,线程数/核心分别计算。/proc/cpuinfo不区分大小核,显示的线程数是总线程。
以12th Gen Intel(R) Core(TM) i5-12600K为例,此款CPU是10核16线程,粗看感觉不对,毕竟16个线程没有办法平均到10个核上。实际上这是一款大小核结构的处理器。分成6个大核和4个小河。6个大核每个核2个线程,四个小核每个核1个线程,所以一共12+4=16线程。下图可以看到,其前12个线程对应的core id是2对1的关系。后面四个线程和CORE ID则是一一对应。
$ cat /proc/cpuinfo |grep "core id"
core id : 0
core id : 0
core id : 4
core id : 4
core id : 8
core id : 8
core id : 12
core id : 12
core id : 16
core id : 16
core id : 20
core id : 20
core id : 28
core id : 29
core id : 30
core id : 31
对于windows来说,通过任务管理器或者设备管理器都可以看到,要注意的是,从设备管理器中看到的CPU列表是CPU线程数,并非核数。
参考资料
4. x86 Topology — The Linux Kernel documentation