Contents

获取Linux中的处理器/内核数量

1. 概述

在本教程中,我们将研究检查 Linux 机器中可用处理器或内核数量的方法。我们将仔细研究一些可用于此目的的 Bash 实用程序和系统文件。

2. lscpu实用程序

首先,让我们检查一下lscpu 命令的默认输出:

$ lscpu
Architecture:                    x86_64
CPU op-mode(s):                  32-bit, 64-bit
Byte Order:                      Little Endian
Address sizes:                   39 bits physical, 48 bits virtual
CPU(s):                          8
On-line CPU(s) list:             0-7
Thread(s) per core:              2
Core(s) per socket:              4
Socket(s):                       1
Vendor ID:                       GenuineIntel
CPU family:                      6
Model:                           142
Model name:                      Intel(R) Core(TM) i5-10310U CPU @ 1.70GHz
...

这里,** CPU(s)值表示逻辑核心数,在我们的输出中等于8

逻辑核心数等于“每个核心的线程数” × “每个插槽的核心数” × “插槽数”,机器上的物理核心数等于 “每个插槽的核心数” × “插槽数”

根据上面的输出,我们可以推断出我们的机器有4 个物理内核,并且由于启用了超线程(“每个内核的线程数”等于2),我们得到了8个逻辑内核。

我们还检查一下直接获取机器上物理内核数的命令

$ lscpu -b -p=Core,Socket | grep -v '^#' | sort -u | wc -l
4

在这里,我们使用*-p选项仅解析“Core”和“Socket”列。除此之外,我们还使用-b*选项将输出限制为仅在线 CPU。

3. /proc/cpuinfo文件

lscpu实用程序从**/proc/cpuinfo 文件中获取其信息,该文件包含所有逻辑内核或处理器的处理器信息**:

$ cat /proc/cpuinfo  | egrep "processor|core id"
processor       : 0
core id         : 0
processor       : 1
core id         : 0
processor       : 2
core id         : 1
processor       : 3
core id         : 1
processor       : 4
core id         : 2
processor       : 5
core id         : 2
processor       : 6
core id         : 3
processor       : 7
core id         : 3

因此,让我们根据*/proc/cpuinfo*文件的内容来获取一台机器上的逻辑核心数:

$ grep --count ^processor /proc/cpuinfo
8

此外,我们还可以通过计算唯一核心 ID 的数量来获得机器上的物理核心数量

$ grep ^"core id" /proc/cpuinfo | sort -u | wc -l
4

4. 其他选择

我们可以使用其他一些命令来获取处理器信息。让我们来看看。

4.1. nproc命令

让我们使用nproc实用程序检查系统上可用的处理器数量:

$ nproc --all
8

在这里,我们在这里使用了*–all*选项来打印已安装处理器的数量。

4.2. 使用getconf 查询

我们可以使用getconf命令查询配置的处理器值:

$ getconf -a | grep PROCESSORS
_NPROCESSORS_CONF                  8
_NPROCESSORS_ONLN                  8

在这种情况下,-a选项列出了系统的所有配置变量及其值。或者,我们也可以只查询与处理器相关的参数。因此,让我们检查配置的处理器数量:

$ getconf _NPROCESSORS_CONF
8

并且,在线处理器的数量:

$ getconf _NPROCESSORS_ONLN
8