Re: [libvirt] [RFC PATCH 4/5] Enable the virDomainBlockIoThrottle API in virsh

2011-10-11 Thread Adam Litke
On Mon, Oct 10, 2011 at 09:45:12PM +0800, Lei HH Li wrote:
 
 Signed-off-by: Zhi Yong Wu wu...@linux.vnet.ibm.com
 ---
  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 Bblockjob.
  Ipath specifies fully-qualified path of the disk.
  Ibandwidth specifies copying bandwidth limit in Mbps.
 
 +=item Bblkiothrottle Idomain Idevice [[I--bps Bbps] | 
 [[I--bps_rd Bbps_rd] [I--bps_wr Bbps_wr]] [[I--iops Biops] | 
 [[I--iops_rd Biops_rd] [I--iops_wr Biops_wr]]
 +
 +Set or display the block disk io limits settting.
 +Ipath 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 Bblockjob Idomain Ipath [I--abort] [I--info] [Ibandwidth]
 
  Manage active block operations.
 -- 
 1.7.1
 

-- 
Adam Litke a...@us.ibm.com

[libvirt] [RFC PATCH 4/5] Enable the virDomainBlockIoThrottle API in virsh

2011-10-10 Thread Lei Li

Signed-off-by: Zhi Yong Wu wu...@linux.vnet.ibm.com
---
 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}
+};
+
+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 Bblockjob.
 Ipath specifies fully-qualified path of the disk.
 Ibandwidth specifies copying bandwidth limit in Mbps.
 
+=item Bblkiothrottle Idomain Idevice [[I--bps Bbps] | [[I--bps_rd 
Bbps_rd] [I--bps_wr Bbps_wr]] [[I--iops Biops] | [[I--iops_rd 
Biops_rd] [I--iops_wr Biops_wr]]
+
+Set or display the block disk io limits settting.
+Ipath 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 Bblockjob Idomain Ipath [I--abort] [I--info] [Ibandwidth]
 
 Manage active block operations.
-- 
1.7.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list