为了获得完整的图像,您需要查看每个核心的线程数,每个套接字的核心数和sockets。如果将这些数字相乘,您将获得系统上的CPU数量。
CPU =每个内核的线程数X每个插槽的X内核数
CPU是您在运行时看到的htop
(这些不等同于物理CPU)。
这是台式机的示例:
$ lscpu | grep -E '^Thread|^Core|^Socket|^CPU\('
CPU(s): 8
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 1
和一台服务器:
$ lscpu | grep -E '^Thread|^Core|^Socket|^CPU\('
CPU(s): 32
Thread(s) per core: 2
Core(s) per socket: 8
Socket(s): 2
的输出nproc
对应于中的CPU计数lscpu
。对于上面的台式机,这应与以下命令报告的8个CPU相匹配lscpu
:
$ nproc --all
8
的输出/proc/cpuinfo
应与此信息匹配,例如,在上面的桌面系统上,我们可以看到有8个处理器(CPU)和4个核心(核心ID 0-3):
$ grep -E 'processor|core id' /proc/cpuinfo
processor : 0
core id : 0
processor : 1
core id : 0
processor : 2
core id : 1
processor : 3
core id : 1
processor : 4
core id : 2
processor : 5
core id : 2
processor : 6
core id : 3
processor : 7
core id : 3
该cpu cores
所报告的/proc/cpuinfo
对应于Core(s) per socket
所报告lscpu
。对于上面的台式机,这应该与lscpu报告的每个插槽的4个核匹配:
$ grep -m 1 'cpu cores' /proc/cpuinfo
cpu cores : 4
为了具体回答您的问题,您可以通过将每个插槽的核心数乘以您拥有的插槽数来知道您拥有多少个核心。
芯数=每个插槽的芯数X插槽
对于上面的示例系统,桌面具有4个核心:
$ echo "Cores = $(( $(lscpu | awk '/^Socket\(s\)/{ print $2 }') * $(lscpu | awk '/^Core\(s\) per socket/{ print $4 }') ))"
Cores = 4
服务器有16:
$ echo "Cores = $(( $(lscpu | awk '/^Socket\(s\)/{ print $2 }') * $(lscpu | awk '/^Core\(s\) per socket/{ print $4 }') ))"
Cores = 16
另一个有用的实用程序是dmidecode
按套接字输出信息。对于上面列出的服务器系统,我们希望每个插槽看到8个核心,每个插槽看到16个线程:
$ sudo dmidecode -t 4 | grep -E 'Socket Designation|Count'
Socket Designation: CPU1
Core Count: 8
Thread Count: 16
Socket Designation: CPU2
Core Count: 8
Thread Count: 16
该lscpu
命令具有许多您可能想检出的有用选项,例如:
$ lscpu --all --extended
$ lscpu --all --parse=CPU,SOCKET,CORE | grep -v '^#'
有关man lscpu
详细信息,请参见。
综上所述:
- 您需要了解套接字,核心和线程
- 您需要注意CPU一词,因为它在不同的上下文中意味着不同的事物