当我运行 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。我究竟做错了什么?
我不确定这些回答它:
编辑:我是否更正了那个物理 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 告诉您计算机上的所有处理器和内核可以同时执行八个独立的工作流 - 它告诉您操作系统能够在任何给定时间安排八个同时执行的线程。
Abh*_*ose 14
你用的是什么CPU?每个物理核心有多少线程?
cat /proc/cpuinfo显示物理核心数,而top显示线程总数。
我认为您的 CPU 有 4 个物理内核和每个物理内核 2 个逻辑内核。所以它top显示8。
此外,内容/proc/cpuinfo有点依赖于实现。就像在 root 的 android shell 中一样,该cpuinfo文件不包含任何 term cpu cores。
但是在cpuinfo每个线程中都命名为processor : X,X线程编号在哪里。所以最后一个线程号应该与top/htop输出相同。
结果nproc --all也应与top/htop
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(或者更确切地说,它以更简单的方式呈现相同的信息)更容易理解。