mirror of https://gitee.com/openkylin/libvirt.git
LXC from native: add lxc.cgroup.blkio.* mapping
This commit is contained in:
parent
281e2990ee
commit
5b8bfb0276
|
@ -699,6 +699,68 @@ lxcSetCpusetTune(virDomainDefPtr def, virConfPtr properties)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
lxcBlkioDeviceWalkCallback(const char *name, virConfValuePtr value, void *data)
|
||||
{
|
||||
char **parts = NULL;
|
||||
virBlkioDevicePtr device = NULL;
|
||||
virDomainDefPtr def = data;
|
||||
|
||||
if (STRNEQ(name, "lxc.cgroup.blkio.device_weight") || !value->str)
|
||||
return 0;
|
||||
|
||||
if (!(parts = lxcStringSplit(value->str)))
|
||||
return -1;
|
||||
|
||||
if (!parts[0] || !parts[1]) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("invalid blkio.device_weight value: '%s'"),
|
||||
value->str);
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (VIR_EXPAND_N(def->blkio.devices, def->blkio.ndevices, 1) < 0)
|
||||
goto error;
|
||||
device = &def->blkio.devices[def->blkio.ndevices - 1];
|
||||
|
||||
if (virAsprintf(&device->path, "/dev/block/%s", parts[0]) < 0)
|
||||
goto error;
|
||||
|
||||
if (virStrToLong_ui(parts[1], NULL, 10, &device->weight) < 0) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("failed to parse integer: '%s'"), parts[1]);
|
||||
goto error;
|
||||
}
|
||||
|
||||
virStringFreeList(parts);
|
||||
|
||||
return 0;
|
||||
|
||||
error:
|
||||
if (parts)
|
||||
virStringFreeList(parts);
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int
|
||||
lxcSetBlkioTune(virDomainDefPtr def, virConfPtr properties)
|
||||
{
|
||||
virConfValuePtr value;
|
||||
|
||||
if ((value = virConfGetValue(properties, "lxc.cgroup.blkio.weight")) &&
|
||||
value->str && virStrToLong_ui(value->str, NULL, 10,
|
||||
&def->blkio.weight) < 0) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("failed to parse integer: '%s'"), value->str);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (virConfWalk(properties, lxcBlkioDeviceWalkCallback, def) < 0)
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
virDomainDefPtr
|
||||
lxcParseConfigString(const char *config)
|
||||
{
|
||||
|
@ -783,6 +845,10 @@ lxcParseConfigString(const char *config)
|
|||
if (lxcSetCpusetTune(vmdef, properties) < 0)
|
||||
goto error;
|
||||
|
||||
/* lxc.cgroup.blkio.* */
|
||||
if (lxcSetBlkioTune(vmdef, properties) < 0)
|
||||
goto error;
|
||||
|
||||
goto cleanup;
|
||||
|
||||
error:
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
lxc.rootfs = /var/lib/lxc/migrate_test/rootfs
|
||||
lxc.utsname = migrate_test
|
||||
lxc.autodev=1
|
||||
|
||||
lxc.cgroup.blkio.weight = 500
|
||||
lxc.cgroup.blkio.device_weight = 8:16 1000
|
||||
lxc.cgroup.blkio.device_weight = 8:0 300
|
|
@ -0,0 +1,35 @@
|
|||
<domain type='lxc'>
|
||||
<name>migrate_test</name>
|
||||
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||
<memory unit='KiB'>65536</memory>
|
||||
<currentMemory unit='KiB'>0</currentMemory>
|
||||
<blkiotune>
|
||||
<weight>500</weight>
|
||||
<device>
|
||||
<path>/dev/block/8:16</path>
|
||||
<weight>1000</weight>
|
||||
</device>
|
||||
<device>
|
||||
<path>/dev/block/8:0</path>
|
||||
<weight>300</weight>
|
||||
</device>
|
||||
</blkiotune>
|
||||
<vcpu placement='static' current='0'>1</vcpu>
|
||||
<os>
|
||||
<type>exe</type>
|
||||
<init>/sbin/init</init>
|
||||
</os>
|
||||
<features>
|
||||
<privnet/>
|
||||
</features>
|
||||
<clock offset='utc'/>
|
||||
<on_poweroff>destroy</on_poweroff>
|
||||
<on_reboot>restart</on_reboot>
|
||||
<on_crash>destroy</on_crash>
|
||||
<devices>
|
||||
<filesystem type='mount' accessmode='passthrough'>
|
||||
<source dir='/var/lib/lxc/migrate_test/rootfs'/>
|
||||
<target dir='/'/>
|
||||
</filesystem>
|
||||
</devices>
|
||||
</domain>
|
|
@ -112,6 +112,7 @@ mymain(void)
|
|||
DO_TEST("memtune", false);
|
||||
DO_TEST("cputune", false);
|
||||
DO_TEST("cpusettune", false);
|
||||
DO_TEST("blkiotune", false);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue