qemu/migration
Fabiano Rosas c2d5c4a7cb migration/ram: Add outgoing 'mapped-ram' migration
Implement the outgoing migration side for the 'mapped-ram' capability.

A bitmap is introduced to track which pages have been written in the
migration file. Pages are written at a fixed location for every
ramblock. Zero pages are ignored as they'd be zero in the destination
migration as well.

The migration stream is altered to put the dirty pages for a ramblock
after its header instead of having a sequential stream of pages that
follow the ramblock headers.

Without mapped-ram (current):        With mapped-ram (new):

 ---------------------               --------------------------------
 | ramblock 1 header |               | ramblock 1 header            |
 ---------------------               --------------------------------
 | ramblock 2 header |               | ramblock 1 mapped-ram header |
 ---------------------               --------------------------------
 | ...               |               | padding to next 1MB boundary |
 ---------------------               | ...                          |
 | ramblock n header |               --------------------------------
 ---------------------               | ramblock 1 pages             |
 | RAM_SAVE_FLAG_EOS |               | ...                          |
 ---------------------               --------------------------------
 | stream of pages   |               | ramblock 2 header            |
 | (iter 1)          |               --------------------------------
 | ...               |               | ramblock 2 mapped-ram header |
 ---------------------               --------------------------------
 | RAM_SAVE_FLAG_EOS |               | padding to next 1MB boundary |
 ---------------------               | ...                          |
 | stream of pages   |               --------------------------------
 | (iter 2)          |               | ramblock 2 pages             |
 | ...               |               | ...                          |
 ---------------------               --------------------------------
 | ...               |               | ...                          |
 ---------------------               --------------------------------
                                     | RAM_SAVE_FLAG_EOS            |
                                     --------------------------------
                                     | ...                          |
                                     --------------------------------

where:
 - ramblock header: the generic information for a ramblock, such as
   idstr, used_len, etc.

 - ramblock mapped-ram header: the new information added by this
   feature: bitmap of pages written, bitmap size and offset of pages
   in the migration file.

Signed-off-by: Nikolay Borisov <nborisov@suse.com>
Reviewed-by: Peter Xu <peterx@redhat.com>
Signed-off-by: Fabiano Rosas <farosas@suse.de>
Link: https://lore.kernel.org/r/20240229153017.2221-10-farosas@suse.de
Signed-off-by: Peter Xu <peterx@redhat.com>
2024-03-01 15:42:04 +08:00
..
block-dirty-bitmap.c Replace "iothread lock" with "BQL" in comments 2024-01-08 10:45:43 -05:00
block.c Replace "iothread lock" with "BQL" in comments 2024-01-08 10:45:43 -05:00
block.h
channel-block.c
channel-block.h
channel.c migration: Fix migration_channel_read_peek() error path 2024-01-04 09:52:42 +08:00
channel.h
colo-failover.c
colo.c Replace "iothread lock" with "BQL" in comments 2024-01-08 10:45:43 -05:00
dirtyrate.c system/cpus: rename qemu_mutex_lock_iothread() to bql_lock() 2024-01-08 10:45:43 -05:00
dirtyrate.h
exec.c
exec.h
fd.c
fd.h
file.c
file.h
global_state.c migration 1st pull for 9.0 2024-01-05 13:35:25 +00:00
meson.build
migration-hmp-cmds.c migration: Plug memory leak on HMP migrate error path 2024-01-29 11:02:12 +08:00
migration-stats.c
migration-stats.h
migration.c migration: Add mapped-ram URI compatibility check 2024-03-01 15:42:04 +08:00
migration.h migration: stop vm for cpr 2024-02-28 11:31:28 +08:00
multifd-zlib.c migration/multifd: Move header prepare/fill into send_prepare() 2024-02-05 14:42:10 +08:00
multifd-zstd.c migration/multifd: Move header prepare/fill into send_prepare() 2024-02-05 14:42:10 +08:00
multifd.c migration/multifd: Cleanup multifd_recv_sync_main 2024-03-01 15:42:04 +08:00
multifd.h migration/multifd: Drop registered_yank 2024-02-28 11:31:28 +08:00
options.c migration/ram: Introduce 'mapped-ram' migration capability 2024-03-01 15:42:04 +08:00
options.h migration/ram: Introduce 'mapped-ram' migration capability 2024-03-01 15:42:04 +08:00
page_cache.c
page_cache.h
postcopy-ram.c migration: remove error from notifier data 2024-02-28 11:31:28 +08:00
postcopy-ram.h migration: remove error from notifier data 2024-02-28 11:31:28 +08:00
qemu-file.c migration/qemu-file: add utility methods for working with seekable channels 2024-03-01 15:42:04 +08:00
qemu-file.h migration/qemu-file: add utility methods for working with seekable channels 2024-03-01 15:42:04 +08:00
ram-compress.c
ram-compress.h
ram.c migration/ram: Add outgoing 'mapped-ram' migration 2024-03-01 15:42:04 +08:00
ram.h
rdma.c migration/rdma: define htonll/ntohll only if not predefined 2024-01-16 11:16:10 +08:00
rdma.h
savevm.c migration/ram: Introduce 'mapped-ram' migration capability 2024-03-01 15:42:04 +08:00
savevm.h
socket.c migration/multifd: Drop unnecessary helper to destroy IOC 2024-02-28 11:31:28 +08:00
socket.h migration/multifd: Drop unnecessary helper to destroy IOC 2024-02-28 11:31:28 +08:00
target.c
threadinfo.c
threadinfo.h
tls.c
tls.h
trace-events migration/multifd: Cleanup multifd_recv_sync_main 2024-03-01 15:42:04 +08:00
trace.h
vmstate-types.c
vmstate.c migration: Make VMStateDescription.subsections const 2023-12-29 11:17:30 +11:00
xbzrle.c
xbzrle.h
yank_functions.c migration/yank: Use channel features 2024-01-29 11:02:12 +08:00
yank_functions.h