[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [libvirt] [RFC PATCH 0/8 v3] Summary on block IO throttle



On 11/10/2011 03:04 PM, Eric Blake wrote:

We still need a v4 respinning this to use virTypedParameter; I can help
by posting a patch 1/8 that shows the changes that I think we need in
the public interface, but I don't want to spend the time rebasing the
entire series.

This is more along the lines of what I'm looking for in patch 1/8 (as a diff against your v3 attempt at 1/8). Obviously, it doesn't compile as is, so much as focus on the public interface aspect:

diff --git i/include/libvirt/libvirt.h.in w/include/libvirt/libvirt.h.in
index 4b05869..52ae0ab 100644
--- i/include/libvirt/libvirt.h.in
+++ w/include/libvirt/libvirt.h.in
@@ -1684,26 +1684,27 @@ int virDomainBlockPull(virDomainPtr dom, const char *path,
  * Block I/O throttling support
  */

-typedef struct _virDomainBlockIoTuneInfo virDomainBlockIoTuneInfo;
-struct _virDomainBlockIoTuneInfo {
-    unsigned long long total_bytes_sec;
-    unsigned long long read_bytes_sec;
-    unsigned long long write_bytes_sec;
-    unsigned long long total_iops_sec;
-    unsigned long long read_iops_sec;
-    unsigned long long write_iops_sec;
-};
-typedef virDomainBlockIoTuneInfo *virDomainBlockIoTuneInfoPtr;
+/**
+ * VIR_DOMAIN_BLOCK_IOTUNE_TOTAL_BYTES_SEC:
+ *
+ * Macro for the BlockIoTune tunable weight: it represents the total
+ * bytes per second permitted through a block device, as a ullong.
+ */
+#define VIR_DOMAIN_BLOCK_IOTUNE_TOTAL_BYTES_SEC "total_bytes_sec"
+
+/* ... and so forth - 6 macros total */

 int
 virDomainSetBlockIoTune(virDomainPtr dom,
                         const char *disk,
-                        virDomainBlockIoTuneInfoPtr info,
+                        virTypedParameterPtr params,
+                        int nparams,
                         unsigned int flags);
 int
 virDomainGetBlockIoTune(virDomainPtr dom,
                         const char *disk,
-                        virDomainBlockIoTuneInfoPtr reply,
+                        virTypedParameterPtr params,
+                        int *nparams,
                         unsigned int flags);


diff --git i/src/libvirt.c w/src/libvirt.c
index cd5931f..287dfc5 100644
--- i/src/libvirt.c
+++ w/src/libvirt.c
@@ -17184,17 +17184,23 @@ error:
  * virDomainSetBlockIoTune:
  * @dom: pointer to domain object
  * @disk: Fully-qualified disk name
- * @info: Specify block I/O limits in bytes
+ * @params: pointer to blkio parameter objects
+ * @nparams: number of blkio parameters (this value can be the same or
+ *          less than the number of parameters supported)
  * @flags: An OR'ed set of virDomainModificationImpact
  *
- * This function is mainly to enable Block I/O throttling function in libvirt. - * It is used to change the block I/O throttling setting for specified domain.
+ * Change all or a subset of the per-device block IO tunables.
  *
- * Returns 0 if the operation has started, -1 on failure.
+ * The @disk parameter is the name of the block device.  Get this
+ * by calling virDomainGetXMLDesc and finding the <target dev='...'>
+ * attribute within //domain/devices/disk.  (For example, "xvda").
+ *
+ * Returns -1 in case of error, 0 in case of success.
  */
 int virDomainSetBlockIoTune(virDomainPtr dom,
                             const char *disk,
-                            virDomainBlockIoTuneInfoPtr info,
+                            virTypedParameterPtr params,
+                            int nparams,
                             unsigned int flags)
 {
     virConnectPtr conn;
@@ -17245,18 +17251,35 @@ error:
  * virDomainGetBlockIoTune:
  * @dom: pointer to domain object
  * @disk: Fully-qualified disk name
- * @reply: Specify block I/O info in bytes
+ * @params: pointer to blkio parameter object
+ *          (return value, allocated by the caller)
+ * @nparams: pointer to number of blkio parameters; input and output
  * @flags: An OR'ed set of virDomainModificationImpact
  *
- * This function is mainly to enable Block I/O throttling function in libvirt.
- * It is used to get the block I/O throttling setting for specified domain.
+ * Get all block IO tunable parameters for a given device.  On input,
+ * @nparams gives the size of the @params array; on output, @nparams
+ * gives how many slots were filled with parameter information, which
+ * might be less but will not exceed the input value.
  *
- * Returns 0 if the operation has started, -1 on failure.
+ * As a special case, calling with @params as NULL and @nparams as 0 on
+ * input will cause @nparams on output to contain the number of parameters
+ * supported by the hypervisor. The caller should then allocate @params
+ * array, i.e. (sizeof(@virTypedParameter) * @nparams) bytes and call the API
+ * again.
+ *
+ * See virDomainGetMemoryParameters() for an equivalent usage example.
+ *
+ * The @disk parameter is the name of the block device.  Get this
+ * by calling virDomainGetXMLDesc and finding the <target dev='...'>
+ * attribute within //domain/devices/disk.  (For example, "xvda").
+ *
+ * Returns -1 in case of error, 0 in case of success.
  */

 int virDomainGetBlockIoTune(virDomainPtr dom,
                             const char *disk,
-                            virDomainBlockIoTuneInfoPtr reply,
+                            virTypedParameterPtr params,
+                            int *nparams,
                             unsigned int flags)
 {
     virConnectPtr conn;


--
Eric Blake   eblake redhat com    +1-801-349-2682
Libvirt virtualization library http://libvirt.org


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]