如何知道Linux系统的核心数?

如何知道Linux系统的核心数?

我想知道我的系统有多少个核心,所以我在谷歌中搜索了同样的问题。我得到了一些命令,例如lscpu命令。当我尝试这个命令时,它给出了以下结果:

$ lscpu
Architecture:          x86_64
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:    1
Core(s) per socket:    4
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 23
Stepping:              10
CPU MHz:               1998.000
BogoMIPS:              5302.48
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              2048K
NUMA node0 CPU(s):     0-3

特别是,此输出显示:

  • CPU:4
  • 每个插槽的核心数:4
  • CPU系列:6

其中哪一个表示 Linux 系统的核心?

是否有其他命令可以告诉核心数量,或者我假设它是完全错误的?

答案1

要获得完整的图片,您需要查看数量线程每个核心,核心每个插座和插座。如果将这些数字相乘,您将得到中央处理器在您的系统上。

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相对应。对于上面的台式机,这应该与 lscpu 报告的每个插槽 4 个核心相匹配:Core(s) per socketlscpu

$ 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 这个术语,因为它在不同的上下文中具有不同的含义

答案2

您必须查看插槽和每个插槽的核心数。在这种情况下,您有 1 个物理 CPU(插槽),其中有 4 个核心(每个插槽有多个核心)。

答案3

您可以通过以下方式获取此信息nproc(1)命令

$ nproc --all
12

它不需要 root 权限。

答案4

您还可以使用该命令cat /proc/cpuinfo为每个核心输出一块数据。每个块都以此信息开头:

processor   : 3
vendor_id   : GenuineIntel
cpu family  : 6
model       : 60
model name  : Intel(R) Core(TM) i5-4210M CPU @ 2.60GHz
(...)

核心从 0 开始编号,因此如果最后一个块processor : 3如本例所示,则您的计算机有 4 个核心。

相关内容