[PATCH v2 00/15] migration: Postcopy Preempt-Full

Peter Xu posted 15 patches 1 year, 6 months ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20221011215559.602584-1-peterx@redhat.com
Maintainers: Juan Quintela <quintela@redhat.com>, "Dr. David Alan Gilbert" <dgilbert@redhat.com>
migration/migration.c |  47 +--
migration/migration.h |   7 -
migration/multifd.c   |   4 +-
migration/ram.c       | 720 +++++++++++++++++++-----------------------
migration/ram.h       |  20 ++
5 files changed, 379 insertions(+), 419 deletions(-)
[PATCH v2 00/15] migration: Postcopy Preempt-Full
Posted by Peter Xu 1 year, 6 months ago
Based-on: <20221004182430.97638-1-peterx@redhat.com>
  [PATCH v2 0/5] migration: Bug fixes (prepare for preempt-full)

Tree is here:
  https://github.com/xzpeter/qemu/tree/preempt-full

RFC: https://lore.kernel.org/r/20220829165659.96046-1-peterx@redhat.com
v1:  https://lore.kernel.org/r/20220920225106.48451-1-peterx@redhat.com

This patchset is v2 version of preempt-full series.

v2 changelog:
- Add r-bs
- Rename release_lock to preempt_active [Dave]
- Create MigrationAtomicStats structure, maintaining the 4 stats fields
  that may need atomic access since they'll be accessed by multiple
  threads. define them with Stat64.  Add rich comment. [Dave]
- One more patch added (patch 1) to fix another deadlock; not easy to
  reproduce but actually quite obvious..

The existing preempt code has reduced ramdom page req latency over 10Gbps
network from ~12ms to ~500us which has already landed.

This preempt-full series can further reduces that ~500us to ~230us per my
initial test.

Note that no new capability is needed, IOW it's fully compatible with the
existing preempt mode.  So the naming is actually not important but just to
identify the difference on the binaries.

The logic of the series is simple: send urgent pages in rp-return thread
rather than migration thread.  It also means rp-thread will take over the
ownership of the newly created preempt channel.  It can slow down rp-return
thread on receiving page requests, but I don't really see a major issue
with it so far but only benefits.

For detailed performance numbers, please refer to the rfc cover letter.

Please have a look, thanks.

Peter Xu (15):
  migration: Take bitmap mutex when completing ram migration
  migration: Add postcopy_preempt_active()
  migration: Cleanup xbzrle zero page cache update logic
  migration: Trivial cleanup save_page_header() on same block check
  migration: Remove RAMState.f references in compression code
  migration: Yield bitmap_mutex properly when sending/sleeping
  migration: Use atomic ops properly for page accountings
  migration: Teach PSS about host page
  migration: Introduce pss_channel
  migration: Add pss_init()
  migration: Make PageSearchStatus part of RAMState
  migration: Move last_sent_block into PageSearchStatus
  migration: Send requested page directly in rp-return thread
  migration: Remove old preempt code around state maintainance
  migration: Drop rs->f

 migration/migration.c |  47 +--
 migration/migration.h |   7 -
 migration/multifd.c   |   4 +-
 migration/ram.c       | 720 +++++++++++++++++++-----------------------
 migration/ram.h       |  20 ++
 5 files changed, 379 insertions(+), 419 deletions(-)

-- 
2.37.3