我的机器有多少个物理 CPU?

我的机器有多少个物理 CPU?

我对我的服务器的 CPU 数量有点困惑。

它正在运行,Intel(R) Xeon(R) Gold 6242R CPU @ 3.10GHz根据英特尔官方文档包含20个物理核心。

这里的问题是lscpu命令的输出(过滤了一些行):

CPU(s):                          80
On-line CPU(s) list:             0-79
Thread(s) per core:              2
Core(s) per socket:              20
Socket(s):                       2
NUMA node(s):                    2
Model name:                      Intel(R) Xeon(R) Gold 6242R CPU @ 3.10GHz
NUMA node0 CPU(s):               0-19,40-59
NUMA node1 CPU(s):               20-39,60-79

据我了解actual physical cores = CPU(s) / thread(s) per core,我得到了 40,这是我预期的两倍。

有人能向我解释一下这里发生了什么以及到底是什么CPU(s), thread(s) per core, core(s) per socket, socet(s)意思吗?

答案1

  • Sockets表示系统中有多少个物理CPU。

  • Cores per socket是每个物理 CPU 有多少个完整的 CPU 核心(包括加载/解码逻辑)。

  • Threads per core是指单个核心上可以调度多少个线程(超线程)。简单地说,CPU 中使用的硬件代码的实际执行量加倍,使 CPU 能够准备执行多个不同的任务。它允许 CPU 在指令到达 CPU 的执行核心之前获取/解码指令。它可以防止或减少管道停滞

  • CPU表示“可调度实体”,这是操作系统将拥有的运行队列数量,因此sockets x cores per socket x threads per core

在您的例子中,您有 2 个物理 CPU,每个 CPU 有 20 个核心,每个核心可以运行 2 个线程(超线程)。因此2x20x2 = 80,显示的就是 的数量CPUs

答案2

混淆源自一个非常简单的细节,从信息lscpu命令显示给您的信息中可能无法清楚地看出这一点。

问题是:您的服务器实际上有 2 个Intel(R) Xeon(R) Gold 6242R CPU,如行中所述Socket(s)

根据英特尔文档所述,每个 CPU 包含 20 个物理核心(线Core(s) per socket),总共 40 个物理核心。

每个核心都能够“同时”运行 2 个线程(线Thread(s) per core)。

因此:2 个 Intel Xeon,每个有 20 个物理核心,每个核心有 2 个线程,总共有 80 个“可执行进程的单元”或“CPU”

答案3

现在,CPU 的概念有点抽象,这始于超线程(90 年代末),然后是 Intel Core(00 年代初)系列。在此之前,您肯定有多 CPU 系统,但它们都是多物理 CPU。

但是对于超线程和多核单 CPU 来说,物理 CPU 数量与 CPU 上运行代码的逻辑 CPU 数量不同。

Socket(s):                       2

你有 2 个物理 CPU,就像“主板上插着散热器的东西”

Core(s) per socket:              20

每个物理 CPU 有 20 个内核,在 Linux 上看起来和工作起来都像独立的 CPU。内核至少共享相同的 L3 缓存,可能共享 L2 缓存,并且可能有自己的 L1 缓存 - 因此性能不如具有自己的 L3/L2/L1 的独立插槽,但差不多。

由于这是每个插座,因此有 2 * 20 = 40。

Thread(s) per core:              2

每个核心有 2 个 SMT 线程,这些线程由 CPU 的微架构实现,在 Linux 上基本上看起来像是独立的 CPU

它们的速度不会像真正的独立核心那么快。

微架构上的线程尝试从核心中获取当前未使用的管道阶段,但如果繁忙则可能不得不等待 - 并且 CPU 已经试图使自己保持非常繁忙,因此 2 个核心上的 2 个线程远远不及 4 个核心,但它可以使代码运行得更快一些。

请注意,由于核心资源是共享的,因此 Spectre 和类似的漏洞在线程之间比在核心或套接字之间更有可能发生。

无论如何,因为这是每个核心,也是每个插槽,所以这是 2 * 20 * 2,这给你:

CPU(s):                          80

答案4

您的服务器使用 2 个“处理器芯片”(在 2 个插槽上),每个芯片有 20 个物理核心。

并且每个核心可以处理2个线程。

这就是为什么它显示 2(处理器芯片)* 20(每个部件的核心)* 2(每个核心可以处理的线程)= 80 个 CPU

在这种情况下,CPU 代表“可调度实体”,又名机器可以运行的线程数量。

相关内容