forked from pool/libvirt
56 lines
2.2 KiB
Diff
56 lines
2.2 KiB
Diff
|
commit ef1065cf5acad13767c054758cbe7f4e8af5d241
|
||
|
Author: Jim Fehlig <jfehlig@novell.com>
|
||
|
Date: Fri Aug 26 12:10:26 2011 -0600
|
||
|
|
||
|
Set qemu migration speed unlimited when migrating to file
|
||
|
|
||
|
The qemu migration speed default is 32MiB/s as defined in migration.c
|
||
|
|
||
|
/* Migration speed throttling */
|
||
|
static int64_t max_throttle = (32 << 20);
|
||
|
|
||
|
There's no need to throttle migration when targeting a file, so set migration
|
||
|
speed to unlimited prior to migration, and restore to libvirt default value
|
||
|
after migration.
|
||
|
|
||
|
Default units is MB for migrate_set_speed monitor command, so
|
||
|
(INT64_MAX / (1024 * 1024)) is used for unlimited migration speed.
|
||
|
|
||
|
Tested with both json and text monitors.
|
||
|
|
||
|
Index: libvirt-0.9.4/src/qemu/qemu_migration.c
|
||
|
===================================================================
|
||
|
--- libvirt-0.9.4.orig/src/qemu/qemu_migration.c
|
||
|
+++ libvirt-0.9.4/src/qemu/qemu_migration.c
|
||
|
@@ -2675,6 +2675,16 @@ qemuMigrationToFile(struct qemud_driver
|
||
|
bool restoreLabel = false;
|
||
|
virCommandPtr cmd = NULL;
|
||
|
int pipeFD[2] = { -1, -1 };
|
||
|
+ unsigned long saveMigBandwidth = priv->migMaxBandwidth;
|
||
|
+
|
||
|
+ /* Increase migration bandwidth to unlimited since target is a file.
|
||
|
+ * Failure to change migration speed is not fatal. */
|
||
|
+ if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) == 0) {
|
||
|
+ qemuMonitorSetMigrationSpeed(priv->mon,
|
||
|
+ QEMU_DOMAIN_FILE_MIG_BANDWIDTH_MAX);
|
||
|
+ priv->migMaxBandwidth = QEMU_DOMAIN_FILE_MIG_BANDWIDTH_MAX;
|
||
|
+ qemuDomainObjExitMonitorWithDriver(driver, vm);
|
||
|
+ }
|
||
|
|
||
|
if (qemuCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATE_QEMU_FD) &&
|
||
|
(!compressor || pipe(pipeFD) == 0)) {
|
||
|
@@ -2783,6 +2793,13 @@ qemuMigrationToFile(struct qemud_driver
|
||
|
ret = 0;
|
||
|
|
||
|
cleanup:
|
||
|
+ /* Restore max migration bandwidth */
|
||
|
+ if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) == 0) {
|
||
|
+ qemuMonitorSetMigrationSpeed(priv->mon, saveMigBandwidth);
|
||
|
+ priv->migMaxBandwidth = saveMigBandwidth;
|
||
|
+ qemuDomainObjExitMonitorWithDriver(driver, vm);
|
||
|
+ }
|
||
|
+
|
||
|
VIR_FORCE_CLOSE(pipeFD[0]);
|
||
|
VIR_FORCE_CLOSE(pipeFD[1]);
|
||
|
virCommandFree(cmd);
|