如何判断处理器是否具有特定功能? (64位指令集,硬件辅助虚拟化,密码加速器等),我知道/proc/cpuinfo文件在flags行中包含此信息,但是所有这些隐秘缩写是什么意思?

例如,给定/proc/cpuinfo的以下摘录,我是否有64位CPU?我有硬件虚拟化吗?

model name      : Intel(R) Core(TM)2 Duo CPU     E8400  @ 3.00GHz
…
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 lm constant_tsc arch_perfmon pebs bts rep_good aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 lahf_lm tpr_shadow vnmi flexpriority


#1 楼

x86

(32位aka i386–i686和64位aka amd64。换句话说,是您的工作站,笔记本电脑或服务器。)

常见问题:我是否有…



64位(x86_64 / AMD64 / Intel64)? lm

硬件虚拟化(VMX / AMD-V)? vmx(Intel),svm(AMD)
加速AES(AES-NI)? aes

TXT(TPM)? smx

虚拟机管理程序(已宣布)? hypervisor


大多数其他功能仅对编译器或内核作者有意义。

所有标志

完整列表在内核源代码中的文件arch/x86/include/asm/cpufeatures.h中。

英特尔定义的CPU功能,CPUID级别0x00000001(edx)

另请参阅Wikipedia和表2-27矢量扩展编程参考



fpu:板载FPU(浮点支持)

vme:虚拟8086模式增强功能


de:调试扩展(CR4.DE)

pse:页面大小扩展(4MB内存页面)

tsc:时间戳计数器(RDTSC)

msr:特定于模型的寄存器(RDMSR,WRMSR)

pae:物理地址扩展(支持超过4GB的RAM)

mce:机器检查异常


cx8:CMPXCHG8指令(64位比较和交换)

apic:板载APIC


sep:SYSENTER / SYSEXIT


mtrr:存储器类型范围寄存器


pge:页面全局启用(PDE和PTE中的全局位)

mca:机器检查体系结构


cmov:CMOV指令(有条件移动)(也是FCMOV)

pat:页面属性表


pse36:36位PSE(大页面)

pn:处理器序列号


clflush:缓存行刷新指令

dts:调试存储(用于调试和分析指令的缓冲区)

acpi:通过MSR的ACPI(温度监控和时钟速度调制)

mmx:多媒体扩展


fxsr:FXSAVE / FXRSTOR,CR4.OSFXSR


sse:英特尔SSE矢量指令

sse2:SSE2


ss:CPU自侦听


ht:超线程和/或多核

tm:自动时钟控制(热敏)监视器)

ia64:64位Intel Itanium体系结构(不要与带有标志x86-64或标志lm所指示的“ AMD64”位的Intel 64位x86体系结构相混淆)

