From: Guan Qiang <hzguanqiang@xxxxxxxxxxxxxxxx> This adds four parameters --device-read-bps, --device-write-bps, --device-read-iops and --device-write-iops to virsh command blkiotune for setting/getting blkiotune.throttle.{read/write}_{iops/bps}_device. --- tools/virsh-domain.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++ tools/virsh.pod | 32 +++++++++++++++++++++++-- 2 files changed, 94 insertions(+), 2 deletions(-) diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c index 5aabccd..4f4197f 100644 --- a/tools/virsh-domain.c +++ b/tools/virsh-domain.c @@ -1253,6 +1253,22 @@ static const vshCmdOptDef opts_blkiotune[] = { .type = VSH_OT_STRING, .help = N_("per-device IO Weights, in the form of /path/to/device,weight,...") }, + {.name = "device-read-bps", + .type = VSH_OT_STRING, + .help = N_("per-device read throughput limit in bytes per second, in the form of /path/to/device,read_bps,...") + }, + {.name = "device-write-bps", + .type = VSH_OT_STRING, + .help = N_("per-device write throughput limit in bytes per second, in the form of /path/to/device,write_bps,...") + }, + {.name = "device-read-iops", + .type = VSH_OT_STRING, + .help = N_("per-device read I/O operations limit per second, in the form of /path/to/device,read_iops,...") + }, + {.name = "device-write-iops", + .type = VSH_OT_STRING, + .help = N_("per-device write I/O operations limit per second, in the form of /path/to/device,write_iops,...") + }, {.name = "config", .type = VSH_OT_BOOL, .help = N_("affect next boot") @@ -1273,6 +1289,10 @@ cmdBlkiotune(vshControl * ctl, const vshCmd * cmd) { virDomainPtr dom; const char *device_weight = NULL; + const char *device_read_bps = NULL; + const char *device_write_bps = NULL; + const char *device_read_iops = NULL; + const char *device_write_iops = NULL; int weight = 0; int nparams = 0; int maxparams = 0; @@ -1320,6 +1340,50 @@ cmdBlkiotune(vshControl * ctl, const vshCmd * cmd) goto save_error; } + rv = vshCommandOptString(cmd, "device-read-bps", &device_read_bps); + if (rv < 0) { + vshError(ctl, "%s", _("Unable to parse string parameter")); + goto cleanup; + } else if (rv > 0) { + if (virTypedParamsAddString(¶ms, &nparams, &maxparams, + VIR_DOMAIN_BLKIO_THROTTLE_DEVICE_READ_BPS, + device_read_bps) < 0) + goto save_error; + } + + rv = vshCommandOptString(cmd, "device-write-bps", &device_write_bps); + if (rv < 0) { + vshError(ctl, "%s", _("Unable to parse string parameter")); + goto cleanup; + } else if (rv > 0) { + if (virTypedParamsAddString(¶ms, &nparams, &maxparams, + VIR_DOMAIN_BLKIO_THROTTLE_DEVICE_WRITE_BPS, + device_write_bps) < 0) + goto save_error; + } + + rv = vshCommandOptString(cmd, "device-read-iops", &device_read_iops); + if (rv < 0) { + vshError(ctl, "%s", _("Unable to parse string parameter")); + goto cleanup; + } else if (rv > 0) { + if (virTypedParamsAddString(¶ms, &nparams, &maxparams, + VIR_DOMAIN_BLKIO_THROTTLE_DEVICE_READ_IOPS, + device_read_iops) < 0) + goto save_error; + } + + rv = vshCommandOptString(cmd, "device-write-iops", &device_write_iops); + if (rv < 0) { + vshError(ctl, "%s", _("Unable to parse string parameter")); + goto cleanup; + } else if (rv > 0) { + if (virTypedParamsAddString(¶ms, &nparams, &maxparams, + VIR_DOMAIN_BLKIO_THROTTLE_DEVICE_WRITE_IOPS, + device_write_iops) < 0) + goto save_error; + } + if (nparams == 0) { /* get the number of blkio parameters */ if (virDomainGetBlkioParameters(dom, NULL, &nparams, flags) != 0) { diff --git a/tools/virsh.pod b/tools/virsh.pod index 7af5503..afe1bda 100644 --- a/tools/virsh.pod +++ b/tools/virsh.pod @@ -1625,8 +1625,12 @@ The guaranteed minimum memory allocation for the guest. Specifying -1 as a value for these limits is interpreted as unlimited. =item B<blkiotune> I<domain> [I<--weight> B<weight>] -[I<--device-weights> B<device-weights>] [[I<--config>] -[I<--live>] | [I<--current>]] +[I<--device-weights> B<device-weights>] +[I<--device-read-bps> B<device-read-bps>] +[I<--device-write-bps> B<device-write-bps>] +[I<--device-read-iops> B<device-read-iops>] +[I<--device-write-iops> B<device-write-iops>] +[[I<--config>] [I<--live>] | [I<--current>]] Display or set the blkio parameters. QEMU/KVM supports I<--weight>. I<--weight> is in range [100, 1000]. After kernel 2.6.39, the value @@ -1639,6 +1643,30 @@ or the value 0 to remove that device from per-device listings. Only the devices listed in the string are modified; any existing per-device weights for other devices remain unchanged. +B<device-read-bps> is a single string listing one or more device/read_bps +pairs, in the format of /path/to/device,read_bps,/path/to/device,read_bps. +Each read_bps is a postive number, or the value 0 to remove that device from +per-device listings. Only the devices listed in the string are modified; +any existing per-device read_bps for other devices remain unchanged. + +B<device-write-bps> is a single string listing one or more device/write_bps +pairs, in the format of /path/to/device,write_bps,/path/to/device,write_bps. +Each write_bps is a postive number, or the value 0 to remove that device from +per-device listings. Only the devices listed in the string are modified; +any existing per-device write_bps for other devices remain unchanged. + +B<device-read-iops> is a single string listing one or more device/read_iops +pairs, in the format of /path/to/device,read_iops,/path/to/device,read_iops. +Each read_iops is a postive number, or the value 0 to remove that device from +per-device listings. Only the devices listed in the string are modified; +any existing per-device read_iops for other devices remain unchanged. + +B<device-write-iops> is a single string listing one or more device/write_iops +pairs, in the format of /path/to/device,write_iops,/path/to/device,write_iops. +Each write_iops is a postive number, or the value 0 to remove that device from +per-device listings. Only the devices listed in the string are modified; +any existing per-device write_iops for other devices remain unchanged. + If I<--live> is specified, affect a running guest. If I<--config> is specified, affect the next boot of a persistent guest. If I<--current> is specified, affect the current guest state. -- 1.7.9.5 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list