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)
Beispiel #6
0
    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()