|
|
7a3408 |
From fa7357fcc523ba9e2f40ee80c769060f5772eacb Mon Sep 17 00:00:00 2001
|
|
|
7a3408 |
Message-Id: <fa7357fcc523ba9e2f40ee80c769060f5772eacb@dist-git>
|
|
|
7a3408 |
From: Martin Kletzander <mkletzan@redhat.com>
|
|
|
7a3408 |
Date: Tue, 18 Aug 2015 17:28:02 -0700
|
|
|
7a3408 |
Subject: [PATCH] qemu: Sync BlkioDevice values when setting them in cgroups
|
|
|
7a3408 |
|
|
|
7a3408 |
The problem here is that there are some values that kernel accepts, but
|
|
|
7a3408 |
does not set them, for example 18446744073709551615 which acts the same
|
|
|
7a3408 |
way as zero. Let's do the same thing we do with other tuning options
|
|
|
7a3408 |
and re-read them right after they are set in order to keep our internal
|
|
|
7a3408 |
structures up-to-date.
|
|
|
7a3408 |
|
|
|
7a3408 |
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1165580
|
|
|
7a3408 |
|
|
|
7a3408 |
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
|
|
|
7a3408 |
(cherry picked from commit 7b5acf9461d3917cac12688fae9fbe5f67bf788b)
|
|
|
7a3408 |
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
|
|
|
7a3408 |
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
|
|
7a3408 |
---
|
|
|
7a3408 |
src/qemu/qemu_cgroup.c | 20 +++++++++++++++-----
|
|
|
7a3408 |
src/qemu/qemu_driver.c | 25 ++++++++++++++++++++-----
|
|
|
7a3408 |
2 files changed, 35 insertions(+), 10 deletions(-)
|
|
|
7a3408 |
|
|
|
7a3408 |
diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c
|
|
|
7a3408 |
index e1a2827..0da6c02 100644
|
|
|
7a3408 |
--- a/src/qemu/qemu_cgroup.c
|
|
|
7a3408 |
+++ b/src/qemu/qemu_cgroup.c
|
|
|
7a3408 |
@@ -436,27 +436,37 @@ qemuSetupBlkioCgroup(virDomainObjPtr vm)
|
|
|
7a3408 |
virBlkioDevicePtr dev = &vm->def->blkio.devices[i];
|
|
|
7a3408 |
if (dev->weight &&
|
|
|
7a3408 |
(virCgroupSetBlkioDeviceWeight(priv->cgroup, dev->path,
|
|
|
7a3408 |
- dev->weight) < 0))
|
|
|
7a3408 |
+ dev->weight) < 0 ||
|
|
|
7a3408 |
+ virCgroupGetBlkioDeviceWeight(priv->cgroup, dev->path,
|
|
|
7a3408 |
+ &dev->weight) < 0))
|
|
|
7a3408 |
return -1;
|
|
|
7a3408 |
|
|
|
7a3408 |
if (dev->riops &&
|
|
|
7a3408 |
(virCgroupSetBlkioDeviceReadIops(priv->cgroup, dev->path,
|
|
|
7a3408 |
- dev->riops) < 0))
|
|
|
7a3408 |
+ dev->riops) < 0 ||
|
|
|
7a3408 |
+ virCgroupGetBlkioDeviceReadIops(priv->cgroup, dev->path,
|
|
|
7a3408 |
+ &dev->riops) < 0))
|
|
|
7a3408 |
return -1;
|
|
|
7a3408 |
|
|
|
7a3408 |
if (dev->wiops &&
|
|
|
7a3408 |
(virCgroupSetBlkioDeviceWriteIops(priv->cgroup, dev->path,
|
|
|
7a3408 |
- dev->wiops) < 0))
|
|
|
7a3408 |
+ dev->wiops) < 0 ||
|
|
|
7a3408 |
+ virCgroupGetBlkioDeviceWriteIops(priv->cgroup, dev->path,
|
|
|
7a3408 |
+ &dev->wiops) < 0))
|
|
|
7a3408 |
return -1;
|
|
|
7a3408 |
|
|
|
7a3408 |
if (dev->rbps &&
|
|
|
7a3408 |
(virCgroupSetBlkioDeviceReadBps(priv->cgroup, dev->path,
|
|
|
7a3408 |
- dev->rbps) < 0))
|
|
|
7a3408 |
+ dev->rbps) < 0 ||
|
|
|
7a3408 |
+ virCgroupGetBlkioDeviceReadBps(priv->cgroup, dev->path,
|
|
|
7a3408 |
+ &dev->rbps) < 0))
|
|
|
7a3408 |
return -1;
|
|
|
7a3408 |
|
|
|
7a3408 |
if (dev->wbps &&
|
|
|
7a3408 |
(virCgroupSetBlkioDeviceWriteBps(priv->cgroup, dev->path,
|
|
|
7a3408 |
- dev->wbps) < 0))
|
|
|
7a3408 |
+ dev->wbps) < 0 ||
|
|
|
7a3408 |
+ virCgroupGetBlkioDeviceWriteBps(priv->cgroup, dev->path,
|
|
|
7a3408 |
+ &dev->wbps) < 0))
|
|
|
7a3408 |
return -1;
|
|
|
7a3408 |
}
|
|
|
7a3408 |
}
|
|
|
7a3408 |
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
|
|
|
7a3408 |
index e1ceb98..e85506e 100644
|
|
|
7a3408 |
--- a/src/qemu/qemu_driver.c
|
|
|
7a3408 |
+++ b/src/qemu/qemu_driver.c
|
|
|
7a3408 |
@@ -9286,7 +9286,10 @@ qemuDomainSetBlkioParameters(virDomainPtr dom,
|
|
|
7a3408 |
for (j = 0; j < ndevices; j++) {
|
|
|
7a3408 |
if (virCgroupSetBlkioDeviceWeight(priv->cgroup,
|
|
|
7a3408 |
devices[j].path,
|
|
|
7a3408 |
- devices[j].weight) < 0) {
|
|
|
7a3408 |
+ devices[j].weight) < 0 ||
|
|
|
7a3408 |
+ virCgroupGetBlkioDeviceWeight(priv->cgroup,
|
|
|
7a3408 |
+ devices[j].path,
|
|
|
7a3408 |
+ &devices[j].weight) < 0) {
|
|
|
7a3408 |
ret = -1;
|
|
|
7a3408 |
break;
|
|
|
7a3408 |
}
|
|
|
7a3408 |
@@ -9295,7 +9298,10 @@ qemuDomainSetBlkioParameters(virDomainPtr dom,
|
|
|
7a3408 |
for (j = 0; j < ndevices; j++) {
|
|
|
7a3408 |
if (virCgroupSetBlkioDeviceReadIops(priv->cgroup,
|
|
|
7a3408 |
devices[j].path,
|
|
|
7a3408 |
- devices[j].riops) < 0) {
|
|
|
7a3408 |
+ devices[j].riops) < 0 ||
|
|
|
7a3408 |
+ virCgroupGetBlkioDeviceReadIops(priv->cgroup,
|
|
|
7a3408 |
+ devices[j].path,
|
|
|
7a3408 |
+ &devices[j].riops) < 0) {
|
|
|
7a3408 |
ret = -1;
|
|
|
7a3408 |
break;
|
|
|
7a3408 |
}
|
|
|
7a3408 |
@@ -9304,7 +9310,10 @@ qemuDomainSetBlkioParameters(virDomainPtr dom,
|
|
|
7a3408 |
for (j = 0; j < ndevices; j++) {
|
|
|
7a3408 |
if (virCgroupSetBlkioDeviceWriteIops(priv->cgroup,
|
|
|
7a3408 |
devices[j].path,
|
|
|
7a3408 |
- devices[j].wiops) < 0) {
|
|
|
7a3408 |
+ devices[j].wiops) < 0 ||
|
|
|
7a3408 |
+ virCgroupGetBlkioDeviceWriteIops(priv->cgroup,
|
|
|
7a3408 |
+ devices[j].path,
|
|
|
7a3408 |
+ &devices[j].wiops) < 0) {
|
|
|
7a3408 |
ret = -1;
|
|
|
7a3408 |
break;
|
|
|
7a3408 |
}
|
|
|
7a3408 |
@@ -9313,7 +9322,10 @@ qemuDomainSetBlkioParameters(virDomainPtr dom,
|
|
|
7a3408 |
for (j = 0; j < ndevices; j++) {
|
|
|
7a3408 |
if (virCgroupSetBlkioDeviceReadBps(priv->cgroup,
|
|
|
7a3408 |
devices[j].path,
|
|
|
7a3408 |
- devices[j].rbps) < 0) {
|
|
|
7a3408 |
+ devices[j].rbps) < 0 ||
|
|
|
7a3408 |
+ virCgroupGetBlkioDeviceReadBps(priv->cgroup,
|
|
|
7a3408 |
+ devices[j].path,
|
|
|
7a3408 |
+ &devices[j].rbps) < 0) {
|
|
|
7a3408 |
ret = -1;
|
|
|
7a3408 |
break;
|
|
|
7a3408 |
}
|
|
|
7a3408 |
@@ -9322,7 +9334,10 @@ qemuDomainSetBlkioParameters(virDomainPtr dom,
|
|
|
7a3408 |
for (j = 0; j < ndevices; j++) {
|
|
|
7a3408 |
if (virCgroupSetBlkioDeviceWriteBps(priv->cgroup,
|
|
|
7a3408 |
devices[j].path,
|
|
|
7a3408 |
- devices[j].wbps) < 0) {
|
|
|
7a3408 |
+ devices[j].wbps) < 0 ||
|
|
|
7a3408 |
+ virCgroupGetBlkioDeviceWriteBps(priv->cgroup,
|
|
|
7a3408 |
+ devices[j].path,
|
|
|
7a3408 |
+ &devices[j].wbps) < 0) {
|
|
|
7a3408 |
ret = -1;
|
|
|
7a3408 |
break;
|
|
|
7a3408 |
}
|
|
|
7a3408 |
--
|
|
|
7a3408 |
2.5.1
|
|
|
7a3408 |
|