[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2] x86: do not enable global pages when virtualized on AMD hardware
On 04.12.2019 11:44, Roger Pau Monne wrote: > When using global pages a full tlb flush can only be performed by > toggling the PGE bit in CR4, which is usually quite expensive in terms > of performance when running virtualized. This is specially relevant on > AMD hardware, which doesn't have the ability to do selective CR4 > trapping, but can also be relevant on Intel if the underlying > hypervisor also traps accesses to the PGE CR4 bit. > > In order to avoid this performance penalty, do not use global pages > when running virtualized on AMD hardware. A command line option > 'global-pages' is provided in order to allow the user to select > whether global pages will be enabled for PV guests. > > The above figures are from a PV shim running on AMD hardware with > 32 vCPUs: > > PGE enabled, x2APIC mode: > > (XEN) Global lock flush_lock: addr=ffff82d0804b01c0, lockval=1adb1adb, not > locked > (XEN) lock:1841883(1375128998543), block:1658716(10193054890781) > > Average lock time: 746588ns > Average block time: 6145147ns > > PGE disabled, x2APIC mode: > > (XEN) Global lock flush_lock: addr=ffff82d0804af1c0, lockval=a8bfa8bf, not > locked > (XEN) lock:2730175(657505389886), block:2039716(2963768247738) > > Average lock time: 240829ns > Average block time: 1453029ns > > As seen from the above figures the lock and block time of the flush > lock is reduced to approximately 1/3 of the original value. > > Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx> > --- > Changes since v1: > - Provide command line option to enable/disable PGE. > - Only disable PGE on AMD hardware when virtualized. > - Document the global-pages option. > --- > docs/misc/xen-command-line.pandoc | 13 +++++++++++++ > xen/arch/x86/pv/domain.c | 9 ++++++++- > 2 files changed, 21 insertions(+), 1 deletion(-) > > diff --git a/docs/misc/xen-command-line.pandoc > b/docs/misc/xen-command-line.pandoc > index d9495ef6b9..7be30f2766 100644 > --- a/docs/misc/xen-command-line.pandoc > +++ b/docs/misc/xen-command-line.pandoc > @@ -1087,6 +1087,19 @@ value settable via Xen tools. > > Dom0 is using this value for sizing its maptrack table. > > +### global-pages (x86) > +> `= <boolean>` > + > +> Default: `true` unless running virtualized on AMD hardware > + > +Set whether the PGE bit in CR4 will be enabled for PV guests. This controls > the > +usage of global pages, and thus the need to perform tlb flushes by writing to > +CR4. > + > +Note it's disabled by default when running virtualized on AMD hardware since > +AMD SVM doesn't support selective trapping of CR4, so global pages are not > +enabled in order to reduce the overhead of tlb flushes. > + > ### guest_loglvl > > `= <level>[/<rate-limited level>]` where level is `none | error | warning > | info | debug | all` > > diff --git a/xen/arch/x86/pv/domain.c b/xen/arch/x86/pv/domain.c > index 4b6f48dea2..93fb823d63 100644 > --- a/xen/arch/x86/pv/domain.c > +++ b/xen/arch/x86/pv/domain.c > @@ -118,11 +118,18 @@ unsigned long pv_fixup_guest_cr4(const struct vcpu *v, > unsigned long cr4) > (mmu_cr4_features & PV_CR4_GUEST_VISIBLE_MASK)); > } > > +static int opt_global_pages = -1; int8_t __read_mostly > +boolean_runtime_param("global-pages", opt_global_pages); > + > unsigned long pv_make_cr4(const struct vcpu *v) > { > const struct domain *d = v->domain; > unsigned long cr4 = mmu_cr4_features & > ~(X86_CR4_PCIDE | X86_CR4_PGE | X86_CR4_TSD); > + bool pge = opt_global_pages == -1 ? (!cpu_has_hypervisor || > + boot_cpu_data.x86_vendor != > + X86_VENDOR_AMD) > + : !!opt_global_pages; Let's avoid re-doing this evaluation each time we come here. Post boot the value can only change to 0 or 1. Hence in some __init function you can apply the default calculation done here. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |