mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-22 04:25:18 +00:00
qemu: hotplug: Setup disk throttling with blockdev
With blockdev we must issue the block_set_io_throttle QMP command to setup disk throttling as we currently can't do it with the 'throttle' layer. Unfortunately there's nothing we can do if it fails. https://bugzilla.redhat.com/show_bug.cgi?id=1733163 Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
f2ac23f245
commit
3fbaf0587c
@ -617,6 +617,7 @@ qemuDomainAttachDiskGeneric(virQEMUDriverPtr driver,
|
|||||||
VIR_AUTOUNREF(virQEMUDriverConfigPtr) cfg = virQEMUDriverGetConfig(driver);
|
VIR_AUTOUNREF(virQEMUDriverConfigPtr) cfg = virQEMUDriverGetConfig(driver);
|
||||||
VIR_AUTOPTR(virJSONValue) corProps = NULL;
|
VIR_AUTOPTR(virJSONValue) corProps = NULL;
|
||||||
VIR_AUTOFREE(char *) corAlias = NULL;
|
VIR_AUTOFREE(char *) corAlias = NULL;
|
||||||
|
bool blockdev = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV);
|
||||||
|
|
||||||
if (qemuDomainStorageSourceChainAccessAllow(driver, vm, disk->src) < 0)
|
if (qemuDomainStorageSourceChainAccessAllow(driver, vm, disk->src) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
@ -627,7 +628,7 @@ qemuDomainAttachDiskGeneric(virQEMUDriverPtr driver,
|
|||||||
if (qemuDomainPrepareDiskSource(disk, priv, cfg) < 0)
|
if (qemuDomainPrepareDiskSource(disk, priv, cfg) < 0)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV)) {
|
if (blockdev) {
|
||||||
if (disk->copy_on_read == VIR_TRISTATE_SWITCH_ON &&
|
if (disk->copy_on_read == VIR_TRISTATE_SWITCH_ON &&
|
||||||
!(corProps = qemuBlockStorageGetCopyOnReadProps(disk)))
|
!(corProps = qemuBlockStorageGetCopyOnReadProps(disk)))
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
@ -667,6 +668,21 @@ qemuDomainAttachDiskGeneric(virQEMUDriverPtr driver,
|
|||||||
goto exit_monitor;
|
goto exit_monitor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Setup throttling of disk via block_set_io_throttle QMP command. This
|
||||||
|
* is a hack until the 'throttle' blockdev driver will support modification
|
||||||
|
* of the trhottle group. See also qemuProcessSetupDiskThrottlingBlockdev.
|
||||||
|
* As there isn't anything sane to do if this fails, let's just return
|
||||||
|
* success.
|
||||||
|
*/
|
||||||
|
if (blockdev &&
|
||||||
|
qemuDiskConfigBlkdeviotuneEnabled(disk)) {
|
||||||
|
qemuDomainDiskPrivatePtr diskPriv = QEMU_DOMAIN_DISK_PRIVATE(disk);
|
||||||
|
if (qemuMonitorSetBlockIoThrottle(priv->mon, NULL, diskPriv->qomName,
|
||||||
|
&disk->blkdeviotune,
|
||||||
|
true, true, true) < 0)
|
||||||
|
VIR_WARN("failed to set blkdeviotune for '%s' of '%s'", disk->dst, vm->def->name);
|
||||||
|
}
|
||||||
|
|
||||||
if (qemuDomainObjExitMonitor(driver, vm) < 0) {
|
if (qemuDomainObjExitMonitor(driver, vm) < 0) {
|
||||||
ret = -2;
|
ret = -2;
|
||||||
goto error;
|
goto error;
|
||||||
|
@ -6671,6 +6671,7 @@ qemuProcessGenID(virDomainObjPtr vm,
|
|||||||
* Sets up disk trottling for -blockdev via block_set_io_throttle monitor
|
* Sets up disk trottling for -blockdev via block_set_io_throttle monitor
|
||||||
* command. This hack should be replaced by proper use of the 'throttle'
|
* command. This hack should be replaced by proper use of the 'throttle'
|
||||||
* blockdev driver in qemu once it will support changing of the throttle group.
|
* blockdev driver in qemu once it will support changing of the throttle group.
|
||||||
|
* Same hack is done in qemuDomainAttachDiskGeneric.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
qemuProcessSetupDiskThrottlingBlockdev(virQEMUDriverPtr driver,
|
qemuProcessSetupDiskThrottlingBlockdev(virQEMUDriverPtr driver,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user