【问题标题】:Understanding output of lscpu了解 lscpu 的输出
【发布时间】:2019-02-18 03:11:14
【问题描述】:

你可以看到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

我可以看到有2 插槽(就像处理器??),在每个插槽内我们都有14 内核。因此,总共有2x14=28 个物理核心。通常,一个 CPU 可以包含多个内核,因此 CPU 的数量永远不能小于内核的数量。但是,如输出 CPUs(s): 56 所示,这让我感到困惑。

我可以看到每个内核的线程数:2,因此这 28 个内核的行为类似于 2x28=56 逻辑内核。

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

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

【问题讨论】:

    标签: multithreading apache-spark cpu core


    【解决方案1】:

    Copied 应 OP 的要求。)

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

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

    【讨论】:

      【解决方案2】:

      NUMA 代表非统一内存访问。 NUMA 节点的值与访问内存的性能有关,它不涉及计算您拥有的 CPU 数量。

      你得到的 56 个 CPU 的计算是基于

      CPU's = number of sockets x number of cores per socket x number of threads per core
      

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

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

      -- 根据 Margaret Bloom 的出色评论编辑。

      【讨论】:

      • “Linux 将每个执行线程视为一个 CPU”具有欺骗性:使用 SMT,每个操作系统都会看到 56 个“CPU”。诚然,这个词是模棱两可的。 “底线是你可以并行运行 56 条指令。”是错的。核心很重要,因为 BE 在两个兄弟硬件线程之间共享,并且无论如何 x86 都是超标量,因此即使单个线程也可以执行超过 1 个 inst/cycle。 “你可以认为套接字相当于一个物理处理器。”令人困惑,但也许没有错。套接字是多个核心 + 非核心。
      • 谢谢杰。我也是这么想的。
      • @Jaywalker :如何获取 'Cores per Socket' 值,使用 'sysctl' 命令时,我正在使用 Mac 系统。谢谢
      【解决方案3】:

      每个内核的线程数:硬件线程是一组足够的寄存器来表示一个软件线程的当前状态。具有两个硬件线程的内核可以代表两个不同的软件线程执行指令,而不会在它们之间产生上下文切换的开销。它可以实现的实际并行量取决于线程正在做什么以及处理器品牌和型号。

      Cores per Socketcore 是我们传统上认为的处理器或 CPU,socket 是它们之间的接口一个或多个内核和内存系统。插槽也是芯片或多芯片模块与主板之间的物理连接。除了内核之外,一个芯片/模块通常至少有两个级别的内存缓存。每个内核通常都有自己的 L1 缓存,然后芯片/模块上的所有内核必须共享(即竞争)对至少一个更高级别缓存的访问权,并且,主内存。

      套接字:见上文。大型系统(例如机架式服务器)通常有不止一个。个人电脑,较少使用。

      NUMA...:我不能告诉你很多关于NUMA 的事情,只是说在不同 NUMA 节点上运行的线程之间的通信与在不同 NUMA 节点上的通信工作方式不同,而且成本更高在同一节点上运行的线程。

      【讨论】:

      • 非常感谢您的回答。非常感谢:)
      猜你喜欢
      • 1970-01-01
      • 2014-12-06
      • 2019-02-13
      • 2012-10-21
      • 2018-09-22
      • 2012-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多