Linux 查看 CPU 指令集的方法与关键标志
在 Linux 中,CPU 支持的指令集与特性由内核通过 /proc/cpuinfo 的 flags 字段(以及 lscpu 的 Flags 列)呈现。flags 中的每一项代表一个已启用的处理器特性或扩展指令集,可用于快速判断如 SSE、AVX、AES、VMX 等是否可用。
x86_64 常见指令集标志速查
- 基础与系统
- fpu:浮点单元
- mmx / sse / sse2 / sse3 / ssse3 / sse4_1 / sse4_2:多媒体与向量指令演进
- xsave / xsaveopt / xsavec / xsaves:XSAVE 系列状态保存/恢复
- 高级向量与浮点
- avx / avx2 / f16c / fma:256 位向量与融合乘加等
- avx512f / avx512dq / avx512cd / avx512bw / avx512vl / avx512ifma / avx512vbmi / avx512_vnni:AVX‑512 家族
- 加密与哈希
- aes / vaes / pclmulqdq:AES 与乘法指令
- sha_ni / sha1 / sha2:SHA 系列加速
- rdrand / rdseed:随机数生成
- 内存与原子
- pae / pdpe1gb:扩展物理地址与 1GB 大页
- nx:No‑Execute 位
- popcnt / lzcnt / bmi1 / bmi2 / abm:位操作与计数、位操作扩展、高级位操作
- clflush / clflushopt / clwb:缓存行操作
- 虚拟化
- vmx(Intel VT‑x)/ svm(AMD‑V)
- ept / vpid:扩展页表与虚拟页标识
- 并发、调试与性能监控
- ht / hyperthreading:超线程
- tsc / constant_tsc / nonstop_tsc / rdtscp:时间戳计数器与变体
- apic / x2apic:高级可编程中断控制器
- pebs / bts / arch_perfmon:精确事件采样与分支跟踪
- smep / smap / umip:SMEP/SMAP/UMIP 安全特性
- rtm / hle:事务内存(TSX)
- invpcid / pku / ospke:进程上下文标识、PKU 保护密钥
- intel_pt:处理器跟踪
- 其它常见
- lahf_lm / lm:长模式相关
- syscall / rep_good / nopl / xtopology:系统调用与优化提示等
以上标志均为 /proc/cpuinfo 中可见的常见项,具体出现与否取决于 CPU 型号与微码版本。
ARM/AArch64 常见指令集标志速查
- fp:浮点支持
- asimd(即 NEON 在 AArch64 的命名):高级 SIMD
- crc32:CRC32 校验指令
- aes / pmull / sha1 / sha2:加密与哈希加速
- atomics:原子操作
- fphp / asimdhp:半精度浮点与 SIMD 半精度
- cpuid:CPUID 类识别
- asimdrdm / lrcpc / dcpop / asimddp:SIMD 扩展与内存模型相关
在 ARMv8‑A 64 位 内核上,使用 asimd 表示 NEON;而在 ARMv7‑A 32 位 内核上常见的是 neon 标志,二者语义等价但名称不同。
如何查看与解读
- 查看完整 flags
- 直接查看:cat /proc/cpuinfo
- 聚焦标志:grep -E ‘^flags\b’ /proc/cpuinfo
- 使用 lscpu:lscpu | grep -i “flags”(或 lscpu -e 查看每核信息)
- 解读要点
- flags 是“已启用”的特性集合,并非详尽清单;某些特性需 OS 与微码共同支持。
- 不同架构/内核版本标志命名存在差异(如 asimd vs neon)。
- 多核/异构系统(如 big.LITTLE)各核 flags 可能不同,建议逐核检查。
脚本判断示例
- 判断 x86 是否支持 AVX2
- grep -q ‘^flags\b.*\bavx2\b’ /proc/cpuinfo && echo “AVX2: yes” || echo “AVX2: no”
- 判断 ARM 是否支持 NEON(AArch64)
- grep -q ‘^Features\b.*\basimd\b’ /proc/cpuinfo && echo “NEON: yes” || echo “NEON: no”
- 使用 lscpu 过滤
- lscpu | tr ‘,’ ‘\n’ | grep -i avx2
上述方法适用于快速在脚本中做特性开关或运行时适配。