mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 07:43:54 -06:00
migration: Postcopy preemption preparation on channel creation
Create a new socket for postcopy to be prepared to send postcopy requested pages via this specific channel, so as to not get blocked by precopy pages. A new thread is also created on dest qemu to receive data from this new channel based on the ram_load_postcopy() routine. The ram_load_postcopy(POSTCOPY) branch and the thread has not started to function, and that'll be done in follow up patches. Cleanup the new sockets on both src/dst QEMUs, meanwhile look after the new thread too to make sure it'll be recycled properly. Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Reviewed-by: Juan Quintela <quintela@redhat.com> Signed-off-by: Peter Xu <peterx@redhat.com> Message-Id: <20220707185502.27149-1-peterx@redhat.com> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com> dgilbert: With Peter's fix to quieten compiler warning on start_migration
This commit is contained in:
parent
ce5b0f4afc
commit
36f62f11e4
10 changed files with 219 additions and 31 deletions
|
@ -2540,16 +2540,6 @@ static bool postcopy_pause_incoming(MigrationIncomingState *mis)
|
|||
{
|
||||
int i;
|
||||
|
||||
/*
|
||||
* If network is interrupted, any temp page we received will be useless
|
||||
* because we didn't mark them as "received" in receivedmap. After a
|
||||
* proper recovery later (which will sync src dirty bitmap with receivedmap
|
||||
* on dest) these cached small pages will be resent again.
|
||||
*/
|
||||
for (i = 0; i < mis->postcopy_channels; i++) {
|
||||
postcopy_temp_page_reset(&mis->postcopy_tmp_pages[i]);
|
||||
}
|
||||
|
||||
trace_postcopy_pause_incoming();
|
||||
|
||||
assert(migrate_postcopy_ram());
|
||||
|
@ -2578,6 +2568,16 @@ static bool postcopy_pause_incoming(MigrationIncomingState *mis)
|
|||
/* Notify the fault thread for the invalidated file handle */
|
||||
postcopy_fault_thread_notify(mis);
|
||||
|
||||
/*
|
||||
* If network is interrupted, any temp page we received will be useless
|
||||
* because we didn't mark them as "received" in receivedmap. After a
|
||||
* proper recovery later (which will sync src dirty bitmap with receivedmap
|
||||
* on dest) these cached small pages will be resent again.
|
||||
*/
|
||||
for (i = 0; i < mis->postcopy_channels; i++) {
|
||||
postcopy_temp_page_reset(&mis->postcopy_tmp_pages[i]);
|
||||
}
|
||||
|
||||
error_report("Detected IO failure for postcopy. "
|
||||
"Migration paused.");
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue