On Mon, Oct 10, 2011 at 09:45:12PM +0800, Lei HH Li wrote:
> 
> Signed-off-by: Zhi Yong Wu <[email protected]>
> ---
>  tools/virsh.c   |   86 
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  tools/virsh.pod |   13 ++++++++
>  2 files changed, 99 insertions(+), 0 deletions(-)
> 
> diff --git a/tools/virsh.c b/tools/virsh.c
> index 9532bc3..51487b7 100644
> --- a/tools/virsh.c
> +++ b/tools/virsh.c
> @@ -6019,6 +6019,91 @@ cmdBlockJob(vshControl *ctl, const vshCmd *cmd)
>      return true;
>  }
> 
> +/*
> + * "blkiothrottle" command
> + */
> +static const vshCmdInfo info_blkiothrottle[] = {
> +    {"help", N_("Set or display a block disk I/O throttle setting.")},
> +    {"desc", N_("Set or display a block disk I/O throttle setting.")},
> +    {NULL, NULL}
> +};
> +
> +static const vshCmdOptDef opts_blkiothrottle[] = {
> +    {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")},
> +    {"device", VSH_OT_DATA, VSH_OFLAG_REQ, N_("block device")},
> +    {"bps", VSH_OT_INT, VSH_OFLAG_NONE, N_("total throughput limits in 
> bytes/s")},
> +    {"bps_rd", VSH_OT_INT, VSH_OFLAG_NONE, N_("read throughput limits in 
> bytes/s")},
> +    {"bps_wr", VSH_OT_INT, VSH_OFLAG_NONE, N_("write throughput limits in 
> bytes/s")},
> +    {"iops", VSH_OT_INT, VSH_OFLAG_NONE, N_("total operation limits in 
> numbers/s")},
> +    {"iops_rd", VSH_OT_INT, VSH_OFLAG_NONE, N_("read operation limits in 
> numbers/s")},
> +    {"iops_wr", VSH_OT_INT, VSH_OFLAG_NONE, N_("write operation limits in 
> numbers/s")},
> +    {NULL, 0, 0, NULL}
> +};

This command should also be able to display the current settings.  My suggestion
would be that if none of the settings are named on the command line, the
behavior is to displaty the current settings.  I can see that the command
documentation agrees with me and this is just a TODO.  You should tell us that
in the patch summary :)

> +
> +static bool
> +cmdBlkIoThrottle(vshControl *ctl, const vshCmd *cmd)
> +{
> +    virDomainPtr dom = NULL;
> +    const char *name, *disk;
> +    virDomainBlockIoThrottleInfo info;
> +    virDomainBlockIoThrottleInfo reply;
> +    unsigned int flags = 0;
> +    int ret = -1;
> +
> +    memset(&info, 0, sizeof(info));
> +
> +    if (!vshConnectionUsability(ctl, ctl->conn))
> +        goto out;
> +
> +    if (!(dom = vshCommandOptDomain(ctl, cmd, &name)))
> +        goto out;
> +
> +    if (vshCommandOptString(cmd, "device", &disk) < 0)
> +        goto out;
> +
> +    if (vshCommandOptULongLong(cmd, "bps", &info.bps) < 0) {
> +        info.bps = 0;
> +    }
> +
> +    if (vshCommandOptULongLong(cmd, "bps_rd", &info.bps_rd) < 0) {
> +        info.bps_rd = 0;
> +    }
> +
> +    if (vshCommandOptULongLong(cmd, "bps_wr", &info.bps_wr) < 0) {
> +        info.bps_wr = 0;
> +    }
> +
> +    if (vshCommandOptULongLong(cmd, "iops", &info.iops) < 0) {
> +        info.iops = 0;
> +    }
> +
> +    if (vshCommandOptULongLong(cmd, "iops_rd", &info.iops_rd) < 0) {
> +        info.iops_wr = 0;
> +    }
> +
> +    if (vshCommandOptULongLong(cmd, "iops_wr", &info.iops_wr) < 0) {
> +        info.bps_wr = 0;
> +    }
> +
> +    if ((info.bps == 0) && (info.bps_rd == 0) && (info.bps_wr == 0)
> +        && (info.iops == 0) && (info.iops_rd == 0) && (info.iops_wr == 0)) {
> +        flags = 0;
> +    } else {
> +        flags = 1;
> +    }
> +
> +    ret = virDomainBlockIoThrottle(dom, disk, &info, &reply, flags);
> +
> +    if (ret == 0) {
> +        virDomainFree(dom);
> +        return true;
> +    }
> +
> +out:
> +    virDomainFree(dom);
> +    return false;
> +}
> +
> 
>  /*
>   * "net-autostart" command
> @@ -13712,6 +13797,7 @@ static const vshCmdDef domManagementCmds[] = {
>      {"blkiotune", cmdBlkiotune, opts_blkiotune, info_blkiotune, 0},
>      {"blockpull", cmdBlockPull, opts_block_pull, info_block_pull, 0},
>      {"blockjob", cmdBlockJob, opts_block_job, info_block_job, 0},
> +    {"blkiothrottle", cmdBlkIoThrottle, opts_blkiothrottle, 
> info_blkiothrottle, 0},
>  #ifndef WIN32
>      {"console", cmdConsole, opts_console, info_console, 0},
>  #endif
> diff --git a/tools/virsh.pod b/tools/virsh.pod
> index 1f7c76f..5b52980 100644
> --- a/tools/virsh.pod
> +++ b/tools/virsh.pod
> @@ -572,6 +572,19 @@ operation can be checked with B<blockjob>.
>  I<path> specifies fully-qualified path of the disk.
>  I<bandwidth> specifies copying bandwidth limit in Mbps.
> 
> +=item B<blkiothrottle> I<domain> I<device> [[I<--bps> B<bps>] | 
> [[I<--bps_rd> B<bps_rd>] [I<--bps_wr> B<bps_wr>]] [[I<--iops> B<iops>] | 
> [[I<--iops_rd> B<iops_rd>] [I<--iops_wr> B<iops_wr>]]
> +
> +Set or display the block disk io limits settting.
> +I<path> specifies block disk name.
> +I<--bps> specifies total throughput limit in bytes/s.
> +I<--bps_rd> specifies read throughput limit in bytes/s.
> +I<--bps_wr> specifies write throughput limit in bytes/s.
> +I<--iops> specifies total operation limit in numbers/s.
> +I<--iops_rd> specifies read operation limit in numbers/s.
> +I<--iops_wr> specifies write operation limit in numbers/s.
> +
> +If no limit is specified, it will query current I/O limits setting.
> +
>  =item B<blockjob> I<domain> I<path> [I<--abort>] [I<--info>] [I<bandwidth>]
> 
>  Manage active block operations.
> -- 
> 1.7.1
> 

-- 
Adam Litke <[email protected]>
IBM Linux Technology Center

--
libvir-list mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to