pbe:挂起中断启用(PBE#引脚)唤醒支持

AMD定义的CPU功能,CPUID级别0x80000001

另请参阅Wikipedia和表2-23 in Intel Advanced Vector扩展程序编程参考



syscall:SYSCALL(Fast Sy干调用)和SYSRET(从快速系统调用返回)

mp:具有多处理能力。

nx:执行禁用


mmxext :AMD MMX扩展


fxsr_opt:FXSAVE / FXRSTOR优化

pdpe1gb:1 GB页面(允许hugepagesz=1G

rdtscp:已读时间戳记计数器和处理器ID


lm:长模式(x86-64:amd64,也称为Intel 64,即支持64位)

3dnowext:AMD 3DNow!扩展程序

3dnow:3DNow! (AMD矢量指令,与Intel的SSE1竞争)

Transmeta定义的CPU功能,CPUID级别0x80860001



recovery:处于恢复模式的CPU

longrun:Longrun电源控制

lrti:LongRun表接口

其他功能,Linux定义的映射



cxmmx:Cyrix MMX扩展

k6_mtrr:AMD K6非标准MTRR

cyrix_arr:Cyrix ARR(= MTRR)

centaur_mcr:半人马座MCR(= MTRR)

constant_tsc:TSC以恒定的速率波动

up:在UP上运行的SMP内核
art:始终运行的计时器

arch_perfmon:英特尔架构PerfMon

pebs:基于精确事件的采样

bts:分支跟踪存储

rep_good:rep微代码运行良好

acc_power:AMD累积动力机制


nopl:NOPL(0F 1F)指令

xtopology:cpu拓扑枚举扩展

tsc_reliable:已知TSC是可靠的

nonstop_tsc:TSC不会在C状态下停止

cpuid:CPU本身具有CPUID指令

extd_apicid:具有扩展的APICID(8位)

amd_dcm:多节点处理器

aperfmperf:APERFMPERF

eagerfpu:非延迟FPU还原

nonstop_tsc_s3:TSC在S3状态下不会停止

q 4312079q:TSC的频率已知

tsc_known_freq:CPU具有可恢复的机器检查

英特尔定义的CPU功能,CPUID级别0x00000001(ecx)

请参阅英特尔高级矢量扩展编程参考中的Wikipedia和表2-26



mce_recovery:SSE-3(“ Prescott新指令”)

pni:执行四字指令的无痕乘法— GCM加速器)

pclmulqdq:64位调试存储

dtes64:监视/等待支持(Intel SSE3补充)

monitor:CPL质量调试存储

ds_cpl:硬件虚拟化:英特尔VMX


vmx:更安全的模式:TXT(支持TPM)

smx:增强SpeedStep


est:温度监控器2


tm2:补充SSE-3


ssse3:上下文ID

cid:硅调试

sdbg:融合乘法加法


fma:CMPXCHG16B


cx16:发送任务优先级消息

xtpr:性能功能

pdcm:流程上下文标识符

pcid:直接缓存访问

dca:SSE-4.1


sse4_1:SSE-4.2


sse4_2:x2APIC


x2apic:交换字节指令后移动数据

movbe:返回设置为1条指令的位数汉明重量,即位数)

popcnt:TSC截止时间计时器

tsc_deadline_timer / aes:高级加密标准(新指令)


aes-ni:保存处理器扩展状态:还提供XGETBY,XRSTOR,XSETBY


xsave:高级矢量扩展


avx:16位fp转换(CVT16)

f16c:从硬件随机数生成器指令读取随机数


rdrand:运行于虚拟机管理程序


VIA / Cyrix / Centaur定义的CPU功能,CPUID级别0xC0000001



xstore)

hypervisor:启用随机数生成器

rng:CPU上加密(xcrypt)

rng_en:CPU上加密启用

ace:高级密码引擎v2

ace_en:启用ACE v2

ace2:PadLock哈希引擎

ace2_en:启用PHE

phe:PadLock蒙哥马利乘法器

phe_en:启用PMM

更多扩展的AMD标志:CPUID级别0x80000001,ecx



pmm:以长模式从标志(LAHF)加载AH并将AH存储到标志(SAHF)中

pmm_en:如果是,则超线程无效

lahf_lm:“安全虚拟机”:AMD-V


cmp_legacy:扩展的APIC空间

svm:32位模式下的CR8

extapic:高级位操作


cr8_legacy:SSE-4A


