Index: client/tests/kvm/scripts/hugepage.py |
diff --git a/client/tests/kvm/scripts/hugepage.py b/client/tests/kvm/scripts/hugepage.py |
deleted file mode 100755 |
index 8a1b0f68772aa585490b1bb086190fac476e2026..0000000000000000000000000000000000000000 |
--- a/client/tests/kvm/scripts/hugepage.py |
+++ /dev/null |
@@ -1,118 +0,0 @@ |
-#!/usr/bin/python |
-# -*- coding: utf-8 -*- |
-import os, sys, time |
- |
-""" |
-Simple script to allocate enough hugepages for KVM testing purposes. |
-""" |
- |
-class HugePageError(Exception): |
- """ |
- Simple wrapper for the builtin Exception class. |
- """ |
- pass |
- |
- |
-class HugePage: |
- def __init__(self, hugepage_path=None): |
- """ |
- Gets environment variable values and calculates the target number |
- of huge memory pages. |
- |
- @param hugepage_path: Path where to mount hugetlbfs path, if not |
- yet configured. |
- """ |
- self.vms = len(os.environ['KVM_TEST_vms'].split()) |
- self.mem = int(os.environ['KVM_TEST_mem']) |
- try: |
- self.max_vms = int(os.environ['KVM_TEST_max_vms']) |
- except KeyError: |
- self.max_vms = 0 |
- |
- if hugepage_path: |
- self.hugepage_path = hugepage_path |
- else: |
- self.hugepage_path = '/mnt/kvm_hugepage' |
- |
- self.hugepage_size = self.get_hugepage_size() |
- self.target_hugepages = self.get_target_hugepages() |
- print "Number of VMs this test will use: %d" % self.vms |
- print "Amount of memory used by each vm: %s" % self.mem |
- print ("System setting for large memory page size: %s" % |
- self.hugepage_size) |
- print ("Number of large memory pages needed for this test: %s" % |
- self.target_hugepages) |
- |
- |
- def get_hugepage_size(self): |
- """ |
- Get the current system setting for huge memory page size. |
- """ |
- meminfo = open('/proc/meminfo', 'r').readlines() |
- huge_line_list = [h for h in meminfo if h.startswith("Hugepagesize")] |
- try: |
- return int(huge_line_list[0].split()[1]) |
- except ValueError, e: |
- raise HugePageError("Could not get huge page size setting from " |
- "/proc/meminfo: %s" % e) |
- |
- |
- def get_target_hugepages(self): |
- """ |
- Calculate the target number of hugepages for testing purposes. |
- """ |
- if self.vms < self.max_vms: |
- self.vms = self.max_vms |
- # memory of all VMs plus qemu overhead of 64MB per guest |
- vmsm = (self.vms * self.mem) + (self.vms * 64) |
- return int(vmsm * 1024 / self.hugepage_size) |
- |
- |
- def set_hugepages(self): |
- """ |
- Sets the hugepage limit to the target hugepage value calculated. |
- """ |
- hugepage_cfg = open("/proc/sys/vm/nr_hugepages", "r+") |
- hp = hugepage_cfg.readline() |
- while int(hp) < self.target_hugepages: |
- loop_hp = hp |
- hugepage_cfg.write(str(self.target_hugepages)) |
- hugepage_cfg.flush() |
- hugepage_cfg.seek(0) |
- hp = int(hugepage_cfg.readline()) |
- if loop_hp == hp: |
- raise HugePageError("Cannot set the kernel hugepage setting " |
- "to the target value of %d hugepages." % |
- self.target_hugepages) |
- hugepage_cfg.close() |
- print ("Successfuly set %s large memory pages on host " % |
- self.target_hugepages) |
- |
- |
- def mount_hugepage_fs(self): |
- """ |
- Verify if there's a hugetlbfs mount set. If there's none, will set up |
- a hugetlbfs mount using the class attribute that defines the mount |
- point. |
- """ |
- if not os.path.ismount(self.hugepage_path): |
- if not os.path.isdir(self.hugepage_path): |
- os.makedirs(self.hugepage_path) |
- cmd = "mount -t hugetlbfs none %s" % self.hugepage_path |
- if os.system(cmd): |
- raise HugePageError("Cannot mount hugetlbfs path %s" % |
- self.hugepage_path) |
- |
- |
- def setup(self): |
- self.set_hugepages() |
- self.mount_hugepage_fs() |
- |
- |
-if __name__ == "__main__": |
- if len(sys.argv) < 2: |
- huge_page = HugePage() |
- else: |
- huge_page = HugePage(sys.argv[1]) |
- |
- huge_page.setup() |