All of lore.kernel.org
 help / color / mirror / Atom feed
* requiring virtual NMI for Intel processors?
@ 2017-02-20 19:43 Paolo Bonzini
  2017-02-20 20:35 ` Nadav Amit
  2017-02-21 16:26 ` Jim Mattson
  0 siblings, 2 replies; 5+ messages in thread
From: Paolo Bonzini @ 2017-02-20 19:43 UTC (permalink / raw)
  To: KVM list

[-- Attachment #1: Type: text/plain, Size: 777 bytes --]

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

[-- Attachment #2: VMX-CAP --]
[-- Type: text/plain, Size: 9517 bytes --]

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

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: requiring virtual NMI for Intel processors?
  2017-02-20 19:43 requiring virtual NMI for Intel processors? Paolo Bonzini
@ 2017-02-20 20:35 ` Nadav Amit
  2017-02-20 22:00   ` Paolo Bonzini
  2017-02-21 16:26 ` Jim Mattson
  1 sibling, 1 reply; 5+ messages in thread
From: Nadav Amit @ 2017-02-20 20:35 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: KVM list

I have no information that suggests otherwise, but just a couple of small
comments:

1. It seems you look on Xeons (excluding Yonah and Cedarmill). Desktop and
laptop CPUs may have different fusing than servers.

2. No Atoms in the list.


> On Feb 20, 2017, at 11:43 AM, Paolo Bonzini <pbonzini@redhat.com> wrote:
> 
> 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
> <VMX-CAP.txt>

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: requiring virtual NMI for Intel processors?
  2017-02-20 20:35 ` Nadav Amit
@ 2017-02-20 22:00   ` Paolo Bonzini
  2017-02-20 22:41     ` Nadav Amit
  0 siblings, 1 reply; 5+ messages in thread
From: Paolo Bonzini @ 2017-02-20 22:00 UTC (permalink / raw)
  To: Nadav Amit; +Cc: KVM list


> 1. It seems you look on Xeons (excluding Yonah and Cedarmill). Desktop and
> laptop CPUs may have different fusing than servers.

Yeah, the attached file mostly included Xeons because I couldn't find a
desktop or laptop CPU for each generation.  However I did find Penryn and
Nehalem desktop CPUs and they already had vNMI support.

I stopped at Haswell because we still don't support nesting some
Broadwell+ extensions (e.g. PML).  In fact we don't support EPT A/D
bits too, though that one shouldn't be hard to add.

The list of server-only features seems to be small though until Haswell:
only EPT 1GB page tables, PLE and APICv.

> 2. No Atoms in the list.

Centerton (Saltwell-based) is the only one I have access to and it's
the same as Conroe, so it has it.

Paolo

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: requiring virtual NMI for Intel processors?
  2017-02-20 22:00   ` Paolo Bonzini
@ 2017-02-20 22:41     ` Nadav Amit
  0 siblings, 0 replies; 5+ messages in thread
From: Nadav Amit @ 2017-02-20 22:41 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: KVM list

Got it. One last point: although it is highly unlikely to cause a
problem, you may want to check hypervisors that support nested
virtualization too.

FWIW: My VMware Fusion 8.5.3 exposes both features.


> On Feb 20, 2017, at 2:00 PM, Paolo Bonzini <pbonzini@redhat.com> wrote:
> 
> 
>> 1. It seems you look on Xeons (excluding Yonah and Cedarmill). Desktop and
>> laptop CPUs may have different fusing than servers.
> 
> Yeah, the attached file mostly included Xeons because I couldn't find a
> desktop or laptop CPU for each generation.  However I did find Penryn and
> Nehalem desktop CPUs and they already had vNMI support.
> 
> I stopped at Haswell because we still don't support nesting some
> Broadwell+ extensions (e.g. PML).  In fact we don't support EPT A/D
> bits too, though that one shouldn't be hard to add.
> 
> The list of server-only features seems to be small though until Haswell:
> only EPT 1GB page tables, PLE and APICv.
> 
>> 2. No Atoms in the list.
> 
> Centerton (Saltwell-based) is the only one I have access to and it's
> the same as Conroe, so it has it.
> 
> Paolo

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: requiring virtual NMI for Intel processors?
  2017-02-20 19:43 requiring virtual NMI for Intel processors? Paolo Bonzini
  2017-02-20 20:35 ` Nadav Amit
@ 2017-02-21 16:26 ` Jim Mattson
  1 sibling, 0 replies; 5+ messages in thread
From: Jim Mattson @ 2017-02-21 16:26 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: KVM list

Go for it!

On Mon, Feb 20, 2017 at 11:43 AM, Paolo Bonzini <pbonzini@redhat.com> wrote:
> 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

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2017-02-21 16:26 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-02-20 19:43 requiring virtual NMI for Intel processors? Paolo Bonzini
2017-02-20 20:35 ` Nadav Amit
2017-02-20 22:00   ` Paolo Bonzini
2017-02-20 22:41     ` Nadav Amit
2017-02-21 16:26 ` Jim Mattson

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.