abm:指示在以下情况下是否生成通用保护异常(#GP)一些旧版SSE指令对未对齐的数据进行操作。还取决于CR0和对齐检查位

sse4a:3DNow预取指令

misalignsse:指示OS可见的解决方法,它使OS可以处理处理器勘误。

3dnowprefetch:基于指令的采样


osvw:扩展的AVX指令


ibs:SKINIT / STGI指令

xop:看门狗定时器


skinit:轻量级分析


wdt:4个操作数MAC指令


lwp:转换缓存扩展

fma4:NodeId MSR

tce:尾随位操作


nodeid_msr:拓扑扩展CPUID leafs

tbm:核心性能计数器扩展

topoext:NB性能计数器扩展

perfctr_core:数据断点扩展

perfctr_nb:性能时间戳计数器

bpext:L2性能计数器Exte nsions

ptscperfctr_l2扩展名(mwaitx / MWAIT

辅助标志:已定义Linux-适用于分散在各种CPUID级别的功能



MONITORX:Ring 3 MONITOR / MWAIT

MWAITX:Intel CPUID故障

ring3mwait:AMD Core Performance Boost

cpuid_fault:IA32_ENERGY_PERF_BIAS support

cpb:缓存分配技术L3

epb:缓存分配技术L2

cat_l3:代码和数据优先级分配L3

cat_l2:有效地cdp_l3invpcid_single


invpcid:AMD HW-PState

CR4.PCIDE=1:AMD ProcFeedbackInterface

hw_pstate:AMD安全内存加密

proc_feedback:内核页表隔离(Kaiser)

sme:Spectre变体2的Retpoline缓解(间接分支)

pti:AMD Retpoline缓解

retpoline:英特尔处理器库存编号

retpoline_amd:AVX-512神经网络指令

intel_ppin:AVX-512乘法累加单精度

avx512_4vnniw:内存带宽分配

avx512_4fmaps:在上下文交换机上填充RSB

虚拟化标志:Linux定义的




mba:英特尔TPR Shadow

rsb_ctxsw:英特尔虚拟NMI

tpr_shadow:英特尔FlexPriority

vnmi:英特尔扩展页表

flexpriority:英特尔虚拟处理器ID

eptvpid优于vmmcall


英特尔定义的CPU功能,CPUID级别0x00000007:0(ebx)



VMMCALL:{RD / WR} {FS / GS} BASE指令

VMCALL:TSC调整MSR

fsgsbase:第一组位操作扩展

tsc_adjust:硬件锁定清除


bmi1:AVX2指令


hle:主管模式执行保护

avx2:第二组位操作扩展

smep:增强型REP MOVSB / STOSB

bmi2:使处理器上下文ID无效

erms:受限的事务性内存

invpcid:缓存QoS监视

rtm:内存保护扩展

cqm:资源导向器技术分配

mpx:AVX-512基础


rdt_a:AVX-512双/四进制指令


avx512f:RDSEED指令

avx512dq:ADCX和ADOX指令

rdseed:超级用户模式访问阻止

adxsmap指令

clflushoptCLFLUSHOPT指令

clwb:英特尔处理器跟踪


CLWB:AVX-512预取


intel_pt:AVX-512指数和倒数



avx512pf:AVX-512冲突检测


avx512er:SHA1 / SHA256指令扩展

avx512cd:AVX-512字节/字指令


sha_ni:AVX-512 128/256矢量长度扩展

扩展状态功能,CPUID级别0x0000000d:1(eax)



avx512bw:优化的avx512vl


xsaveoptXSAVE


xsavecXSAVEC,ECX = 1

xgetbv1XGETBV / xsaves


英特尔定义的CPU QoS子叶,CPUID级别0x0000000F:0(edx)



XSAVES:LLC QoS

Intel定义的CPU QoS子叶,CPUID级别0x0000000F:1(edx)



XRSTORS: LLC占用率监控

cqm_llc:LLC总MBM监控

cqm_occup_llc:LL C本地MBM监视

AMD定义的CPU功能,CPUID级别0x80000008(ebx)



cqm_mbm_totalcqm_mbm_local指令

clzero:指令退回性能计数器

CLZERO:始终保存/恢复FP错误指针

热和电源管理叶,CPUID级别0x00000006(eax)



irperf(以前为xsaveerptr):数字热传感器

dtherm:英特尔动态加速

dts:始终运行APIC计时器

ida:英特尔功率限制通知

arat:英特尔封装散热状态

pln:英特尔硬件P状态

pts: HWP通知

hwp:HWP活动窗口

hwp_notify:HWP能源绩效偏好

hwp_act_window:HWP封装级请求

AMD SVM功能标识,CPUID级别0x8000000a(edx)



hwp_epp:AMD嵌套页表支持

hwp_pkg_req:AMD LBR虚拟化支持

npt:AMD SVM锁定MSR

lbrv:AMD SVM next_rip保存

svm_lock:AMD TSC扩展支持

nrip_save:AMD VMCB清洁位支持

tsc_scale:AMD ASID刷新支持

vmcb_clean:AMD解码辅助支持

flushbyasid:AMD过滤的暂停拦截器

decodeassists:AMD暂停过滤器阈值

pausefilter:虚拟中断控制器

pfthreshold:虚拟VMSAVE VMLOAD

avic:虚拟GIF

英特尔定义的CPU功能,CPUID级别0x00000007:0(ecx)



vmsave_vmload:AVX512矢量位操作指令

vgif:用户模式指令保护

avx512vbmi:用户空间保护键
/>
umip:启用OS保护键

pku:附加的AVX512矢量位操作离子指令

ospke:Galois Field新指令

avx512_vbmi2:矢量AES

gfni:进位减法乘法双四字

vaes:矢量神经网络指令

vpclmulqdq:VPOPCNT [B,W]和VPSHUF-BITQMB指令

avx512_vnni:DW / QW矢量的POPCNT

avx512_bitalg:5级页表

avx512_vpopcntdq:RDPID指令

AMD定义的CPU功能,CPUID级别0x80000007(ebx)



la57:支持MCA溢出恢复

rdpid:无法纠正的错误包含和恢复

overflow_recov:可扩展的MCA

检测到的CPU错误(Linux定义)




succor:英特尔F00F


smca:CPU FDIV


f00f:Cyrix 6x86昏迷


fdivcoma AMD Erratum 383

amd_tlb_mmatchtlb_mmatch AMD Erratum 400

amd_apic_c1e:本地APIC aka 11AP错误

apic_c1e:FXSAVE泄漏FOP / FIP / FOP


11ap:AAI65,需要在MONITOR

前放置CLFLUSH

fxsave_leak: SYSRET无法修复SS attrs

clflush_monitor:“” IRET转换为16位SS会破坏ESP / RSP高位

sysret_ss_attrs:取消选择器会保留基数
/>
espfix:在GS上没有输入dep的SWAPGS

null_seg:唤醒远程CPU所需的IPI

swapgs_fence:CPU受Erratum 400的影响

monitor:CPU受到崩溃攻击的影响,需要内核页表隔离

amd_e400:CPU受到带有条件分支的Spectre变体1攻击的影响

cpu_meltdown:CPU受到具有间接分支的Spectre变体2攻击的影响

spectre_v1:CPU受到“推测性存储绕过”漏洞(Spectre变体4)的影响。

PS
该列表来自内核源代码spectre_v2。这些标志以与源代码相同的顺序列出。请提供帮助,方法是在缺少功能时添加指向功能说明的链接,为功能名称不简短的功能编写简短说明,并为新的内核版本更新列表。当前列表来自Linux 4.15以及以后的一些补充。


评论


感谢@Gilles和编辑提供的信息性问题及其摘要和详细答案。现在,要检查任何CPU功能,我使用NixCraft中的以下内容,例如用于Intel CPU:$ egrep -wo ^ flags | vmx | ept | vpid | npt | tpr_shadow | flexpriority | vnmi | lm | aes'/ proc / cpuinfo --color |排序-u。还有CLI / GUI出色的i-nex。

–tuk0z
2015年9月22日14:55



出色的解释和链接集合;感谢所有贡献者。

– Paul Gear
17 Mar 8 '17 at 4:11

错误数据来自何处?它似乎未在cpufeatures.h文件中列出。

– Drazisil
18年6月13日在2:12

@Drazisil据我所记得,所有条目均来自cpufeatures.h的指示版本。对描述进行了编辑,以使它们在有人尝试执行此操作时更易于理解和提供更多信息。

–吉尔斯'所以-不再是邪恶的'
18年6月13日在6:22

@TrevorBoydSmith不完全按时间顺序,但接近。每个标志都有一个内部编号,并且标志按数字顺序列出。数字的范围很广,具体取决于分配数字的人。这些数字通常是在每个范围内按时间顺序分配的。

–吉尔斯'所以-不再是邪恶的'
20 Apr 10 '13:56

#2 楼

ARM

在ARM处理器上,features:行中提到了一些功能。此处仅提及与ARM体系结构直接相关的功能,而未提及芯片制造商或片上系统的特定功能。

这些功能是通过使用read_cpuid()查找CPU ID并查找而获得的。在编译时已知的处理器类型定义中,功能以HWCAP_xxx标志的掩码表示。相应的字符串在hwcap_str等中,在setup.c等中。

在下面的列表中,ARMv6引入了SIMD指令和数据类型。 ARMv7提供了高级SIMD指令和数据类型。在32位ARM机器上,neon发出Advanced SIMD信号。而asimd在64位Arm机器上发出高级SIMD信号。



swpSWP指令(原子读-修改-写)

half:半字加载和存储


thumb:Thumb(16位指令集)

26bit:“ 26位”模型(处理器状态寄存器折叠到程序中)计数器)

fastmult:32×32→64位乘法


fpa:浮点加速器


vfp :VFP(早期SIMD矢量浮点指令)

edsp:DSP扩展(ARM9 CPU的'e'变体,以及上述所有其他类型)

java:Jazelle( Java字节码加速器)

iwmmxt:类似于Intel MMX的SIMD指令


crunch:MaverickCrunch协处理器(如果启用了内核支持)

thumbee:ThumbEE


neon:高级SIMD / NEON(AArch64较旧内核上的asimd

vfpv3:VFP版本3

vfpv3d16:VFP版本3带有16个D寄存器


tls:TLS寄存器

vfpv4:VFP版本4带有快速上下文切换

idiva:ARM模式下的SDIVUDIV硬件部门

拇指模式下的idivtSDIVUDIV硬件部门

vfpd32:带有32个D寄存器的VFP


lpae:大型物理地址扩展(> 4GB物理内存32位体系结构)

evtstrm:使用通用体系结构计时器的内核事件流

aes:硬件加速的AES(秘密密钥加密)

pmull{2}:64×64→128位F2m乘法-已认证加密的GCM模式的加速

硬件加速的SHA-256


sha1:硬件加速的CRC-32


sha2线还表示处理器型号。根据型号的不同,在crc32Hardware:下的其他文件中,或者在启动时内核日志消息中可能还存在其他信息。不幸的是,每个ARM CPU制造商都有自己的方法来报告处理器功能(如果有的话)。

评论


zh.wikichip.org/wiki/arm/armv8

–Z玻色子
19年5月2日,9:30

#3 楼

x86

在4.1.3 x86和Intel手册中进行查找

arch/x86/include/asm/cpufeature.h包含完整列表。

定义值的类型为:

X*32 + Y


例如:

#define X86_FEATURE_FPU     ( 0*32+ 0) /* Onboard FPU */


从CPUID提取的功能标志存储在以下位置:



__u32 x86_capability[NCAPINTS + NBUGINTS];的字段
struct cpuinfo_x86 boot_cpu_data定义的






,它通过以下方式初始化x86/kernel/setup.c函数。

每个__init数组元素来自哪里:

| index | eax      | ecx | output | file        |
|-------|----------|-----|--------|-------------|
|     0 |        1 |   0 | edx    | common.c    |
|     1 | 80000001 |     | edx    | common.c    |
|     2 | 80860001 |     | edx    | transmeta.c |
|     3 |          |     |        |             |
|     4 |        1 |   0 | ecx    | common.c    |
|     5 | C0000001 |     | edx    | centaur.c   |
|     6 | 80000001 |     | ecx    | common.c    |
|     7 |          |     |        | scattered.c |
|     8 |          |     |        |             |
|     9 |        7 |   0 | ebx    | common.c    |
|    10 |        D |   1 | eax    | common.c    |
|    11 |        F |   0 | edx    | common.c    |
|    12 |        F |   1 | edx    | common.c    |


注释:


空条目表示:“来自不同地方”或“不可用”。

x86_capability:是index的索引,例如x86_capability


x86_capability[0]eax:是十六进制CPUID的输入值。使用exc的输入(数量较少)称为子叶(在两级树中,其根为exc)。

eax:从中获取CPUID输出的寄存器

output:是定义这些字段的文件。路径是相对于file的。

arch/x86/kernel/cpu/:是Novafora https://www.crunchbase.com收购的CPU供应商的名称https://en.wikipedia.org/wiki/Transmeta。 / organization / novafora


transmeta:是被VIA https://en.wikipedia收购的CPU供应商的名称https://en.wikipedia.org/wiki/Centaur_Technology .org / wiki / VIA_Technologies。 Cyrix是另一个。结论:




大多数条目直接来自CPUID输出寄存器,并在centaur中通过类似以下方式设置:

c->x86_capability[0] = edx;


很容易在Intel手册上找到有关CPUID的批处理。


其他则分散在整个源代码中,并且可以使用common.c逐位设置。

要找到它们,请在set_cpu_cap内使用git grep X86_FEATURE_XXX

通常,您可以从周围的代码中推断出它们对应的CPUID位。 />

其他有趣的事实



标志实际上是在arch/x86上打印的,代码为:

seq_puts(m, "flags\t\t:");
for (i = 0; i < 32*NCAPINTS; i++)
    if (cpu_has(c, i) && x86_cap_flags[i] != NULL)
        seq_printf(m, " %s", x86_cap_flags[i]);


其中:



arch/x86/kernel/cpu/proc.c对功能进行主要检查。

cpu_has包含与每个标志相对应的字符串。

此被作为回调传递给x86_cap_flags[i]系统设置程序。入口点位于proc


fs/proc/cpuinfo.c字符串是由x86_cap_flags直接从arch/x86/kernel/cpu/mkcapflags.h生成的,方法是将其与arch/x86/include/asm/cpufeature.h进行“解析” ...

输出到构建目录的sed和生成的数组如下所示:

const char * const x86_cap_flags[NCAPINTS*32] = {
    [X86_FEATURE_FPU]        = "fpu",
    [X86_FEATURE_VME]        = "vme",


,例如arch/x86/kernel/cpu/capflags.c对应于字符串X86_FEATURE_FPU,依此类推。


"fpu"分为以下两种情况,代码如下:

#define cpu_has(c, bit)                         \
    (__builtin_constant_p(bit) && REQUIRED_MASK_BIT_SET(bit) ? 1 :  \
    test_cpu_cap(c, bit))


它们是:



cpu_has :该标志是内核运行所必需的。

__builtin_constant_p(bit) && REQUIRED_MASK_BIT_SET(bit)内部的数据确定,该注释为:

Define minimum CPUID feature set for kernel These bits are checked
really early to actually display a visible error message before the
kernel dies.  Make sure to assign features to the proper mask!


在编译时已知(内核要求),已经在启动时检查过,如果在编译时知道required-features.h,则可以在编译时解决该检查。

因此检查bit是否为编译的__builtin_constant_p(bit)时间常数。

bit:这将消耗t中的test_cpu_cap数据他CPUID全局




评论


您已经解释了如何从缩写到更长的名称,但是长名称通常并不太容易理解,而cpuid则以更方便的方式实现。我问这个问题在哪里有记载名字的地方。

–吉尔斯'所以-不再是邪恶的'
2015年8月1日在21:04



@Gilles这主要是为那些想要创建表/无法在表中找到其特征的人提供的,就像我一样:-)但是,在大多数情况下,一旦您查看了源代码的正确点,到CPUID的映射就是即时。

– Ciro Santilli郝海东冠状病六四事件法轮功
15年8月1日在21:07

#4 楼

或者,您也可以使用cpuid程序,它必须在debian存储库中。它会转储有关您CPU的所有可能信息并提供一些解释,因此您不会得到那些晦涩的标志。

评论


cpuid扩展缩写。我不会真正称呼它的输出说明。知道ht意味着“超线程”在某种程度上可以解释它,但是知道mmx意味着“ MMX指令集”,而不是那么多,而知道mca意味着“机器检查架构”。

–吉尔斯'所以-不再是邪恶的'
2014年5月22日在18:10

@Gilles ...但是,“ Machine Check Architecture”肯定比“ mca”更好的Google查询;)

–阿洛瓦·马哈德
2014年6月6日10:07



#5 楼

最佳答案是最好的“完整列表位于内核源代码中的arch / x86 / include / asm / cpufeatures.h文件中。”使用该手册和Internet /处理器手册来了解每个标志的含义。

添加一个答案以补充现有答案,并提供来自HP Proliant G8 Intel Xeon服务器的特定示例,以显示lscpu输出,并比较该计算机作为VM主机和在其上运行的VM的lscpu /标志。 Openstack qemu-kvm是在此处运行的虚拟化服务器。



CPU:24 vs 22

2个固定在其上的openstack控制器的CPU VM主机。
总共24个CPU。在VM中可以看到22个可用的CPU。

线程/核心/套接字/ NUMA显示不同。 (请参见下文)

型号,型号名称,步进,CPU MHz,L2缓存大小显示为不同。 (请参阅下面的更多信息)

在主机上:型号:45
型号名称:Intel(R)Xeon(R)CPU E5-2640 0 @ 2.50GHz

在VM上:型号:42
型号名称:Intel Xeon E312xx(Sandy Bridge,IBRS更新)


FLAGS



VM上的额外2个标志:


管理程序:在管理程序上运行
tsc_adjust:TSC调整MSR
TSC =时间戳计数器(Intel寄存器)https: //wiki.osdev.org/TSC
MSR =特定于模型的寄存器https://wiki.osdev.org/MSR





丢失VM上的31个标志:


dts:调试存储(用于调试和性能分析指令的缓冲区)
acpi:通过MSR的ACPI(温度监控和时钟速度调制)
https://wiki.osdev.org/ACPI
ACPI(高级配置和电源接口)是PC的电源管理和配置标准。
:超线程和/或多核
/> tm:自动时钟控制(温度监控器)
pbe:待定暂停时间能够(PBE#引脚)唤醒支持
arch_perfmon:Intel体系结构PerfMon
Pebs:基于精确事件的采样
bts:分支跟踪存储
nonstop_tsc:TSC不会在C状态下停止
TSC =时间戳计数器(Intel寄存器)https://wiki.osdev.org/TSC

aperfmperf:APERF和MPERF是MSR寄存器
”“ APERF和MPERF是可以提供的MSR寄存器反馈
当前的CPU频率。”
dtes64:64位调试存储
监视器:监视/等待支持(Intel SSE3补充)
ds_cpl:CPL质量。调试存储-CPL是当前特权级别(CS寄存器中的位)
vmx:硬件虚拟化:Intel VMX
smx:更安全的模式:TXT(受信任的执行技术)(TPM(受信任的平台模块)支持)
est:增强型SpeedStep
tm2:Thermal Monitor 2
xtpr:发送任务优先级消息
pdcm:性能功能
dca:直接缓存访问
epb: IA32_ENERGY_PERF_BIAS支持
tpr_shadow:英特尔TPR影子
TPR =任务优先级寄存器
vnmi:英特尔虚拟NMI
https://wiki.osdev.org/NMI(不可屏蔽中断)
flexpriority:英特尔FlexPriority
英特尔虚拟化技术
部门:英特尔扩展页表
vpid:英特尔虚拟处理器ID
dtherm:(以前是dts)数字热传感器
ida:英特尔动态加速
pln:英特尔功率限制通知
要点:英特尔封装散热状态
flush_l1d:刷新L1(级别1)D(数据)缓存





lscpu完整输出:

q43 12078q

#6 楼

受@Gilles的最高答案的启发,下面是一个bash脚本(需要bash v4或更高版本,一个网络连接以及一个最新的wget)来注释当前的CPU标志:
 #!/bin/bash

CPUFEATURES="$(wget -qO- "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/plain/arch/x86/include/asm/cpufeatures.h")" 
grep "^flags    " /proc/cpuinfo |
        sed 's/^.*: //' |
        tr ' ' '\n' |
        while read line; do
                echo -n "${line}: "
                echo "$CPUFEATURES" |
                grep "FEATURE_${line^^} " |
                        sed 's|.*) /\* ||' |
                        sed 's| \*/$||'
        done