mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-08 04:31:33 +00:00
qemu: Implement blkio tunable XML configuration and parsing.
Implement blkio tunable XML configuration and parsing. Reviewed-by: "Nikunj A. Dadhania" <nikunj@linux.vnet.ibm.com> Signed-off-by: Gui Jianfeng <guijianfeng@cn.fujitsu.com>
This commit is contained in:
parent
7c8c183e24
commit
d9b28a319a
@ -5149,6 +5149,11 @@ static virDomainDefPtr virDomainDefParseXML(virCapsPtr caps,
|
|||||||
if (node)
|
if (node)
|
||||||
def->mem.hugepage_backed = 1;
|
def->mem.hugepage_backed = 1;
|
||||||
|
|
||||||
|
/* Extract blkio cgroup tunables */
|
||||||
|
if (virXPathUInt("string(./blkiotune/weight)", ctxt,
|
||||||
|
&def->blkio.weight) < 0)
|
||||||
|
def->blkio.weight = 0;
|
||||||
|
|
||||||
/* Extract other memory tunables */
|
/* Extract other memory tunables */
|
||||||
if (virXPathULong("string(./memtune/hard_limit)", ctxt,
|
if (virXPathULong("string(./memtune/hard_limit)", ctxt,
|
||||||
&def->mem.hard_limit) < 0)
|
&def->mem.hard_limit) < 0)
|
||||||
@ -7682,6 +7687,14 @@ char *virDomainDefFormat(virDomainDefPtr def,
|
|||||||
virBufferVSprintf(&buf, " <currentMemory>%lu</currentMemory>\n",
|
virBufferVSprintf(&buf, " <currentMemory>%lu</currentMemory>\n",
|
||||||
def->mem.cur_balloon);
|
def->mem.cur_balloon);
|
||||||
|
|
||||||
|
/* add blkiotune only if there are any */
|
||||||
|
if (def->blkio.weight) {
|
||||||
|
virBufferVSprintf(&buf, " <blkiotune>\n");
|
||||||
|
virBufferVSprintf(&buf, " <weight>%u</weight>\n",
|
||||||
|
def->blkio.weight);
|
||||||
|
virBufferVSprintf(&buf, " </blkiotune>\n");
|
||||||
|
}
|
||||||
|
|
||||||
/* add memtune only if there are any */
|
/* add memtune only if there are any */
|
||||||
if (def->mem.hard_limit || def->mem.soft_limit || def->mem.min_guarantee ||
|
if (def->mem.hard_limit || def->mem.soft_limit || def->mem.min_guarantee ||
|
||||||
def->mem.swap_hard_limit)
|
def->mem.swap_hard_limit)
|
||||||
|
@ -1028,6 +1028,10 @@ struct _virDomainDef {
|
|||||||
char *name;
|
char *name;
|
||||||
char *description;
|
char *description;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
unsigned int weight;
|
||||||
|
} blkio;
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
unsigned long max_balloon;
|
unsigned long max_balloon;
|
||||||
unsigned long cur_balloon;
|
unsigned long cur_balloon;
|
||||||
|
@ -270,6 +270,21 @@ int qemuSetupCgroup(struct qemud_driver *driver,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (qemuCgroupControllerActive(driver, VIR_CGROUP_CONTROLLER_BLKIO)) {
|
||||||
|
if (vm->def->blkio.weight != 0) {
|
||||||
|
rc = virCgroupSetBlkioWeight(cgroup, vm->def->blkio.weight);
|
||||||
|
if(rc != 0) {
|
||||||
|
virReportSystemError(-rc,
|
||||||
|
_("Unable to set io weight for domain %s"),
|
||||||
|
vm->def->name);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||||
|
_("Block I/O tuning is not available on this host"));
|
||||||
|
}
|
||||||
|
|
||||||
if ((rc = qemuCgroupControllerActive(driver, VIR_CGROUP_CONTROLLER_MEMORY))) {
|
if ((rc = qemuCgroupControllerActive(driver, VIR_CGROUP_CONTROLLER_MEMORY))) {
|
||||||
if (vm->def->mem.hard_limit != 0) {
|
if (vm->def->mem.hard_limit != 0) {
|
||||||
rc = virCgroupSetMemoryHardLimit(cgroup, vm->def->mem.hard_limit);
|
rc = virCgroupSetMemoryHardLimit(cgroup, vm->def->mem.hard_limit);
|
||||||
|
@ -303,7 +303,8 @@ int qemudLoadDriverConfig(struct qemud_driver *driver,
|
|||||||
driver->cgroupControllers =
|
driver->cgroupControllers =
|
||||||
(1 << VIR_CGROUP_CONTROLLER_CPU) |
|
(1 << VIR_CGROUP_CONTROLLER_CPU) |
|
||||||
(1 << VIR_CGROUP_CONTROLLER_DEVICES) |
|
(1 << VIR_CGROUP_CONTROLLER_DEVICES) |
|
||||||
(1 << VIR_CGROUP_CONTROLLER_MEMORY);
|
(1 << VIR_CGROUP_CONTROLLER_MEMORY) |
|
||||||
|
(1 << VIR_CGROUP_CONTROLLER_BLKIO);
|
||||||
}
|
}
|
||||||
for (i = 0 ; i < VIR_CGROUP_CONTROLLER_LAST ; i++) {
|
for (i = 0 ; i < VIR_CGROUP_CONTROLLER_LAST ; i++) {
|
||||||
if (driver->cgroupControllers & (1 << i)) {
|
if (driver->cgroupControllers & (1 << i)) {
|
||||||
|
4
tests/qemuxml2argvdata/qemuxml2argv-blkiotune.args
Normal file
4
tests/qemuxml2argvdata/qemuxml2argv-blkiotune.args
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu -S -M \
|
||||||
|
pc -m 214 -smp 1 -name QEMUGuest1 -nographic -monitor unix:/tmp/test-monitor,\
|
||||||
|
server,nowait -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net none -serial \
|
||||||
|
none -parallel none -usb
|
28
tests/qemuxml2argvdata/qemuxml2argv-blkiotune.xml
Normal file
28
tests/qemuxml2argvdata/qemuxml2argv-blkiotune.xml
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
<domain type='qemu'>
|
||||||
|
<name>QEMUGuest1</name>
|
||||||
|
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||||
|
<memory>219136</memory>
|
||||||
|
<currentMemory>219136</currentMemory>
|
||||||
|
<blkiotune>
|
||||||
|
<weight>800</weight>
|
||||||
|
</blkiotune>
|
||||||
|
<vcpu>1</vcpu>
|
||||||
|
<os>
|
||||||
|
<type arch='i686' machine='pc'>hvm</type>
|
||||||
|
<boot dev='hd'/>
|
||||||
|
</os>
|
||||||
|
<clock offset='utc'/>
|
||||||
|
<on_poweroff>destroy</on_poweroff>
|
||||||
|
<on_reboot>restart</on_reboot>
|
||||||
|
<on_crash>destroy</on_crash>
|
||||||
|
<devices>
|
||||||
|
<emulator>/usr/bin/qemu</emulator>
|
||||||
|
<disk type='block' device='disk'>
|
||||||
|
<source dev='/dev/HostVG/QEMUGuest1'/>
|
||||||
|
<target dev='hda' bus='ide'/>
|
||||||
|
<address type='drive' controller='0' bus='0' unit='0'/>
|
||||||
|
</disk>
|
||||||
|
<controller type='ide' index='0'/>
|
||||||
|
<memballoon model='virtio'/>
|
||||||
|
</devices>
|
||||||
|
</domain>
|
@ -480,6 +480,9 @@ mymain(int argc, char **argv)
|
|||||||
DO_TEST("cpu-exact2", 0, false);
|
DO_TEST("cpu-exact2", 0, false);
|
||||||
DO_TEST("cpu-strict1", 0, false);
|
DO_TEST("cpu-strict1", 0, false);
|
||||||
|
|
||||||
|
DO_TEST("memtune", QEMUD_CMD_FLAG_NAME, false);
|
||||||
|
DO_TEST("blkiotune", QEMUD_CMD_FLAG_NAME, false);
|
||||||
|
|
||||||
free(driver.stateDir);
|
free(driver.stateDir);
|
||||||
virCapabilitiesFree(driver.caps);
|
virCapabilitiesFree(driver.caps);
|
||||||
|
|
||||||
|
@ -182,6 +182,7 @@ mymain(int argc, char **argv)
|
|||||||
|
|
||||||
DO_TEST("encrypted-disk");
|
DO_TEST("encrypted-disk");
|
||||||
DO_TEST("memtune");
|
DO_TEST("memtune");
|
||||||
|
DO_TEST("blkiotune");
|
||||||
|
|
||||||
DO_TEST("smp");
|
DO_TEST("smp");
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user