/proc/cpuinfo 中最常用的标志
概述
我们将了解一下计算机主板上安装的 CPU 上提供的一些功能。在深入探讨主题细节之前,我们将简要了解虚拟文件系统的概念。
之后,我们将讨论从不同 CPU 制造商(如英特尔、AMD 和 Arm)的 /proc/cpuinfo 虚拟目录中获得的标志。
虚拟文件
虚拟文件系统 (VFS) 是一个抽象层,允许我们将文件视为存储在磁盘驱动器上。
VFS 提供了一种访问数据的方法,而无需了解数据实际存储的位置。例如,您可以通过指定文本文档或图像文件的名称来打开它,而无需确切知道它位于何处。
这种方法使得在一台机器上使用多个操作系统成为可能。Linux 内核原生支持此功能,但其他操作系统可能无法支持。
虚拟文件系统是 Linux 操作系统上提供的一种特殊类型的文件系统。通过读取它们,我们可以了解 Linux 内核内部发生了什么。它们就像透镜,您可以通过它们查看正在运行的 Linux 内核。与普通文档不同,虚拟文档不占用硬盘空间,并且仅在打开时创建。
大多数 Linux 发行版将虚拟文件存储在 /proc 目录中。我们可能需要 root 权限才能读取虚拟环境中存储的一些文件。让我们看一下 /proc 目录中的内容 -
# ls -halF /proc total 4.0K -r--r--r-- 1 root root 56K Dec 02 00:18 config.gz -r--r--r-- 1 root root 0 Dec 02 00:18 consoles -r--r--r-- 1 root root 0 Dec 02 00:14 cpuinfo -r--r--r-- 1 root root 0 Dec 02 00:14 devices -r--r--r-- 1 root root 0 Dec 02 00:18 diskstats -r--r--r-- 1 root root 0 Dec 02 00:18 filesystems dr-xr-xr-x 5 root root 0 Dec 02 00:18 fs/ -r--r--r-- 1 root root 0 Dec 02 00:18 vmstat -r--r--r-- 1 root root 0 Dec 02 00:18 zoneinfo
该命令将列出许多文件,但我们只对 cpuinfofile 感兴趣,它恰好位于基本文件夹内。
/proc/cpuinfo 虚拟文件
系统
/proc/cpuinfo 文件包含有关系统上所有 CPU 的信息。这包括基本的硬件信息,例如处理器类型、内核数、缓存大小等。
它还显示了与 CPU 相关的各种标志。其中包括 -
标志
描述
核心数
物理内核数
每个内核的线程数
支持的最大线程数
缓存大小等。
# cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 94 model name : Intel(R) Celeron(R) CPU G3900 @ 2.80GHz stepping : 3 microcode : 0xea cpu MHz : 899.999 cache size : 2048 KB physical id : 0 siblings : 2 core id : 0 cpu cores : 2 apicid : 0 initial apicid : 0 fpu : yes fpu_exception : yes cpuid level : 22 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb invpcid_single pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust erms invpcid rdseed smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves dtherm arat pln pts hwp hwp_notify hwp_act_window hwp_epp md_clear flush_l1d vmx flags : vnmi preemption_timer invvpid ept_x_only ept_ad ept_1gb flexpriority tsc_offset vtpr mtf vapic ept vpid unrestricted_guest ple pml bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit srbds bogomips : 5599.85 clflush size : 64 cache_alignment : 64 address sizes : 39 bits physical, 48 bits virtual
我们可以看到它打印了我们 CPU 的规格,包括标志字段。接下来,让我们更仔细地看看一些可以帮助我们准确了解我们的 CPU 能为我们做什么的重要功能。
常见的英特尔定义的标志
下面列出了由英特尔定义的最常见的标志,这些标志也出现在许多其他处理器中。
lm
lm 标志表示我们的 CPU 支持 64 位架构。因此,任何基于 x86 的 64 位 CPU 都设置了此标志,而 32 位 CPU 则没有。
vmx 和 svm
Vmx(虚拟机扩展)表示我们的英特尔 CPU 支持虚拟机。像 VMWare 这样的虚拟机软件使用此功能来提高性能和其他增强功能。
另一方面,svm(可扩展向量机)标志的工作原理与 sse2 标志相同,但它仅适用于 AMD 处理器。
smx
在 64 位处理器上,可以使用 SMX(安全模式扩展)功能。它是用于在英特尔 TXT 平台中实施安全策略的 API(应用程序编程接口)。此功能允许您限制对某些内存位置的访问或阻止来自特定来源的代码执行。
hypervisor
hypervisor 位指示 CPU 是否支持同时运行多个操作系统。虚拟计算机是一种运行和控制虚拟计算机的软件。有一些流行的虚拟机可用,包括 VirtualBox 和 VMware。
如果 CPU 没有这些标志,则它很可能也没有 vmx 或 SVM 标志。
pae
PAE 代表物理地址扩展。它是一种用于现代 CPU 的技术,允许它们使用超过 4GB 的 RAM。PAE 使您的系统能够寻址高达 64 GB 的 RAM。
pn
每个英特尔® 酷睿™ i7 处理器都有一个唯一的序列号,称为 PN,代表“处理器序列号”。此序列号对于每个处理器都是唯一的,通常称为其“PN”或“处理器序列号”。
acpi
此标志告诉我们我们的 CPU 是否支持 ACPI(高级配置和电源接口)。该首字母缩写词代表高级配置和电源接口。ACPI 是由微软和英特尔开发的一项标准,它定义了设备如何与操作系统通信。
sse
流式 SIMD 扩展 (SSE) 是英特尔处理器指令集的补充。SIMD 代表单指令多数据。SSE 允许我们的 CPU 同时处理多种数据类型,从而通过允许它们同时执行任务来提高其性能。它主要应用于 3D 图形、计算机视觉和数字信号处理等处理密集型应用程序中。
sse2
第二代流式 SIMD 扩展 (Sse2) 是对英特尔处理器指令集的另一种增强。SSE2 添加了新的指令,这些指令可以提高多媒体应用程序(如视频编码和解码、图像处理和音频编码)的性能。
sse3
SSE3 代表流式 SIMD 扩展 3。这些扩展旨在改进多媒体应用程序。例如,它们可以加速视频编码和解码。
sse4_1 和 sse4_2
这两个标志分别表示我们的 CPU 分别支持流式 SIMD 扩展 4.1 和 4.2。它们可以使多媒体应用程序更快。
ht
HT(超线程)标志表示我们在单个物理处理器上拥有两个逻辑 CPU。超线程有助于提高性能,因为多个线程可以同时运行。
tm
此标志表示我们的 CPU 支持 TM(事务内存)。事务内存是一种新的编程模型,使程序员能够编写并发程序,而无需担心数据竞争。TM 功能允许开发人员使用事务内存来确保所有指令原子地执行。
pdcm
英特尔 CPU 中的 PDCM 标志代表性能和调试控制模式 MSR。MSR 是存储每种类型的处理器指令的特定值的寄存器。特殊的调试寄存器可用于各种目的,包括代码跟踪、基准测试和性能监控。
常见的 AMD 定义的标志
AMD 也使用其中一些标志 -
mp
MP 标志表示多处理器。它指示我们的 CPU 具有多个核心。
avx
AVX 代表高级矢量扩展。AVX 是一种新的指令集扩展,可以提高某些算法的性能。
fma
FMA 代表浮点乘加。FMA 是一种浮点运算,它将乘法和加法组合到单个指令中。
lm
LM 代表无锁多线程。LM 是一种新技术,它使得在单个内核上运行多个线程成为可能。
mmx
MMX 代表多精度扩展。MMX 是一组于 1996 年引入的指令。
abm
ABM 代表基于地址的映射。ABM 是一种将虚拟地址映射到物理地址的技术。
sse4a
SSE4A 代表流式 SIMD 扩展 4.0。此扩展于 2011 年发布。
常见的 ARM 定义的标志
ARM 定义了自己的标志。以下是一些常见的标志 -
26bit
26 位宽数据指示处理器是否支持 26 位宽数据传输。此功能在新的 ARM 处理器中不可用。
java
ARM 处理器中的 java 标志指示 Jazelle DBX 扩展。Java 虚拟机 (JVM) 利用此扩展来执行硬件加速的字节码执行,从而使我们的程序能够更快地执行。
neon
此标志也称为高级 SIMD 扩展。它加速媒体和数字信号处理应用程序,例如视频游戏和相机应用程序。在 32 位 Arm Cortex A8 处理器上,它将由 NE10 标志发出信号;在 64 位 Arm Cortex A9 处理器上,它将由 ASIMD 标志发出信号。
需要注意的是,即使较旧的 Linux 内核版本可能不支持 SSE2 指令,如果设置了 asimd 标志,它们仍将显示。
lpae
lpae(大页面地址扩展)选项告诉我们我们的处理器支持大页面,这允许我们在 32 位处理器上拥有超过 4GB 的物理内存。
thumb
Thumb 是某些 x86 处理器支持的架构。Thumb 指令宽 8 位,如果我们的物理内存 (RAM) 比我们想要的慢,则允许程序运行得更快。
Linux 定义的标志
在您的 /proc/cpuinfo 文件中,您可能会看到许多其他类型的标志。其中包括 -
tsc_reliable
TSC 代表时间戳计数器,它测量自重置以来 CPU 时钟滴答的次数。此位告诉我们 TSC 寄存器是否可靠。使用此标志是因为当系统具有多核处理器时,无法信任 TSC,因为无法保证多个内核的计数器将同步。
acc_power
AMD CPU 上的 ACCPOWER 标志表示我们的 CPU 可以报告其累积的功耗。它被称为累积功耗报告机制。
结论
我们已经了解了虚拟文件系统的概念,以及 /proc/cpuinfo 虚拟文件系统的作用。之后,我们查看了一些在 /proc/cpuinfofile 文件中可以找到的重要标志。
我们查看了 Intel 定义的标志类型以及 AMD 和 ARM 定义的标志类型。我们已经浏览了一些 Linux 本身设置的标志。
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP