为什么 top 显示的内核数与 cpuinfo 不同?

joh*_*nny 10 linux cpu

当我运行 top 时,我显示 CPU 0-7。当我做:

cat /proc/cpuinfo | grep "cpu cores" | uniq
Run Code Online (Sandbox Code Playgroud)

我得到:

cpu cores : 4
Run Code Online (Sandbox Code Playgroud)

如果我grep“物理ID”,我有1。

我认为我的命令是错误的,而 top 是正确的。这不是虚拟机,而是物理服务器 RedHat。我究竟做错了什么?

我不确定这些回答它:

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

/proc/cpuinfo 中的处理器数量

编辑:我是否更正了那个物理 ID,如果它只显示 1,那么我在主板上有一个物理芯片?

编辑:它是 Intel(R) Xeon(R) CPU X5560 @ 2.80GHz 但物理 ID 为 1,我认为它会是 0,但 cpuinfo 中没有物理 ID 0。

编辑:如果重要的话,我想弄清楚他们在哪里做 0.5 核心数的许可。

J..*_*... 21

X5560 是单芯片。它看起来像这样:

在此处输入图片说明

grep "physical id" 告诉您安装了一个物理处理器。

如果您将散热器从顶部取下,您可以看到这一点 - 单个物理芯片(面朝下):

在此处输入图片说明

如果您可以移除那个骰子并将其翻转过来,它看起来像这样:

在此处输入图片说明

在单个物理芯片上,硅片上内置了四个物理 CPU 内核

在此处输入图片说明

grep "cpu cores" 告诉您您的处理器有四个内置于其上的物理内核。

每个内核都是一个带有浮点单元、多个整数执行单元、一对寄存器堆栈和其他一些允许每个内核一次有效执行两个独立指令流(线程)的魔法的单个处理器。

在此处输入图片说明

top 告诉您计算机上的所有处理器和内核可以同时执行八个独立的工作流 - 它告诉您操作系统能够在任何给定时间安排八个同时执行的线程。

  • @johnny 大多数时间的大多数 CPU 都是一个芯片、一个内核、一个线程。随着时间的推移,工程师注意到核心的某些部分在等待其他部分完成工作时花费了大量时间空闲。超线程是一种相对较新的技术,它向内核添加了一些额外的位,通过为它们提供单独的独立工作负载,允许更多以前空闲的部分在大部分时间保持忙碌。它不会使内核的性能翻倍,但它确实允许它比其他方式多做大约 30% 的工作,所以降压停在了两个。 (2认同)

Abh*_*ose 14

你用的是什么CPU?每个物理核心有多少线程?

cat /proc/cpuinfo显示物理核心数,而top显示线程总数。

我认为您的 CPU 有 4 个物理内核和每个物理内核 2 个逻辑内核。所以它top显示8。

此外,内容/proc/cpuinfo有点依赖于实现。就像在 root 的 android shell 中一样,该cpuinfo文件不包含任何 term cpu cores

但是在cpuinfo每个线程中都命名为processor : XX线程编号在哪里。所以最后一个线程号应该与top/htop输出相同。

结果nproc --all也应与top/htop

  • 8 表示总线程数,标记为 0-7。`top/htop` 以 `threads` 为核心 (2认同)
  • http://thedaneshproject.com/posts/how-to-find-the-number-of-physical-cpus-in-linux/ 这很好地解释了如何计算“核心”、“线程”和“物理 CPU”的数量 (2认同)

Ste*_*itt 7

top每个逻辑 CPU 显示一个“CPU”;在 x86 上,这是系统中的插槽数乘以每个插槽的物理内核数,乘以每个内核的线程数的乘积。

中的cpu cores条目/proc/cpuinfo再次在 x86 上显示物理内核的数量。要查找 中使用的逻辑核心数top,您应该查看该siblings值:

cat /proc/cpuinfo | grep "siblings" | uniq
Run Code Online (Sandbox Code Playgroud)

这在内核文档中有详细描述。

lscpu提供有关已安装 CPU 的信息,这些信息比/proc/cpuinfo(或者更确切地说,它以更简单的方式呈现相同的信息)更容易理解。