了解lscpu的输出

cph*_*sto 6 cpu multithreading core apache-spark

你可以看到lscpu命令的输出-

jack@042:~$ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                56
On-line CPU(s) list:   0-55
Thread(s) per core:    2
Core(s) per socket:    14
Socket(s):             2
NUMA node(s):          2
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 79
Model name:            Intel(R) Xeon(R) CPU E5-2690 v4 @ 2.60GHz
Stepping:              1
CPU MHz:               2600.000
CPU max MHz:           2600.0000
CPU min MHz:           1200.0000
BogoMIPS:              5201.37
Virtualization:        VT-x
Hypervisor vendor:     vertical
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              35840K
NUMA node0 CPU(s):     0-13,28-41
NUMA node1 CPU(s):     14-27,42-55
Run Code Online (Sandbox Code Playgroud)

我可以看到有2套接字(就像处理器一样?)并且每个套接字内部都有14核心.因此,总体2x14=28物理核心.通常,CPU可以包含多个内核,因此CPU的数量永远不会小于内核数量.但是,如输出中所示,CPUs(s): 56这让我很困惑.

我可以看到每个核心的线程:2,所以这28个核心的行为就像2x28=56逻辑核心.

问题1:CPUs(s): 56表示什么?是否CPU(s)表示虚拟/逻辑核心的数量,因为它至少不能是物理核心?

问题2:这个NUMA节点是什么意思?它代表插座吗?

Ste*_*itt 7

(应 OP 的要求复制。)

“CPU(s): 56”代表逻辑核心数,等于“每核心线程数”ד每插槽核心数”ד插槽数”。一个socket是一个物理CPU包(占用主板上的一个socket);每个套接字承载多个物理内核,每个内核可以运行一个或多个线程。在您的情况下,您有两个插槽,每个插槽包含一个 14 核 Xeon E5-2690 v4 CPU,并且由于它支持具有两个线程的超线程,因此每个内核可以运行两个线程。

“NUMA节点”代表内存架构;“NUMA”代表“非统一内存架构”。在您的系统中,每个插槽都连接到某些 DIMM 插槽,并且每个物理 CPU 包都包含一个内存控制器,该控制器处理总 RAM 的一部分。因此,并非所有物理内存都可以从所有 CPU 平等访问:一个物理 CPU 可以直接访问它控制的内存,但必须通过另一个物理 CPU 才能访问其余内存。在您的系统中,逻辑内核 0-13 和 28-41 位于一个 NUMA 节点中,其余的位于另一个节点中。所以是的,一个 NUMA 节点等于一个插槽,至少在典型的多插槽 Xeon 系统中是这样。


Jay*_*ker 5

NUMA 代表非统一内存访问。NUMA 节点的值与访问内存方面的性能有关,并且与计算您拥有的 CPU 数量无关。

您获得的 56 个 CPU 的计算基于

CPU's = number of sockets x number of cores per socket x number of threads per core
Run Code Online (Sandbox Code Playgroud)

这里,每个核心 2 个线程表示启用了超线程。

因此,您没有 56 个物理处理器,而是插槽、内核和超线程的组合。最重要的是您可以并行运行 56 个线程。您可以套接字视为相当于物理处理器。

——根据玛格丽特·布鲁姆的精彩评论进行编辑。

  • “Linux 将每个执行线程视为一个 CPU”是骗人的:使用 SMT,每个操作系统都会看到 56 个“CPU”。当然,这个术语是含糊不清的。“底线是你可以并行运行 56 条指令。” 是错的。核心才是最重要的,因为 BE 在两个同级硬件线程之间共享,而且 x86 是超标量,因此即使单个线程也可以执行超过 1 个实例/周期。“你可以把套接字想象成一个物理处理器。” 令人困惑,但也许并没有错。一个socket是多个核心+非核心的数量。 (3认同)