mirror of https://gitee.com/openkylin/libvirt.git
LXC from native: convert blkio throttle config
This commit is contained in:
parent
f4b28d5c8a
commit
3d58fa3f85
|
@ -733,8 +733,12 @@ lxcBlkioDeviceWalkCallback(const char *name, virConfValuePtr value, void *data)
|
||||||
char **parts = NULL;
|
char **parts = NULL;
|
||||||
virBlkioDevicePtr device = NULL;
|
virBlkioDevicePtr device = NULL;
|
||||||
virDomainDefPtr def = data;
|
virDomainDefPtr def = data;
|
||||||
|
size_t i = 0;
|
||||||
|
char *path = NULL;
|
||||||
|
int ret = -1;
|
||||||
|
|
||||||
if (STRNEQ(name, "lxc.cgroup.blkio.device_weight") || !value->str)
|
if (!STRPREFIX(name, "lxc.cgroup.blkio.") ||
|
||||||
|
STREQ(name, "lxc.cgroup.blkio.weight")|| !value->str)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (!(parts = lxcStringSplit(value->str)))
|
if (!(parts = lxcStringSplit(value->str)))
|
||||||
|
@ -742,32 +746,74 @@ lxcBlkioDeviceWalkCallback(const char *name, virConfValuePtr value, void *data)
|
||||||
|
|
||||||
if (!parts[0] || !parts[1]) {
|
if (!parts[0] || !parts[1]) {
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
_("invalid blkio.device_weight value: '%s'"),
|
_("invalid %s value: '%s'"),
|
||||||
value->str);
|
name, value->str);
|
||||||
goto error;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (VIR_EXPAND_N(def->blkio.devices, def->blkio.ndevices, 1) < 0)
|
if (virAsprintf(&path, "/dev/block/%s", parts[0]) < 0)
|
||||||
goto error;
|
goto cleanup;
|
||||||
device = &def->blkio.devices[def->blkio.ndevices - 1];
|
|
||||||
|
|
||||||
if (virAsprintf(&device->path, "/dev/block/%s", parts[0]) < 0)
|
/* Do we already have a device definition for this path?
|
||||||
goto error;
|
* Get that device or create a new one */
|
||||||
|
for (i = 0; !device && i < def->blkio.ndevices; i++) {
|
||||||
if (virStrToLong_ui(parts[1], NULL, 10, &device->weight) < 0) {
|
if (STREQ(def->blkio.devices[i].path, path))
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
device = &def->blkio.devices[i];
|
||||||
_("failed to parse integer: '%s'"), parts[1]);
|
}
|
||||||
goto error;
|
if (!device) {
|
||||||
|
if (VIR_EXPAND_N(def->blkio.devices, def->blkio.ndevices, 1) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
device = &def->blkio.devices[def->blkio.ndevices - 1];
|
||||||
|
device->path = path;
|
||||||
|
path = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Set the value */
|
||||||
|
if (STREQ(name, "lxc.cgroup.blkio.device_weight")) {
|
||||||
|
if (virStrToLong_ui(parts[1], NULL, 10, &device->weight) < 0) {
|
||||||
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
|
_("failed to parse device weight: '%s'"), parts[1]);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
} else if (STREQ(name, "lxc.cgroup.blkio.throttle.read_bps_device")) {
|
||||||
|
if (virStrToLong_ull(parts[1], NULL, 10, &device->rbps) < 0) {
|
||||||
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
|
_("failed to parse read_bps_device: '%s'"),
|
||||||
|
parts[1]);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
} else if (STREQ(name, "lxc.cgroup.blkio.throttle.write_bps_device")) {
|
||||||
|
if (virStrToLong_ull(parts[1], NULL, 10, &device->wbps) < 0) {
|
||||||
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
|
_("failed to parse write_bps_device: '%s'"),
|
||||||
|
parts[1]);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
} else if (STREQ(name, "lxc.cgroup.blkio.throttle.read_iops_device")) {
|
||||||
|
if (virStrToLong_ui(parts[1], NULL, 10, &device->riops) < 0) {
|
||||||
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
|
_("failed to parse read_iops_device: '%s'"),
|
||||||
|
parts[1]);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
} else if (STREQ(name, "lxc.cgroup.blkio.throttle.write_iops_device")) {
|
||||||
|
if (virStrToLong_ui(parts[1], NULL, 10, &device->wiops) < 0) {
|
||||||
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
|
_("failed to parse write_iops_device: '%s'"),
|
||||||
|
parts[1]);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
VIR_WARN("Unhandled blkio tune config: %s", name);
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = 0;
|
||||||
|
|
||||||
|
cleanup:
|
||||||
virStringFreeList(parts);
|
virStringFreeList(parts);
|
||||||
|
VIR_FREE(path);
|
||||||
|
|
||||||
return 0;
|
return ret;
|
||||||
|
|
||||||
error:
|
|
||||||
if (parts)
|
|
||||||
virStringFreeList(parts);
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
|
|
@ -5,3 +5,7 @@ lxc.autodev=1
|
||||||
lxc.cgroup.blkio.weight = 500
|
lxc.cgroup.blkio.weight = 500
|
||||||
lxc.cgroup.blkio.device_weight = 8:16 1000
|
lxc.cgroup.blkio.device_weight = 8:16 1000
|
||||||
lxc.cgroup.blkio.device_weight = 8:0 300
|
lxc.cgroup.blkio.device_weight = 8:0 300
|
||||||
|
lxc.cgroup.blkio.throttle.read_bps_device = 8:16 1234
|
||||||
|
lxc.cgroup.blkio.throttle.write_bps_device = 8:16 5678
|
||||||
|
lxc.cgroup.blkio.throttle.read_iops_device = 8:16 4321
|
||||||
|
lxc.cgroup.blkio.throttle.write_iops_device = 8:16 8765
|
||||||
|
|
|
@ -8,6 +8,10 @@
|
||||||
<device>
|
<device>
|
||||||
<path>/dev/block/8:16</path>
|
<path>/dev/block/8:16</path>
|
||||||
<weight>1000</weight>
|
<weight>1000</weight>
|
||||||
|
<read_iops_sec>4321</read_iops_sec>
|
||||||
|
<write_iops_sec>8765</write_iops_sec>
|
||||||
|
<read_bytes_sec>1234</read_bytes_sec>
|
||||||
|
<write_bytes_sec>5678</write_bytes_sec>
|
||||||
</device>
|
</device>
|
||||||
<device>
|
<device>
|
||||||
<path>/dev/block/8:0</path>
|
<path>/dev/block/8:0</path>
|
||||||
|
|
Loading…
Reference in New Issue