]> xenbits.xensource.com Git - libvirt.git/commitdiff
Implement cgroup memory controller tunables
authorNikunj A. Dadhania <nikunj@linux.vnet.ibm.com>
Tue, 12 Oct 2010 14:50:53 +0000 (16:50 +0200)
committerDaniel Veillard <veillard@redhat.com>
Tue, 12 Oct 2010 17:26:09 +0000 (19:26 +0200)
Provides interfaces for setting/getting memory tunables like hard_limit,
soft_limit and swap_hard_limit

src/libvirt_private.syms
src/util/cgroup.c
src/util/cgroup.h

index 1d94b1240096994873c5ae9dd30cecc6c78da253..1d8ea95c4a09edd1169fa7fe6336be08bc6cff24 100644 (file)
@@ -77,6 +77,12 @@ virCgroupControllerTypeFromString;
 virCgroupGetCpuacctUsage;
 virCgroupGetFreezerState;
 virCgroupSetFreezerState;
+virCgroupSetMemoryHardLimit;
+virCgroupGetMemoryHardLimit;
+virCgroupSetMemorySoftLimit;
+virCgroupGetMemorySoftLimit;
+virCgroupSetSwapHardLimit;
+virCgroupGetSwapHardLimit;
 
 
 # cpu.h
index 024036af37372c75ebb5639442f8558195270edf..7e887dc55c937bc0c7aaba67bd302e171a47e197 100644 (file)
@@ -873,6 +873,112 @@ int virCgroupGetMemoryUsage(virCgroupPtr group, unsigned long *kb)
     return ret;
 }
 
+/**
+ * virCgroupSetMemoryHardLimit:
+ *
+ * @group: The cgroup to change memory hard limit for
+ * @kb: The memory amount in kilobytes
+ *
+ * Returns: 0 on success
+ */
+int virCgroupSetMemoryHardLimit(virCgroupPtr group, unsigned long kb)
+{
+    return virCgroupSetMemory(group, kb);
+}
+
+/**
+ * virCgroupGetMemoryHardLimit:
+ *
+ * @group: The cgroup to get the memory hard limit for
+ * @kb: The memory amount in kilobytes
+ *
+ * Returns: 0 on success
+ */
+int virCgroupGetMemoryHardLimit(virCgroupPtr group, unsigned long *kb)
+{
+    long long unsigned int limit_in_bytes;
+    int ret;
+    ret = virCgroupGetValueU64(group,
+                               VIR_CGROUP_CONTROLLER_MEMORY,
+                               "memory.limit_in_bytes", &limit_in_bytes);
+    if (ret == 0)
+        *kb = (unsigned long) limit_in_bytes >> 10;
+    return ret;
+}
+
+/**
+ * virCgroupSetMemorySoftLimit:
+ *
+ * @group: The cgroup to change memory soft limit for
+ * @kb: The memory amount in kilobytes
+ *
+ * Returns: 0 on success
+ */
+int virCgroupSetMemorySoftLimit(virCgroupPtr group, unsigned long kb)
+{
+    return virCgroupSetValueU64(group,
+                                VIR_CGROUP_CONTROLLER_MEMORY,
+                                "memory.soft_limit_in_bytes",
+                                kb << 10);
+}
+
+
+/**
+ * virCgroupGetMemorySoftLimit:
+ *
+ * @group: The cgroup to get the memory soft limit for
+ * @kb: The memory amount in kilobytes
+ *
+ * Returns: 0 on success
+ */
+int virCgroupGetMemorySoftLimit(virCgroupPtr group, unsigned long *kb)
+{
+    long long unsigned int limit_in_bytes;
+    int ret;
+    ret = virCgroupGetValueU64(group,
+                               VIR_CGROUP_CONTROLLER_MEMORY,
+                               "memory.soft_limit_in_bytes", &limit_in_bytes);
+    if (ret == 0)
+        *kb = (unsigned long) limit_in_bytes >> 10;
+    return ret;
+}
+
+/**
+ * virCgroupSetSwapHardLimit:
+ *
+ * @group: The cgroup to change swap hard limit for
+ * @kb: The swap amount in kilobytes
+ *
+ * Returns: 0 on success
+ */
+int virCgroupSetSwapHardLimit(virCgroupPtr group, unsigned long kb)
+{
+    return virCgroupSetValueU64(group,
+                                VIR_CGROUP_CONTROLLER_MEMORY,
+                                "memory.memsw.limit_in_bytes",
+                                kb << 10);
+}
+
+/**
+ * virCgroupGetSwapHardLimit:
+ *
+ * @group: The cgroup to get swap hard limit for
+ * @kb: The swap amount in kilobytes
+ *
+ * Returns: 0 on success
+ */
+int virCgroupGetSwapHardLimit(virCgroupPtr group, unsigned long *kb)
+{
+    long long unsigned int limit_in_bytes;
+    int ret;
+    ret = virCgroupGetValueU64(group,
+                               VIR_CGROUP_CONTROLLER_MEMORY,
+                               "memory.memsw.limit_in_bytes", &limit_in_bytes);
+    if (ret == 0)
+        *kb = (unsigned long) limit_in_bytes >> 10;
+    return ret;
+}
+
 /**
  * virCgroupDenyAllDevices:
  *
index 2bea49fc59f77c11e3c76891616dac865c29f5d9..b8f2d0899b255073a2222aa38528c2fa11fa39b1 100644 (file)
@@ -43,6 +43,13 @@ int virCgroupAddTask(virCgroupPtr group, pid_t pid);
 int virCgroupSetMemory(virCgroupPtr group, unsigned long kb);
 int virCgroupGetMemoryUsage(virCgroupPtr group, unsigned long *kb);
 
+int virCgroupSetMemoryHardLimit(virCgroupPtr group, unsigned long kb);
+int virCgroupGetMemoryHardLimit(virCgroupPtr group, unsigned long *kb);
+int virCgroupSetMemorySoftLimit(virCgroupPtr group, unsigned long kb);
+int virCgroupGetMemorySoftLimit(virCgroupPtr group, unsigned long *kb);
+int virCgroupSetSwapHardLimit(virCgroupPtr group, unsigned long kb);
+int virCgroupGetSwapHardLimit(virCgroupPtr group, unsigned long *kb);
+
 int virCgroupDenyAllDevices(virCgroupPtr group);
 
 int virCgroupAllowDevice(virCgroupPtr group,