mirror of
https://github.com/mii443/qemu.git
synced 2025-08-22 15:15:46 +00:00
migration/multifd: Support incoming mapped-ram stream format
For the incoming mapped-ram migration we need to read the ramblock headers, get the pages bitmap and send the host address of each non-zero page to the multifd channel thread for writing. Usage on HMP is: (qemu) migrate_set_capability multifd on (qemu) migrate_set_capability mapped-ram on (qemu) migrate_incoming file:migfile (the ram.h include needs to move because we've been previously relying on it being included from migration.c. Now file.h will start including multifd.h before migration.o is processed) Reviewed-by: Peter Xu <peterx@redhat.com> Signed-off-by: Fabiano Rosas <farosas@suse.de> Link: https://lore.kernel.org/r/20240229153017.2221-22-farosas@suse.de Signed-off-by: Peter Xu <peterx@redhat.com>
This commit is contained in:
@ -3952,6 +3952,22 @@ void colo_flush_ram_cache(void)
|
||||
trace_colo_flush_ram_cache_end();
|
||||
}
|
||||
|
||||
static size_t ram_load_multifd_pages(void *host_addr, size_t size,
|
||||
uint64_t offset)
|
||||
{
|
||||
MultiFDRecvData *data = multifd_get_recv_data();
|
||||
|
||||
data->opaque = host_addr;
|
||||
data->file_offset = offset;
|
||||
data->size = size;
|
||||
|
||||
if (!multifd_recv()) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
static bool read_ramblock_mapped_ram(QEMUFile *f, RAMBlock *block,
|
||||
long num_pages, unsigned long *bitmap,
|
||||
Error **errp)
|
||||
@ -3981,8 +3997,14 @@ static bool read_ramblock_mapped_ram(QEMUFile *f, RAMBlock *block,
|
||||
|
||||
size = MIN(unread, MAPPED_RAM_LOAD_BUF_SIZE);
|
||||
|
||||
read = qemu_get_buffer_at(f, host, size,
|
||||
block->pages_offset + offset);
|
||||
if (migrate_multifd()) {
|
||||
read = ram_load_multifd_pages(host, size,
|
||||
block->pages_offset + offset);
|
||||
} else {
|
||||
read = qemu_get_buffer_at(f, host, size,
|
||||
block->pages_offset + offset);
|
||||
}
|
||||
|
||||
if (!read) {
|
||||
goto err;
|
||||
}
|
||||
|
Reference in New Issue
Block a user