[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH V7 16/24] migration: cpr-transfer mode
From: |
Markus Armbruster |
Subject: |
Re: [PATCH V7 16/24] migration: cpr-transfer mode |
Date: |
Wed, 29 Jan 2025 07:23:03 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) |
Steve Sistare <steven.sistare@oracle.com> writes:
> Add the cpr-transfer migration mode, which allows the user to transfer
> a guest to a new QEMU instance on the same host with minimal guest pause
> time, by preserving guest RAM in place, albeit with new virtual addresses
> in new QEMU, and by preserving device file descriptors. Pages that were
> locked in memory for DMA in old QEMU remain locked in new QEMU, because the
> descriptor of the device that locked them remains open.
>
> cpr-transfer preserves memory and devices descriptors by sending them to
> new QEMU over a unix domain socket using SCM_RIGHTS. Such CPR state cannot
> be sent over the normal migration channel, because devices and backends
> are created prior to reading the channel, so this mode sends CPR state
> over a second "cpr" migration channel. New QEMU reads the cpr channel
> prior to creating devices or backends. The user specifies the cpr channel
> in the channel arguments on the outgoing side, and in a second -incoming
> command-line parameter on the incoming side.
>
> The user must start old QEMU with the the '-machine aux-ram-share=on' option,
> which allows anonymous memory to be transferred in place to the new process
> by transferring a memory descriptor for each ram block. Memory-backend
> objects must have the share=on attribute, but memory-backend-epc is not
> supported.
>
> The user starts new QEMU on the same host as old QEMU, with command-line
> arguments to create the same machine, plus the -incoming option for the
> main migration channel, like normal live migration. In addition, the user
> adds a second -incoming option with channel type "cpr". This CPR channel
> must support file descriptor transfer with SCM_RIGHTS, i.e. it must be a
> UNIX domain socket.
>
> To initiate CPR, the user issues a migrate command to old QEMU, adding
> a second migration channel of type "cpr" in the channels argument.
> Old QEMU stops the VM, saves state to the migration channels, and enters
> the postmigrate state. New QEMU mmap's memory descriptors, and execution
> resumes.
>
> The implementation splits qmp_migrate into start and finish functions.
> Start sends CPR state to new QEMU, which responds by closing the CPR
> channel. Old QEMU detects the HUP then calls finish, which connects the
> main migration channel.
>
> In summary, the usage is:
>
> qemu-system-$arch -machine aux-ram-share=on ...
>
> start new QEMU with "-incoming <main-uri> -incoming <cpr-channel>"
>
> Issue commands to old QEMU:
> migrate_set_parameter mode cpr-transfer
>
> {"execute": "migrate", ...
> {"channel-type": "main"...}, {"channel-type": "cpr"...} ... }
>
> Signed-off-by: Steve Sistare <steven.sistare@oracle.com>
> Reviewed-by: Peter Xu <peterx@redhat.com>
Acked-by: Markus Armbruster <armbru@redhat.com>
- [PATCH V7 09/24] hostmem-memfd: preserve for cpr, (continued)
- [PATCH V7 09/24] hostmem-memfd: preserve for cpr, Steve Sistare, 2025/01/15
- [PATCH V7 06/24] machine: aux-ram-share option, Steve Sistare, 2025/01/15
- [PATCH V7 11/24] migration: enhance migrate_uri_parse, Steve Sistare, 2025/01/15
- [PATCH V7 12/24] migration: incoming channel, Steve Sistare, 2025/01/15
- [PATCH V7 14/24] migration: VMSTATE_FD, Steve Sistare, 2025/01/15
- [PATCH V7 13/24] migration: SCM_RIGHTS for QEMUFile, Steve Sistare, 2025/01/15
- [PATCH V7 17/24] migration-test: memory_backend, Steve Sistare, 2025/01/15
- [PATCH V7 15/24] migration: cpr-transfer save and load, Steve Sistare, 2025/01/15
- [PATCH V7 10/24] hostmem-shm: preserve for cpr, Steve Sistare, 2025/01/15
- [PATCH V7 16/24] migration: cpr-transfer mode, Steve Sistare, 2025/01/15
- Re: [PATCH V7 16/24] migration: cpr-transfer mode,
Markus Armbruster <=
- [PATCH V7 22/24] tests/qtest: assert qmp connected, Steve Sistare, 2025/01/15
- [PATCH V7 21/24] tests/qtest: enhance migration channels, Steve Sistare, 2025/01/15
- [PATCH V7 24/24] migration: cpr-transfer documentation, Steve Sistare, 2025/01/15
- Re: [PATCH V7 24/24] migration: cpr-transfer documentation, Fabiano Rosas, 2025/01/17
- Re: [PATCH V7 24/24] migration: cpr-transfer documentation, Steven Sistare, 2025/01/17
- Re: [PATCH V7 24/24] migration: cpr-transfer documentation, Fabiano Rosas, 2025/01/17
- Re: [PATCH V7 24/24] migration: cpr-transfer documentation, Steven Sistare, 2025/01/17
- Re: [PATCH V7 24/24] migration: cpr-transfer documentation, Fabiano Rosas, 2025/01/17
- Re: [PATCH V7 24/24] migration: cpr-transfer documentation, Steven Sistare, 2025/01/17
- Re: [PATCH V7 24/24] migration: cpr-transfer documentation, Fabiano Rosas, 2025/01/17