HOWTO · Linux

从 Cpuinfo 读取 CPU 标志

本文介绍 Linux 中 cpuinfo 中的标志。

本页内容

Linux 会在 /proc/cpuinfo 中公开处理器信息。你可以显示这些信息、查找系统报告的 CPU 标志,并通过少量示例了解系统报告的内容。具体字段和标志名称取决于处理器、体系结构、内核,以及 Linux 是否运行在虚拟机中。

读取 /proc/cpuinfo

运行以下示例:

本节中的代码以及显示的标签或输出仍为英文。

cat /proc/cpuinfo

此命令会在终端中以可选择的文本形式打印该文件。随附的运行时执行记录显示,这条命令已在另一台系统上成功运行;不同系统的输出会有所不同。终端图片展示的是另一台 AMD Ryzen 系统的输出,并非该运行时执行的结果。

终端中 /proc/cpuinfo 的输出,显示 AMD Ryzen 7 4700U 型号名称、处理器字段和标志。

识别输出中的字段

该文件通常会为每个逻辑处理器列出一组字段。processor 标识一个逻辑处理器条目;它不是物理核心数。vendor_id 和 model name 标识系统报告的处理器系列和型号;cpu MHz 是系统报告的频率值,可能随电源管理而变化。文件中可能还会有 cache size、address sizes 和 cpu cores 等字段,但它们是否存在以及含义如何,会因体系结构和内核而异。不要假设每台机器上的每一行都有相同含义。

在多核系统中,重复出现的字段组是正常的。查看 processor 的值,可以了解 Linux 列出的逻辑处理器条目;cpu cores 则应仅视为该系统报告的值。仅凭这些字段,无法可靠地判断插槽数量或完整的物理拓扑。

查找并解读 CPU 标志

在 x86 输出中,查找 flags 字段;某些其他体系结构会用 Features 表示类似的列表。你可以用 grep -m1 -E '^(flags|Features)[[:space:]]*:' /proc/cpuinfo 在文件中查找一个代表性的列表。冒号后面的名称是以空格分隔的标识符,并非说明文字。它们的拼写属于处理器和内核接口的一部分,因此在查找文档或比较系统时,应保持 sse4_2、avx 和 lm 等名称不变。

例如,lm 表示 x86 长模式支持,sse4_2 和 avx 表示指令集扩展。标志是简短的能力名称,不是性能评级。请以你关心的那台机器报告的标志列表为准;其他处理器、虚拟机或体系结构可能报告不同的集合。Linux 内核 4.1.3 版的 x86 CPU 特性定义可以帮助解释该版本中的名称,但它不是当前版本的完整目录。

了解 CPU 标志输出的局限

/proc/cpuinfo 描述的是 Linux 为当前运行系统公开的信息。虚拟机可能只显示经过筛选的主机能力;内核也可能公开特定于体系结构的名称,或因内核不同而提供不同字段。列出了某项指令集特性,也不能证明某个程序实际使用了它:软件可能还需要操作系统支持、合适的编译器设置,或运行时特性检测。

可以把标志作为系统报告其能力的依据;在依赖某项特性之前,还应核对处理器、内核、虚拟化设置以及应用程序自身的要求。仅凭这些标志,无法判断某项工作负载会运行得多快、软件是否选择了优化代码路径,也无法确认每个逻辑处理器都提供相同且可用的特性集合。