| 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()
|
|
|