当我运行 top 时,我显示 CPU 0-7。当我做:
cat /proc/cpuinfo | grep "cpu cores" | uniq
我得到:
cpu cores : 4
如果我 grep "physical id" 我有 1。
我认为我的命令是错误的,而 top 是正确的。这不是虚拟机,而是物理服务器,RedHat。我究竟做错了什么?
我不确定这些答案:
编辑:我是否更正该物理 ID,如果它只显示 1,那么我的主板上有一个物理芯片?
编辑:它是一个 Intel(R) Xeon(R) CPU X5560 @ 2.80GHz 但物理 id 是 1,我以为它会是 0,但 cpuinfo 中没有物理 id 0。
编辑:如果重要的话,我正在尝试找出他们在哪里进行 0.5 核心数量的许可。
答案1
X5560是一个单芯片。它看起来像这样:
grep "physical id"
告诉您您安装了一个物理处理器。
如果您将散热器从顶部取下,您可以看到这一点 - 单个物理死(面朝下) :
如果你可以移除那个骰子并将其翻转过来,它看起来会像这样:
在那个单一的物理芯片上有四个物理CPU核心构建在硅上:
grep "cpu cores"
告诉您您的处理器内置了四个物理核心。
每个核心都是一个处理器,具有浮点单元、多个整数执行单元、一对寄存器堆栈以及一些其他功能,允许每个核心一次有效地执行两个独立的指令流(线程)。
top
告诉您计算机上的所有处理器和内核总共可以一次执行八个独立的工作流程 - 它告诉您操作系统能够在任何给定时间安排八个并发线程执行。
答案2
您使用什么CPU?每个物理核心有多少线程?
cat /proc/cpuinfo
显示物理核心数,同时top
显示存在的线程总数。
我认为你的CPU有4个物理核心,每个物理核心有2个逻辑核心。所以显示的是top
8。
此外,内容在/proc/cpuinfo
某种程度上依赖于实现。就像在 root android shell 中一样,该cpuinfo
文件不包含任何 term cpu cores
。
然而,cpuinfo
每个线程被命名为processor : X
,其中X
线程号。所以最后一个线程 no 应与top/htop
输出相同。
结果nproc --all
也应符合top/htop
答案3
top
每个逻辑 CPU 显示一个“CPU”;在 x86 上,它是系统中的套接字数量、每个套接字的物理核心数量、每个核心的线程数量的乘积。
cpu cores
中的条目同样/proc/cpuinfo
在 x86 上显示物理核心的数量。要查找逻辑核心的数量(如 中所用)top
,您应该查看该siblings
值:
cat /proc/cpuinfo | grep "siblings" | uniq
这在内核文档。
lscpu
提供有关已安装 CPU 的信息,这比它更容易理解/proc/cpuinfo
(或者更确切地说,它以更简单的方式呈现相同的信息)。
答案4
cpuinfo 显示实际的核心,而 htop/top 显示核心和线程作为核心。您很可能有 4 个核心和 4 个线程,这就是原因。