]> xenbits.xensource.com Git - libvirt.git/commitdiff
vircgroup.c: add virCgroupSetupBlkioDevice* helpers
authorDaniel Henrique Barboza <danielhb413@gmail.com>
Mon, 17 Feb 2020 21:29:08 +0000 (16:29 -0500)
committerJán Tomko <jtomko@redhat.com>
Sun, 23 Feb 2020 13:02:22 +0000 (14:02 +0100)
The current use of the functions that set and get
BlkioDevice attributes is doing a set(), followed by
a get() of the same parameter right after. This is done
because there is no guarantee that the kernel will accept
the desired value given by the set() call, thus we need to
execute a get() right after to get the actual value.

This patch adds helpers inside vircgroup.c to execute these
operations. Next patch will use these helpers to reduce
code repetition in LXC and QEMU files.

Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
Signed-off-by: Ján Tomko <jtomko@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/libvirt_private.syms
src/util/vircgroup.c
src/util/vircgroup.h

index 8883aa89cc1f671af80a3c06c076a2ac689144e9..caee9af01b45e87fd31e073ca3a6e223983b1dc5 100644 (file)
@@ -1731,6 +1731,11 @@ virCgroupSetMemoryHardLimit;
 virCgroupSetMemorySoftLimit;
 virCgroupSetMemSwapHardLimit;
 virCgroupSetOwner;
+virCgroupSetupBlkioDeviceReadBps;
+virCgroupSetupBlkioDeviceReadIops;
+virCgroupSetupBlkioDeviceWeight;
+virCgroupSetupBlkioDeviceWriteBps;
+virCgroupSetupBlkioDeviceWriteIops;
 virCgroupSupportsCpuBW;
 virCgroupTerminateMachine;
 
index 0680ff7c24106592bfe75a221fd265c9941f1b7b..302352aca3ae5d818881a19d42acfdf323916d2d 100644 (file)
@@ -3581,3 +3581,88 @@ virCgroupDelThread(virCgroupPtr cgroup,
 
     return 0;
 }
+
+
+/**
+ * Calls virCgroupSetBlkioDeviceWeight() to set up blkio device weight,
+ * then retrieves the actual value set by the kernel with
+ * virCgroupGetBlkioDeviceWeight() in the same @weight pointer.
+ */
+int
+virCgroupSetupBlkioDeviceWeight(virCgroupPtr cgroup, const char *path,
+                                unsigned int *weight)
+{
+    if (virCgroupSetBlkioDeviceWeight(cgroup, path, *weight) < 0 ||
+        virCgroupGetBlkioDeviceWeight(cgroup, path, weight) < 0)
+        return -1;
+
+    return 0;
+}
+
+
+/**
+ * Calls virCgroupSetBlkioDeviceReadIops() to set up blkio device riops,
+ * then retrieves the actual value set by the kernel with
+ * virCgroupGetBlkioDeviceReadIops() in the same @riops pointer.
+ */
+int
+virCgroupSetupBlkioDeviceReadIops(virCgroupPtr cgroup, const char *path,
+                                  unsigned int *riops)
+{
+    if (virCgroupSetBlkioDeviceReadIops(cgroup, path, *riops) < 0 ||
+        virCgroupGetBlkioDeviceReadIops(cgroup, path, riops) < 0)
+        return -1;
+
+    return 0;
+}
+
+
+/**
+ * Calls virCgroupSetBlkioDeviceWriteIops() to set up blkio device wiops,
+ * then retrieves the actual value set by the kernel with
+ * virCgroupGetBlkioDeviceWriteIops() in the same @wiops pointer.
+ */
+int
+virCgroupSetupBlkioDeviceWriteIops(virCgroupPtr cgroup, const char *path,
+                                   unsigned int *wiops)
+{
+    if (virCgroupSetBlkioDeviceWriteIops(cgroup, path, *wiops) < 0 ||
+        virCgroupGetBlkioDeviceWriteIops(cgroup, path, wiops) < 0)
+        return -1;
+
+    return 0;
+}
+
+
+/**
+ * Calls virCgroupSetBlkioDeviceReadBps() to set up blkio device rbps,
+ * then retrieves the actual value set by the kernel with
+ * virCgroupGetBlkioDeviceReadBps() in the same @rbps pointer.
+ */
+int
+virCgroupSetupBlkioDeviceReadBps(virCgroupPtr cgroup, const char *path,
+                                 unsigned long long *rbps)
+{
+    if (virCgroupSetBlkioDeviceReadBps(cgroup, path, *rbps) < 0 ||
+        virCgroupGetBlkioDeviceReadBps(cgroup, path, rbps) < 0)
+        return -1;
+
+    return 0;
+}
+
+
+/**
+ * Calls virCgroupSetBlkioDeviceWriteBps() to set up blkio device wbps,
+ * then retrieves the actual value set by the kernel with
+ * virCgroupGetBlkioDeviceWriteBps() in the same @wbps pointer.
+ */
+int
+virCgroupSetupBlkioDeviceWriteBps(virCgroupPtr cgroup, const char *path,
+                                  unsigned long long *wbps)
+{
+    if (virCgroupSetBlkioDeviceWriteBps(cgroup, path, *wbps) < 0 ||
+        virCgroupGetBlkioDeviceWriteBps(cgroup, path, wbps) < 0)
+        return -1;
+
+    return 0;
+}
index 15263f534a4e6c676b83fbd9078b015586f5693f..6bd3f4fe9d998609b63689bb9ff3212d8c2d294d 100644 (file)
@@ -175,6 +175,26 @@ int virCgroupGetBlkioDeviceWriteBps(virCgroupPtr group,
                                     const char *path,
                                     unsigned long long *wbps);
 
+int virCgroupSetupBlkioDeviceWeight(virCgroupPtr cgroup,
+                                    const char *path,
+                                    unsigned int *weight);
+
+int virCgroupSetupBlkioDeviceReadIops(virCgroupPtr cgroup,
+                                      const char *path,
+                                      unsigned int *riops);
+
+int virCgroupSetupBlkioDeviceWriteIops(virCgroupPtr cgroup,
+                                       const char *path,
+                                       unsigned int *wiops);
+
+int virCgroupSetupBlkioDeviceReadBps(virCgroupPtr cgroup,
+                                     const char *path,
+                                     unsigned long long *rbps);
+
+int virCgroupSetupBlkioDeviceWriteBps(virCgroupPtr cgroup,
+                                      const char *path,
+                                      unsigned long long *wbps);
+
 int virCgroupSetMemory(virCgroupPtr group, unsigned long long kb);
 int virCgroupGetMemoryStat(virCgroupPtr group,
                            unsigned long long *cache,