def test(self): if build.make(self.sourcedir, extra_args='-k test', ignore_status=True): if len(memory.numa_nodes_with_memory()) < 2: self.log.warn('Few tests failed due to less NUMA mem-nodes') else: self.fail('test failed, Please check debug log')
def test_numa_nodes_with_memory(self): file_values = [u"0\n", u"1-3", u"0-1,12-14\n"] expected_values = [[0], [1, 2, 3], [0, 1, 12, 13, 14]] for value, exp in zip(file_values, expected_values): with mock.patch('os.path.exists', return_value=True): with mock.patch('avocado.utils.genio.read_file', return_value=value): self.assertEqual(memory.numa_nodes_with_memory(), exp)
def setUp(self): smm = SoftwareManager() dist = distro.detect() memsize = int(memory.meminfo.MemFree.b * 0.2) self.nr_pages = self.params.get('nr_pages', default=memsize / memory.get_page_size()) self.map_type = self.params.get('map_type', default='private') self.hpage = self.params.get('h_page', default=False) nodes = memory.numa_nodes_with_memory() if len(nodes) < 2: self.cancel('Test requires two numa nodes to run.' 'Node list with memory: %s' % nodes) pkgs = ['gcc', 'make'] hp_check = 0 if self.hpage: hp_size = memory.get_huge_page_size() for node in nodes: genio.write_file( '/sys/devices/system/node/node%s/hugepages/hu' 'gepages-%skB/nr_hugepages' % (node, str(hp_size)), str(self.nr_pages)) for node in nodes: hp_check += int( genio.read_file( '/sys/devices/system/node/node%s/hugepages/hugepages-%skB' '/nr_hugepages' % (node, str(hp_size))).strip()) if hp_check < self.nr_pages: self.cancel('Not enough pages to be configured on nodes') if dist.name == "Ubuntu": pkgs.extend( ['libpthread-stubs0-dev', 'libnuma-dev', 'libhugetlbfs-dev']) elif dist.name in ["centos", "rhel", "fedora"]: pkgs.extend(['numactl-devel', 'libhugetlbfs-devel']) elif dist.name == "SuSE": pkgs.extend(['libnuma-devel']) if dist.version >= 15: pkgs.extend(['libhugetlbfs-devel']) else: pkgs.extend(['libhugetlbfs-libhugetlb-devel']) for package in pkgs: if not smm.check_installed(package) and not smm.install(package): self.cancel('%s is needed for the test to be run' % package) for file_name in [ 'util.c', 'numa_test.c', 'softoffline.c', 'bench_movepages.c', 'Makefile' ]: self.copyutil(file_name) build.make(self.teststmpdir)
def setUp(self): smm = SoftwareManager() dist = distro.detect() memsize = int(memory.freememtotal() * 1024 * 0.2) self.nr_pages = self.params.get( 'nr_pages', default=memsize / memory.get_page_size()) self.map_type = self.params.get('map_type', default='private') self.hpage = self.params.get('h_page', default=False) nodes = memory.numa_nodes_with_memory() if len(nodes) < 2: self.cancel('Test requires two numa nodes to run.' 'Node list with memory: %s' % nodes) pkgs = ['gcc', 'make'] hp_check = 0 if self.hpage: hp_size = memory.get_huge_page_size() for node in nodes: genio.write_file('/sys/devices/system/node/node%s/hugepages/hu' 'gepages-%skB/nr_hugepages' % (node, str(hp_size)), str(self.nr_pages)) for node in nodes: hp_check += int(genio.read_file( '/sys/devices/system/node/node%s/hugepages/hugepages-%skB' '/nr_hugepages' % (node, str(hp_size))).strip()) if hp_check < self.nr_pages: self.cancel('Not enough pages to be configured on nodes') if dist.name == "Ubuntu": pkgs.extend(['libpthread-stubs0-dev', 'libnuma-dev', 'libhugetlbfs-dev']) elif dist.name in ["centos", "rhel", "fedora"]: pkgs.extend(['numactl-devel', 'libhugetlbfs-devel']) elif dist.name == "SuSE": pkgs.extend(['libnuma-devel']) if dist.version >= 15: pkgs.extend(['libhugetlbfs-devel']) else: pkgs.extend(['libhugetlbfs-libhugetlb-devel']) for package in pkgs: if not smm.check_installed(package) and not smm.install(package): self.cancel('%s is needed for the test to be run' % package) for file_name in ['util.c', 'numa_test.c', 'Makefile']: self.copyutil(file_name) build.make(self.teststmpdir)
def setUp(self): """ Build binary and filter tests based on the environment """ smm = SoftwareManager() deps = ['gcc', 'make', 'patch'] detected_distro = distro.detect() skip_offline = self.params.get("skip_softoffline", default=True) if detected_distro.name in ["Ubuntu", 'debian']: deps.extend(['libpthread-stubs0-dev', 'git']) elif detected_distro.name == "SuSE": deps.extend(['glibc-devel-static', 'git-core']) else: deps.extend(['glibc-static', 'git', 'runc']) for package in deps: if not smm.check_installed(package) and not smm.install(package): self.cancel('%s is needed for the test to be run' % package) git.get_repo("https://gitlab.com/harish-24/linux-mm", destination_dir=self.logdir) os.chdir(self.logdir) build.make(self.logdir) tst_list = process.system_output('./random -l').decode().splitlines() self.test_dic = {} for line in tst_list: keyval = line.split(":") self.test_dic[keyval[0]] = keyval[1] skip_numa = False if len(memory.numa_nodes_with_memory()) < 2: skip_numa = True rm_list = [] for key, val in self.test_dic.items(): if skip_numa: if 'NUMA' in val or 'migrate' in val: if key not in rm_list: rm_list.append(key) if skip_offline: if 'soft offlin' in val: if key not in rm_list: rm_list.append(key) if detected_distro.name == "SuSE": if 'runc' in val: if key not in rm_list: rm_list.append(key) for item in rm_list: self.test_dic.pop(item)
def setUp(self): self.nr_chunks = self.params.get('nr_chunks', default=1) self.hpage = self.params.get('h_page', default=False) self.hpage_commit = self.params.get('h_commit', default=False) self.thp = self.params.get('thp', default=False) nodes = memory.numa_nodes_with_memory() if len(nodes) < 2: self.cancel('Test requires two numa nodes to run.' 'Node list with memory: %s' % nodes) dist = distro.detect() pkgs = ['gcc', 'make'] if dist.name in ["Ubuntu", 'debian']: pkgs.extend( ['libpthread-stubs0-dev', 'libnuma-dev', 'libhugetlbfs-dev']) elif dist.name in ["centos", "rhel", "fedora"]: pkgs.extend(['numactl-devel', 'libhugetlbfs-devel']) elif dist.name == "SuSE": pkgs.extend(['libnuma-devel']) if dist.version >= 15: pkgs.extend(['libhugetlbfs-devel']) else: pkgs.extend(['libhugetlbfs-libhugetlb-devel']) smm = SoftwareManager() for package in pkgs: if not smm.check_installed(package) and not smm.install(package): self.cancel('%s is needed for the test to be run' % package) # Enable THP if self.thp: try: memory.set_thp_value("enabled", "always") except Exception as details: self.fail("Failed to enable thp %s" % details) for file_name in ['node_move_pages.c', 'Makefile']: self.copyutil(file_name) build.make(self.teststmpdir)
# # See LICENSE for more details. # # Copyright: 2018 IBM # Author: Harish <*****@*****.**> # import os import shutil from avocado import Test from avocado import skipIf from avocado.utils import process, build, memory, distro, genio from avocado.utils.software_manager.manager import SoftwareManager SINGLE_NODE = len(memory.numa_nodes_with_memory()) < 2 class NumaTest(Test): """ Exercises numa_move_pages and mbind call with 20% of the machine's free memory :avocado: tags=memory,migration,hugepage """ def copyutil(self, file_name): shutil.copyfile(self.get_data(file_name), os.path.join(self.teststmpdir, file_name)) def setUp(self): smm = SoftwareManager()