[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3 2/2] x86/hvm/viridian: Enable APIC assist enlightenment
On Wed, Mar 16, 2016 at 05:44:12PM +0000, Paul Durrant wrote: > This patch adds code to enable the APIC assist enlightenment which, > under certain conditions, means that the guest can avoid an EOI of > the local APIC and thereby avoid a VMEXIT. > > Use of the enlightenment by the hypervisor is under control of the > toolstack, and is added to the default set. > > Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx> > Cc: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> > Cc: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> > Cc: Wei Liu <wei.liu2@xxxxxxxxxx> > Cc: Keir Fraser <keir@xxxxxxx> > Cc: Jan Beulich <jbeulich@xxxxxxxx> > Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> > --- > > v3: > - Re-instated read-modify-write for forwards compatibility > - Fix a coding style issue > > v2: > - Removed some code duplication and unnecessary read-modify-write > operations on the APIC assist word. > - Stated in the xl.cfg text that the enlightenment has no effect if > posted interrupts are in use. > - Added the enlightenment to the default set. > --- > docs/man/xl.cfg.pod.5 | 13 ++++++++- > tools/libxl/libxl_dom.c | 4 +++ > tools/libxl/libxl_types.idl | 1 + > xen/arch/x86/hvm/viridian.c | 59 > ++++++++++++++++++++++++++++++++++---- > xen/arch/x86/hvm/vlapic.c | 58 +++++++++++++++++++++++++++++++++---- > xen/include/asm-x86/hvm/viridian.h | 5 ++++ > xen/include/public/hvm/params.h | 7 ++++- > 7 files changed, 134 insertions(+), 13 deletions(-) > > diff --git a/docs/man/xl.cfg.pod.5 b/docs/man/xl.cfg.pod.5 > index 56b1117..1ba026b 100644 > --- a/docs/man/xl.cfg.pod.5 > +++ b/docs/man/xl.cfg.pod.5 > @@ -1484,10 +1484,21 @@ This set incorporates use of hypercalls for remote > TLB flushing. > This enlightenment may improve performance of Windows guests running > on hosts with higher levels of (physical) CPU contention. > > +=item B<apic_assist> > + > +This set incorporates use of the APIC assist page to avoid EOI of > +the local APIC. > +This enlightenment may improve performance of Windows guests, > +particularly those running PV drivers that make use of per-vcpu > +event channel upcall vectors. I think this can be changed to This enlightenment may improve performance of guests that make use of per-vcpu event channel upcall vectors. Surely Linux can benefit from this too, right? > +Note that this enlightenment will have no effect if the guest is > +using APICv posted interrupts. > + > =item B<defaults> > > This is a special value that enables the default set of groups, which > -is currently the B<base>, B<freq> and B<time_ref_count> groups. > +is currently the B<base>, B<freq>, B<time_ref_count> and B<apic_assist> > +groups. > > =item B<all> > > diff --git a/tools/libxl/libxl_dom.c b/tools/libxl/libxl_dom.c > index b825b98..09d3bca 100644 > --- a/tools/libxl/libxl_dom.c > +++ b/tools/libxl/libxl_dom.c > @@ -211,6 +211,7 @@ static int hvm_set_viridian_features(libxl__gc *gc, > uint32_t domid, > libxl_bitmap_set(&enlightenments, LIBXL_VIRIDIAN_ENLIGHTENMENT_BASE); > libxl_bitmap_set(&enlightenments, LIBXL_VIRIDIAN_ENLIGHTENMENT_FREQ); > libxl_bitmap_set(&enlightenments, > LIBXL_VIRIDIAN_ENLIGHTENMENT_TIME_REF_COUNT); > + libxl_bitmap_set(&enlightenments, > LIBXL_VIRIDIAN_ENLIGHTENMENT_APIC_ASSIST); > } > > libxl_for_each_set_bit(v, info->u.hvm.viridian_enable) { > @@ -253,6 +254,9 @@ static int hvm_set_viridian_features(libxl__gc *gc, > uint32_t domid, > if (libxl_bitmap_test(&enlightenments, > LIBXL_VIRIDIAN_ENLIGHTENMENT_HCALL_REMOTE_TLB_FLUSH)) > mask |= HVMPV_hcall_remote_tlb_flush; > > + if (libxl_bitmap_test(&enlightenments, > LIBXL_VIRIDIAN_ENLIGHTENMENT_APIC_ASSIST)) > + mask |= HVMPV_apic_assist; > + > if (mask != 0 && > xc_hvm_param_set(CTX->xch, > domid, > diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl > index 632c009..e3be957 100644 > --- a/tools/libxl/libxl_types.idl > +++ b/tools/libxl/libxl_types.idl > @@ -221,6 +221,7 @@ libxl_viridian_enlightenment = > Enumeration("viridian_enlightenment", [ > (2, "time_ref_count"), > (3, "reference_tsc"), > (4, "hcall_remote_tlb_flush"), > + (5, "apic_assist"), > ]) > Missing a LIBXL_HAVE macro in libxl.h for this new field. Wei. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |