Re: [PATCH v6 06/13] KVM: nVMX: optimize prepare_vmcs02{,_full} for Enlightened VMCS case

2018-10-18 Thread Paolo Bonzini
On 18/10/2018 13:14, Vitaly Kuznetsov wrote: > > Based on that my suggestion would be to shadow GUEST_SS_AR_BYTES, keep > GUEST_SS_AR_BYTES and unshadow the rest (GUEST_ES_BASE, > GUEST_CS_SELECTOR, GUEST_CS_LIMIT, GUEST_CS_BASE). I can do this as a > separate patch as I see this series is already

Re: [PATCH v6 06/13] KVM: nVMX: optimize prepare_vmcs02{,_full} for Enlightened VMCS case

2018-10-18 Thread Vitaly Kuznetsov
Paolo Bonzini writes: > On 17/10/2018 19:08, Jim Mattson wrote: >> I believe that ESXi reads GUEST_CS_AR_BYTES on every VM-exit to >> determine code size. > > Which makes me wonder, maybe we should add GUEST_SS_AR_BYTES which is > where the CPL lives. But then your tests from last year didn't fi

Re: [PATCH v6 06/13] KVM: nVMX: optimize prepare_vmcs02{,_full} for Enlightened VMCS case

2018-10-17 Thread Paolo Bonzini
On 17/10/2018 19:08, Jim Mattson wrote: > I believe that ESXi reads GUEST_CS_AR_BYTES on every VM-exit to > determine code size. Which makes me wonder, maybe we should add GUEST_SS_AR_BYTES which is where the CPL lives. But then your tests from last year didn't find it. Paolo > On Wed, Oct 17,

Re: [PATCH v6 06/13] KVM: nVMX: optimize prepare_vmcs02{,_full} for Enlightened VMCS case

2018-10-17 Thread Jim Mattson
I believe that ESXi reads GUEST_CS_AR_BYTES on every VM-exit to determine code size. On Wed, Oct 17, 2018 at 10:02 AM, Paolo Bonzini wrote: > On 17/10/2018 16:47, Vitaly Kuznetsov wrote: + if (!hv_evmcs || !(hv_evmcs->hv_clean_fields & + HV_VMX_ENLIGHTENED_CLEAN_F

Re: [PATCH v6 06/13] KVM: nVMX: optimize prepare_vmcs02{,_full} for Enlightened VMCS case

2018-10-17 Thread Paolo Bonzini
On 17/10/2018 16:47, Vitaly Kuznetsov wrote: >>> + if (!hv_evmcs || !(hv_evmcs->hv_clean_fields & >>> + HV_VMX_ENLIGHTENED_CLEAN_FIELD_GUEST_GRP2)) { >>> + vmcs_write16(GUEST_CS_SELECTOR, vmcs12->guest_cs_selector); >>> + vmcs_write32(GUEST_CS_LIMIT, vmcs1

Re: [PATCH v6 06/13] KVM: nVMX: optimize prepare_vmcs02{,_full} for Enlightened VMCS case

2018-10-17 Thread Vitaly Kuznetsov
Paolo Bonzini writes: > On 16/10/2018 18:50, Vitaly Kuznetsov wrote: >> +if (!hv_evmcs || !(hv_evmcs->hv_clean_fields & >> + HV_VMX_ENLIGHTENED_CLEAN_FIELD_GUEST_GRP2)) { >> +vmcs_write16(GUEST_CS_SELECTOR, vmcs12->guest_cs_selector); >> +vmcs_wri

Re: [PATCH v6 06/13] KVM: nVMX: optimize prepare_vmcs02{,_full} for Enlightened VMCS case

2018-10-16 Thread Paolo Bonzini
On 16/10/2018 18:50, Vitaly Kuznetsov wrote: > + if (!hv_evmcs || !(hv_evmcs->hv_clean_fields & > +HV_VMX_ENLIGHTENED_CLEAN_FIELD_GUEST_GRP2)) { > + vmcs_write16(GUEST_CS_SELECTOR, vmcs12->guest_cs_selector); > + vmcs_write32(GUEST_CS_LIMIT, vmcs1

[PATCH v6 06/13] KVM: nVMX: optimize prepare_vmcs02{,_full} for Enlightened VMCS case

2018-10-16 Thread Vitaly Kuznetsov
When Enlightened VMCS is in use by L1 hypervisor we can avoid vmwriting VMCS fields which did not change. Our first goal is to achieve minimal impact on traditional VMCS case so we're not wrapping each vmwrite() with an if-changed checker. We also can't utilize static keys as Enlightened VMCS usag