[libvirt] [PATCH 3/8] Implement virDomain{Set, Get}BlockIoTune for the qemu driver

Lei Li lilei at linux.vnet.ibm.com
Tue Nov 29 02:40:39 UTC 2011


On 11/28/2011 11:24 PM, Adam Litke wrote:
> On Wed, Nov 23, 2011 at 10:41:32AM -0700, Eric Blake wrote:
>
>> Hmm - passing nparams==1 to set just read_bytes_sec has the side effect
>> of wiping out any existing total_iops_sec, even though those two
>> parameters seem somewhat orthogonal, all because we zero-initialized the
>> struct that we pass on to the monitor command.  Is that intended?  I can
>> live with it (but it probably ought to be documented), but we may want
>> to consider being more flexible, by using '0' to clear a previous limit,
>> but initializing to '-1' to imply the limit does not change.  Then the
>> qemu_monitor_json code should only emit the arguments that are actually
>> being changed, rather than blindly always outputting 6 parameters even
>> when the user only passed in one parameter.  But I'm okay delaying that
>> to a separate patch based on whether others think it would be a good
>> improvement.
> +1.  I believe I had pointed this out previously as well (albeit not as
> concisely as this).
>
Well, here is the description of block I/O throttling command 'block_io_set_throttle'
in qmp-commands.hx.

EQMP

     {
         .name       = "block_set_io_throttle",
         .args_type  = "device:B,bps:i?,bps_rd:i?,bps_wr:i?,iops:i?,iops_rd:i?,iops_wr:i?",
         .params     = "device [bps] [bps_rd] [bps_wr] [iops] [iops_rd] [iops_wr]",
         .help       = "change I/O throttle limits for a block drive",
         .user_print = monitor_user_noop,
         .mhandler.cmd_new = do_block_set_io_throttle,
     },

SQMP
block_set_io_throttle
------------

Change I/O throttle limits for a block drive.

Arguments:

- "device": device name (json-string)
- "bps":  total throughput limit in bytes per second(json-int, optional)
- "bps_rd":  read throughput limit in bytes per second(json-int, optional)
- "bps_wr":  read throughput limit in bytes per second(json-int, optional)
- "iops":  total I/O operations per second(json-int, optional)
- "iops_rd":  read I/O operations per second(json-int, optional)
- "iops_wr":  write I/O operations per second(json-int, optional)

Example:

->  { "execute": "block_set_io_throttle", "arguments": { "device": "virtio0",
                                                "bps": "1000000",
                                                "bps_rd": "0",
                                                "bps_wr": "0",
                                                "iops": "0",
                                                "iops_rd": "0",
                                                "iops_wr": "0" } }
<- { "return": {} }


This qmp command need all these 6 parameters at one time in qemu, so
zero-initialized the struct to meet If there is no setting value for
some of the fields.





-- 
Lei




More information about the libvir-list mailing list