[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 5/7] implementation of vm_start() BH
From: |
Andrey Gruzdev |
Subject: |
[PATCH v3 5/7] implementation of vm_start() BH |
Date: |
Thu, 19 Nov 2020 15:59:38 +0300 |
To avoid saving updated versions of memory pages we need
to start tracking RAM writes before we resume operation of
vCPUs. This sequence is especially critical for virtio device
backends whos VQs are mapped to main memory and accessed
directly not using MMIO callbacks.
One problem is that vm_start() routine makes calls state
change notifier callbacks directly from itself. Virtio drivers
do some stuff with syncing/flusing VQs in its notifier routines.
Since we poll UFFD and process faults on the same thread, that
leads to the situation when the thread locks in vm_start()
if we try to call it from the migration thread.
The solution is to call ram_write_tracking_start() directly
from migration thread and then schedule BH for vm_start.
Signed-off-by: Andrey Gruzdev <andrey.gruzdev@virtuozzo.com>
---
migration/migration.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/migration/migration.c b/migration/migration.c
index 158e5441ec..dba388f8bd 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -3716,7 +3716,13 @@ static void *migration_thread(void *opaque)
static void wt_migration_vm_start_bh(void *opaque)
{
- /* TODO: implement */
+ MigrationState *s = opaque;
+
+ qemu_bh_delete(s->wt_vm_start_bh);
+ s->wt_vm_start_bh = NULL;
+
+ vm_start();
+ s->downtime = qemu_clock_get_ms(QEMU_CLOCK_REALTIME) - s->downtime_start;
}
/*
--
2.25.1
- Re: [PATCH v3 3/7] support UFFD write fault processing in ram_save_iterate(), (continued)
- Re: [PATCH v3 3/7] support UFFD write fault processing in ram_save_iterate(), Peter Xu, 2020/11/20
- Re: [PATCH v3 3/7] support UFFD write fault processing in ram_save_iterate(), Andrey Gruzdev, 2020/11/20
- Re: [PATCH v3 3/7] support UFFD write fault processing in ram_save_iterate(), Peter Xu, 2020/11/20
- Re: [PATCH v3 3/7] support UFFD write fault processing in ram_save_iterate(), Andrey Gruzdev, 2020/11/20
- Re: [PATCH v3 3/7] support UFFD write fault processing in ram_save_iterate(), Peter Xu, 2020/11/23
- Re: [PATCH v3 3/7] support UFFD write fault processing in ram_save_iterate(), Andrey Gruzdev, 2020/11/24
- Re: [PATCH v3 3/7] support UFFD write fault processing in ram_save_iterate(), Peter Xu, 2020/11/24
[PATCH v3 4/7] implementation of write-tracking migration thread, Andrey Gruzdev, 2020/11/19
[PATCH v3 5/7] implementation of vm_start() BH,
Andrey Gruzdev <=
[PATCH v3 6/7] the rest of write tracking migration code, Andrey Gruzdev, 2020/11/19
[PATCH v3 7/7] introduce simple linear scan rate limiting mechanism, Andrey Gruzdev, 2020/11/19
Re: [PATCH v3 0/7] UFFD write-tracking migration/snapshots, Dr. David Alan Gilbert, 2020/11/24