I spent some time collecting vmxcap output for various Intel processors. I tested Prescott (Cedar Mill actually), Yonah (32-bit only) and every microarchitecture from Conroe to Haswell. As far as I can tell, these are all Intel processors that supported virtualization. My notes are attached. The only ones without virtual NMI and NMI-window exiting were the Cedar Mill and Yonah. One is a Pentium 4 microarchitecture that one should use as a toaster rather than as a hypervisor; the other is not even 64-bit capable. It also has VMCS restricted to 32 bit addresses, so if it ever had >3.5GB memory installed KVM would break. Based on this, I'd like to drop the code that emulates the NMI window and just require these two features in KVM 4.11+. Any objections? Paolo
Cedar Mill (15:6:4) Prescott Basic VMX Information Hex: 0x1a100000000003 Revision 3 VMCS size 4096 VMCS restricted to 32 bit addresses no Dual-monitor support yes !! VMCS memory type 6 INS/OUTS instruction information no IA32_VMX_TRUE_*_CTLS support no pin-based controls External interrupt exiting yes NMI exiting yes Virtual NMIs no Activate VMX-preemption timer no Process posted interrupts no primary processor-based controls Interrupt window exiting yes Use TSC offsetting yes HLT exiting yes INVLPG exiting yes MWAIT exiting yes RDPMC exiting yes RDTSC exiting yes CR3-load exiting forced CR3-store exiting forced CR8-load exiting yes CR8-store exiting yes Use TPR shadow yes NMI-window exiting no MOV-DR exiting yes Unconditional I/O exiting yes Use I/O bitmaps yes Monitor trap flag no Use MSR bitmaps no MONITOR exiting yes PAUSE exiting yes Activate secondary control no secondary processor-based controls Virtualize APIC accesses no Enable EPT no Descriptor-table exiting no Enable RDTSCP no Virtualize x2APIC mode no Enable VPID no WBINVD exiting no Unrestricted guest no APIC register emulation no Virtual interrupt delivery no PAUSE-loop exiting no RDRAND exiting no Enable INVPCID no Enable VM functions no VMCS shadowing no RDSEED exiting no EPT-violation #VE no Enable XSAVES/XRSTORS no TSC scaling no VM-Exit controls Save debug controls forced Host address-space size yes Load IA32_PERF_GLOBAL_CTRL no Acknowledge interrupt on exit yes Save IA32_PAT no Load IA32_PAT no Save IA32_EFER no Load IA32_EFER no Save VMX-preemption timer value no VM-Entry controls Load debug controls forced IA-32e mode guest yes Entry to SMM yes !! Deactivate dual-monitor treatment yes !! Load IA32_PERF_GLOBAL_CTRL no Load IA32_PAT no Load IA32_EFER no Miscellaneous data Hex: 0x401c0 VMX-preemption timer scale (log2) 0 Store EFER.LMA into IA-32e mode guest control no HLT activity state yes Shutdown activity state yes Wait-for-SIPI activity state yes IA32_SMBASE support no Number of CR3-target values 4 MSR-load/store count recommendation 0 IA32_SMM_MONITOR_CTL[2] can be set to 1 no VMWRITE to VM-exit information fields no MSEG revision identifier 0 VPID and EPT capabilities Hex: 0x0 Execute-only EPT translations no Page-walk length 4 no Paging-structure memory type UC no Paging-structure memory type WB no 2MB EPT pages no 1GB EPT pages no INVEPT supported no EPT accessed and dirty flags no Single-context INVEPT no All-context INVEPT no INVVPID supported no Individual-address INVVPID no Single-context INVVPID no All-context INVVPID no Single-context-retaining-globals INVVPID no VM Functions Hex: 0x0 EPTP Switching no Yonah (6:14:12) Intel(R) Core(TM) Duo CPU T2500 @ 2.00GHz flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe constant_tsc pni monitor vmx est tm2 xtpr CR8-load exiting no CR8-store exiting no Use TPR shadow no Use MSR bitmaps yes Conroe (6:15:11) Intel(R) Xeon(R) CPU X3220 @ 2.40GHz Basic VMX Information INS/OUTS instruction information yes pin-based controls Virtual NMIs yes primary processor-based controls NMI-window exiting yes Use MSR bitmaps yes secondary processor-based controls Virtualize APIC accesses yes Penryn (6:23:10) Intel(R) Xeon(R) CPU E5430 @ 2.66GHz same as Conroe but: secondary processor-based controls WBINVD exiting yes VM-Exit controls Load IA32_PERF_GLOBAL_CTRL yes VM-Entry controls Load IA32_PERF_GLOBAL_CTRL yes Nehalem (6:26:5) Intel(R) Xeon(R) CPU E5530 @ 2.40GHz same as Penryn but: Basic VMX Information IA32_VMX_TRUE_*_CTLS support yes pin-based controls Activate VMX-preemption timer yes primary processor-based controls CR3-load exiting default CR3-store exiting default Monitor trap flag yes secondary processor-based controls Enable EPT yes Descriptor-table exiting yes Enable RDTSCP yes Virtualize x2APIC mode yes Enable VPID yes VM-Exit controls Save debug controls default Save IA32_PAT yes Load IA32_PAT yes Save IA32_EFER yes Load IA32_EFER yes Save VMX-preemption timer value yes VM-Entry controls Load debug controls default Load IA32_PAT yes Load IA32_EFER yes Miscellaneous data Hex: 0x401c5 VMX-preemption timer scale (log2) 5 VPID and EPT capabilities Hex: 0xf0106114141 Execute-only EPT translations yes Page-walk length 4 yes Paging-structure memory type UC yes Paging-structure memory type WB yes 2MB EPT pages yes INVEPT supported yes Single-context INVEPT yes All-context INVEPT yes INVVPID supported yes Individual-address INVVPID yes Single-context INVVPID yes All-context INVVPID yes Single-context-retaining-globals INVVPID yes Westmere 6:44:2 Intel(R) Xeon(R) CPU E5620 @ 2.40GHz same as Nehalem but: secondary processor-based controls Unrestricted guest yes PAUSE-loop exiting yes Miscellaneous data Store EFER.LMA into IA-32e mode guest control yes (forgot to check 1GB pages) SandyBridge 6:45:7 Intel(R) Xeon(R) CPU E5-2407 0 @ 2.20GHz same as Westmere but: Miscellaneous data IA32_SMM_MONITOR_CTL[2] can be set to 1 yes !! VPID and EPT capabilities 1GB EPT pages yes IvyBridge 6:62:4 Intel(R) Xeon(R) CPU E5-2620 v2 @ 2.10GHz same as SandyBridge but: pin-based controls Process posted interrupts yes secondary processor-based controls APIC register emulation yes Virtual interrupt delivery yes RDRAND exiting yes Haswell 6:63:2 Intel(R) Xeon(R) CPU E5-2697 v3 @ 2.60GHz same as Haswell but: secondary processor-based controls Enable INVPCID yes Enable VM functions yes VMCS shadowing yes VM-Entry controls IA32_SMBASE support yes !! VMWRITE to VM-exit information fields yes VPID and EPT capabilities EPT accessed and dirty flags yes VM Functions EPTP Switching yes