当然我们知道cat /proc/cpuinfo |grep "cpu cores"
会给出一个输出
[root@14:47 ~]# cat /proc/cpuinfo |grep "cpu cores"
cpu cores : 2
cpu cores : 2
cpu cores : 2
cpu cores : 2
但实际上我想获得cpu核心的总数。我想要的结果是
cpu cores: 8
我怎样才能得到这样的结果?
答案1
尝试这个,
按照man lscpu
CORE The logical core number. A core can contain several CPUs.
SOCKET The logical socket number. A socket can contain several cores.
cores
以及sockets
是物理数,其中CPU(s)
是逻辑数。因此,要查找您的系统拥有的核心数量,请执行以下操作number of cores x number of sockets
的示例输出lscpu
如下:
Thread(s) per core: 2
Core(s) per socket: 8
Socket(s): 2
所以总数为cores: 16
总数CPU(s): 32
(因为threads
每个的数量core
是2
)
正如@Durga 提到的,nproc
给出了 的总数CPUs
。
答案2
在 Terminal 中nproc
,OP:CPU 核心总数
答案3
如果你是只对总和感兴趣,您还可以使用 GNU awk:
cat /proc/cpuinfo |grep "cpu cores" | awk -F: '{ num+=$2 } END{ print "cpu cores", num }'
编辑:这是OP意图对最后一列的数字求和的正确答案。然而,关于找出机器上有多少个核心(物理/虚拟)的问题在该问题的其他答案中给出。
答案4
简答
的数量物理核心:
> cat /proc/cpuinfo | grep -m 1 "cpu cores"
cpu cores : 2
的数量虚拟核心(例如,具有超线程的 2 倍物理核心数量):
> cat /proc/cpuinfo | grep -c "cpu cores"
4
如果您有多个 CPU/处理器(在这种感觉)在你的主板上这不能正常工作。请参阅“每个主板的多个 CPU”部分。如果您在计算集群或用于 CAD/工程目的的高端桌面工作站上工作,则可能会出现这种情况。
长答案
该命令cat /proc/cpuinfo
应打印出该行中的物理核心数cpu cores
。但它会打印出每个虚拟核心的此信息。因此,如果您想要获得物理核心的数量,只需取第一个出现的行cpu cores
,即
> cat /proc/cpuinfo | grep -m 1 "cpu cores"
cpu cores : 2
或者,如果您正在查找虚拟核心的数量,则可以计算找到该行的次数cpu cores
,即
> cat /proc/cpuinfo | grep -c "cpu cores"
4
例子
我有一个Intel(R) Core(TM) i7-3740QM CPU @ 2.70GHz
(4 个物理核心,超线程)。让我们看看我得到了什么:
> cat /proc/cpuinfo | grep "cpu cores"
cpu cores : 4
cpu cores : 4
cpu cores : 4
cpu cores : 4
cpu cores : 4
cpu cores : 4
cpu cores : 4
cpu cores : 4
物理核心数量:
> cat /proc/cpuinfo | grep -m 1 "cpu cores"
cpu cores : 4
虚拟核心数量:
> cat /proc/cpuinfo | grep -l "cpu cores"
8
您还可以获取最后找到的处理器编号并将其加一
> cat /proc/cpuinfo | grep "processor" | tail -1
processor : 7
# +1
每个主板有多个 CPU
我刚刚查看了我当前正在使用的计算集群的一个节点:1 个节点有 4 个 CPU(Intel Xeon),每个节点有 8 个物理核心;每个CPU都支持超线程;因此,每个CPU有16个虚拟核心;总结一下,一个节点有32个物理核和64个虚拟核;
cat /proc/cpuinfo
打印出每个虚拟核心的信息。因此,我们得到了 64 个信息“包”。如果我们有这样的设置,我们需要考虑physical id
中的行cat /proc/cpuinfo
。
这是我得到的输出:
> cat /proc/cpuinfo | grep -m 1 "cpu cores"
cpu cores : 8
> cat /proc/cpuinfo | grep -c "cpu cores"
64
> cat /proc/cpuinfo | grep "physical id" | tail -1
physical id : 3
# this result +1 => number of CPUs
因此,“后面的数字cpu cores
” x “后面的数字physical id
+ 1” 是我们节点的物理核心数 (8 x (3 + 1))。 64是虚拟核心的数量。
命名法
由于每个人都在不同的环境中使用内核、CPU 和处理器,因此我在这里为我的答案引入一个术语:
- 处理器:整个硬件(例如我的 Intel® Core™ i7-3740QM 处理器)
- CPU:CPU=处理器
- core或physical core:CPU中物理计算单元的数量
- 线程或虚拟核心:可以在一个CPU上并行运行的线程数量;如果(英特尔)处理器能够执行超线程,则虚拟核心的数量是物理核心数量的两倍(我不确定其他处理器供应商如何称呼此功能);
__例子: __
- 处理器:Intel(R) Core(TM) i7-3740QM CPU @ 2.70GHz
- 来源:英特尔方舟
数据:
- CPU数量:1个
- 处理器数量:1
- 核心(或物理核心):4
- 线程(或虚拟核心):8