[PATCH] Adds support for newer (sysfs) ksm interface

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

 



Signed-off-by: Lukas Doktor <ldoktor@xxxxxxxxxx>
Signed-off-by: Jiri Zupka <jzupka@xxxxxxxxxx>
---
 client/tests/kvm/tests/ksm_overcommit.py |   47 ++++++++++++++++++++++++-----
 client/tests/kvm/tests_base.cfg.sample   |    2 -
 2 files changed, 39 insertions(+), 10 deletions(-)

diff --git a/client/tests/kvm/tests/ksm_overcommit.py b/client/tests/kvm/tests/ksm_overcommit.py
index 2b791f1..a19b815 100644
--- a/client/tests/kvm/tests/ksm_overcommit.py
+++ b/client/tests/kvm/tests/ksm_overcommit.py
@@ -59,6 +59,18 @@ def run_ksm_overcommit(test, params, env):
         return (match, data)
 
 
+    def get_ksmstat():
+        """
+        Return sharing memory by ksm in MB
+
+        @return: memory in MB
+        """
+        f = open('/sys/kernel/mm/ksm/pages_sharing')
+        ksm_pages = int(f.read())
+        f.close()
+        return ((ksm_pages*4096)/1e6)
+
+
     def initialize_guests():
         """
         Initialize guests (fill their memories with specified patterns).
@@ -88,21 +100,25 @@ def run_ksm_overcommit(test, params, env):
             # Let allocator.py do its job
             # (until shared mem reaches expected value)
             shm = 0
-            i = 0
+            j = 0
             logging.debug("Target shared meminfo for guest %s: %s", vm.name,
                           ksm_size)
-            while shm < ksm_size:
-                if i > 64:
+            while ((new_ksm and (shm < (ksm_size*(i+1)))) or 
+                    (not new_ksm and (shm < (ksm_size)))):
+                if j > 64:
                     logging.debug(kvm_test_utils.get_memory_info(lvms))
                     raise error.TestError("SHM didn't merge the memory until "
                                           "the DL on guest: %s" % vm.name)
                 st = ksm_size / 200 * perf_ratio
                 logging.debug("Waiting %ds before proceeding..." % st)
                 time.sleep(st)
-                shm = vm.get_shared_meminfo()
+                if (new_ksm):
+                    shm = get_ksmstat()
+                else:
+                    shm = vm.get_shared_meminfo()
                 logging.debug("Shared meminfo for guest %s after "
-                              "iteration %s: %s", vm.name, i, shm)
-                i += 1
+                              "iteration %s: %s", vm.name, j, shm)
+                j += 1
 
         # Keep some reserve
         rt = ksm_size / 200 * perf_ratio
@@ -263,14 +279,17 @@ def run_ksm_overcommit(test, params, env):
         shm = 0
         i = 0
         logging.debug("Target shared memory size: %s", ksm_size)
-        while shm < ksm_size:
+        while (shm < ksm_size):
             if i > 64:
                 logging.debug(kvm_test_utils.get_memory_info(lvms))
                 raise error.TestError("SHM didn't merge the memory until DL")
             wt = ksm_size / 200 * perf_ratio
             logging.debug("Waiting %ds before proceed...", wt)
             time.sleep(wt)
-            shm = vm.get_shared_meminfo()
+            if (new_ksm):
+                shm = get_ksmstat()
+            else:
+                shm = vm.get_shared_meminfo()
             logging.debug("Shared meminfo after attempt %s: %s", i, shm)
             i += 1
 
@@ -348,6 +367,18 @@ def run_ksm_overcommit(test, params, env):
 
     # Main test code
     logging.info("Starting phase 0: Initialization")
+    new_ksm = False
+    if (os.path.exists("/sys/kernel/mm/ksm/run")):
+        utils.run("echo 50 > /sys/kernel/mm/ksm/sleep_millisecs")
+        utils.run("echo 5000 > /sys/kernel/mm/ksm/pages_to_scan")
+        utils.run("echo 1 > /sys/kernel/mm/ksm/run")
+        new_ksm = True
+    else:
+        try:
+            utils.run("modprobe ksm")
+            utils.run("ksmctl start 5000 100")
+        except error.CmdError, e:
+            raise error.TestFail("Failed to load KSM: %s" % e)
 
     # host_reserve: mem reserve kept for the host system to run
     host_reserve = int(params.get("ksm_host_reserve", -1))
diff --git a/client/tests/kvm/tests_base.cfg.sample b/client/tests/kvm/tests_base.cfg.sample
index ab8922b..b377eeb 100644
--- a/client/tests/kvm/tests_base.cfg.sample
+++ b/client/tests/kvm/tests_base.cfg.sample
@@ -315,8 +315,6 @@ variants:
         catch_uuid_cmd = dmidecode | awk -F: '/UUID/ {print $2}'
 
     - ksm_overcommit:
-        pre_command = "[ -e /dev/ksm ] && true || modprobe ksm && ksmctl start 5000 50"
-        pre_command_critical = yes
         # Don't preprocess any vms as we need to change its params
         vms = ''
         image_snapshot = yes
-- 
1.6.6.1

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux