我对我的服务器拥有的 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
Run Code Online (Sandbox Code Playgroud)
据我了解,actual physical cores = CPU(s) / thread(s) per core但后来我得到了 40,这是我预期的两倍。
有人可以解释一下这里发生了什么以及到底是什么CPU(s), thread(s) per core, core(s) per socket, socet(s)意思吗?
mta*_*tak 64
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。
小智 16
混乱来自于一个非常简单的细节,从 infolscpu命令向您显示的内容中可能不清楚该细节。
问题是:你的服务器实际上有 2Intel(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”
CPU 的概念现在有点抽象,这始于超线程(90 年代末),然后是 Intel Core(00 年代初)系列。在此之前,您肯定拥有多 CPU 系统,但它们都是多物理 CPU。
但对于超线程和多核单 CPU,CPU 的物理数量与 CPU 上运行的代码所看到的 CPU 的逻辑数量不同。
Socket(s): 2
Run Code Online (Sandbox Code Playgroud)
您有 2 个物理 CPU,如“主板上插入了散热器”
Core(s) per socket: 20
Run Code Online (Sandbox Code Playgroud)
每个物理 CPU 有 20 个内核,它们看起来和工作起来都像 Linux 中的独立 CPU。核心至少共享相同的 L3 缓存,可能是 L2 缓存,并且可能有自己的 L1 缓存 - 因此不如具有自己的 L3/L2/L1 的单个套接字那么出色,但也差不多了。
由于这是每个套接字,因此有 2 * 20 = 40 个。
Thread(s) per core: 2
Run Code Online (Sandbox Code Playgroud)
每个核心有 2 个 SMT 线程,这些线程由 CPU 的微架构实现,基本上看起来就像 Linux 上的独立 CPU
它们不会像真正的独立核心那样快。
微架构上的线程尝试从核心获取当前未使用的管道阶段,但如果繁忙,则可能不得不等待 - 并且 CPU 已经尝试让自己保持非常忙碌,因此 2 个核心上的 2 个线程远不等于 4 个核心,但是它可以使代码运行得更快一些。
请注意,与核心或套接字相比,Spectre 和类似漏洞跨线程的可能性更大,因为核心资源是共享的。
不管怎样,因为这是每个核心,也是每个插槽,所以是 2 * 20 * 2,这给你:
CPU(s): 80
Run Code Online (Sandbox Code Playgroud)
双 CPU\xe2\x80\xa6 处理器 x2,每个插槽 20 个核心\xe2\x80\xa6x2 = 40 个核心 = 80 个 HT。
\n这可能很容易通过简单地取下盖子/侧面来验证。
| 归档时间: |
|
| 查看次数: |
12916 次 |
| 最近记录: |