[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCHv5 0/2] x86/ept: reduce translation invalidation impact

> From: David Vrabel [mailto:david.vrabel@xxxxxxxxxx]
> Sent: Thursday, December 17, 2015 11:17 PM
> This series improves the performance of EPT by further reducing the
> impact of the translation invalidations (ept_sync_domain()). By:
> a) Deferring invalidations until the p2m write lock is released.

This is only for PATCH 2/2 right? No description of PATCH 1/2 in this summary.

> Prior to this change a 16 VCPU guest could not be successfully
> migrated on an (admittedly slow) 160 PCPU box because the p2m write
> lock was held for such extended periods of time.  This starved the
> read lock needed (by the toolstack) to map the domain's memory,
> triggering the watchdog.
> After this change a 64 VCPU guest could be successfully migrated.
> ept_sync_domain() is very expensive because:
> a) it uses on_selected_cpus() and the IPI cost can be particularly
>    high for a multi-socket machine.
> b) on_selected_cpus() is serialized by its own spin lock.
> On this particular box, ept_sync_domain() could take ~3-5 ms.
> Simply using a fair rw lock was not sufficient to resolve this (but it
> was an improvement) as the cost of the ept_sync_domain calls() was
> still delaying the read locks enough for the watchdog to trigger (the
> toolstack maps a batch of 1024 GFNs at a time, which means trying to
> acquire the p2m read lock 1024 times).
> Changes in v5:
> - Fix PoD by explicitly doing an invalidation before reclaiming zero
>   pages.
> - Use the same mechanism for dealing with freeing page table pages.
>   This isn't a common path and its simpler than the deferred list.
> Changes in v4:
> - __ept_sync_domain() is a no-op -- invalidates are done before VMENTER.
> - initialize ept->invalidate to all ones so the initial invalidate is
>   always done.
> Changes in v3:
> - Drop already applied "x86/ept: remove unnecessary sync after
>   resolving misconfigured entries".
> - Replaced "mm: don't free pages until mm locks are released" with
>   "x86/ept: invalidate guest physical mappings on VMENTER".
> Changes in v2:
> - Use a per-p2m (not per-CPU) list for page table pages to be freed.
> - Hold the write lock while updating the synced_mask.
> David

Xen-devel mailing list



Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.