示例#1
0
    def test_rdtset_mba_set_command(self, iface):
        command = self.cmd_rdtset(iface,
                                  "-t mba=50;cpu=5-6 -c 5-6 memtester 10M")
        rdtset = subprocess.Popen(command.split(),
                                  stdin=subprocess.PIPE,
                                  stdout=subprocess.PIPE)

        time.sleep(0.1)

        (stdout, _, exitstatus) = self.run_pqos(iface, "-s")
        assert exitstatus == 0

        if iface == "MSR":
            last_cos = Env().get('mba', 'cos') - 1
        else:
            last_cos = Resctrl.get_ctrl_group_count() - 1

        assert re.search("Core 5, L2ID [0-9]+, L3ID [0-9]+ => COS%d" % last_cos, stdout) \
               is not None
        assert re.search("Core 6, L2ID [0-9]+, L3ID [0-9]+ => COS%d" % last_cos, stdout) \
               is not None
        assert "MBA COS{} => 50% available".format(last_cos) in stdout

        self.run("killall memtester")
        rdtset.communicate()
示例#2
0
    def test_rdtset_l3cat_set_command(self, iface):
        param = "-t l3=0xf;cpu=5-6 -c 5-6 memtester 10M"
        command = self.cmd_rdtset(iface, param)
        rdtset = subprocess.Popen(command.split(),
                                  stdin=subprocess.PIPE,
                                  stdout=subprocess.PIPE)

        time.sleep(0.1)

        (stdout, _, exitstatus) = self.run_pqos(iface, "-s")
        assert exitstatus == 0
        if iface == "MSR":
            last_cos = Env().get('cat', 'l3', 'cos') - 1
        else:
            last_cos = Resctrl.get_ctrl_group_count() - 1

        assert re.search(
            "Core 5, L2ID [0-9]+, L3ID [0-9]+ => COS%d" % last_cos,
            stdout) is not None
        assert re.search(
            "Core 6, L2ID [0-9]+, L3ID [0-9]+ => COS%d" % last_cos,
            stdout) is not None
        assert "L3CA COS%d => MASK 0xf" % last_cos in stdout

        self.run("killall memtester")
        rdtset.communicate()
示例#3
0
    def test_rdtset_mba_set_command(self, iface):
        command = self.cmd_rdtset(iface,
                                  "-t mba=50;cpu=5-6 -c 5-6 memtester 10M")
        with subprocess.Popen(command.split(),
                              stdin=subprocess.PIPE,
                              stdout=subprocess.PIPE) as rdtset:

            self.stdout_wait(rdtset, b"memtester version")

            (stdout, _, exitstatus) = self.run_pqos(iface, "-s")
            assert exitstatus == 0

            if iface == "MSR":
                last_cos = Env().get('mba', 'cos') - 1
            else:
                last_cos = Resctrl.get_ctrl_group_count() - 1

            assert re.search(f"Core 5, L2ID [0-9]+, L3ID [0-9]+ => COS{last_cos}", stdout) \
                   is not None
            assert re.search(f"Core 6, L2ID [0-9]+, L3ID [0-9]+ => COS{last_cos}", stdout) \
                   is not None
            assert f"MBA COS{last_cos} => 50% available" in stdout

            self.run("killall memtester")
            rdtset.communicate()
示例#4
0
    def test_rdtset_l3cat_set_task(self, iface):
        (_, _, exitstatus) = self.run_rdtset(iface, "-t l2=0xf -c 5-6 -p 1")
        assert exitstatus == 0

        (stdout, _, exitstatus) = self.run_pqos(iface, "-s")
        assert exitstatus == 0
        last_cos = Resctrl.get_ctrl_group_count() - 1
        assert ("COS{} => 1").format(last_cos) in stdout
        assert ("L2CA COS{} => MASK 0xf").format(last_cos) in stdout
示例#5
0
    def test_rdtset_l3cat_set_task(self, iface):
        (_, _, exitstatus) = self.run_rdtset(iface, "-t l3=0xf -c 5-6 -p 1")
        assert exitstatus == 0

        (stdout, _, exitstatus) = self.run_pqos(iface, "-s")
        assert exitstatus == 0
        last_cos = Resctrl.get_ctrl_group_count() - 1
        assert f"COS{last_cos} => 1" in stdout
        assert f"L3CA COS{last_cos} => MASK 0xf" in stdout
    def test_rdtset_l2cat_set_command(self, iface):
        param = "-t l2=0xf;cpu=5-6 -c 5-6 memtester 10M"
        command = self.cmd_rdtset(iface, param)
        with subprocess.Popen(command.split(), stdin=subprocess.PIPE,
                              stdout=subprocess.PIPE) as rdtset:

            self.stdout_wait(rdtset, b"memtester version")

            (stdout, _, exitstatus) = self.run_pqos(iface, "-s")
            assert exitstatus == 0
            if iface == "MSR":
                last_cos = Env().get('cat', 'l2', 'cos') - 1
            else:
                last_cos = Resctrl.get_ctrl_group_count() - 1

            assert re.search("Core 5, L2ID [0-9]+(, L3ID [0-9]+)? => COS%d" % last_cos, stdout) \
                    is not None
            assert re.search("Core 6, L2ID [0-9]+(, L3ID [0-9]+)? => COS%d" % last_cos, stdout) \
                    is not None
            assert "L2CA COS%d => MASK 0xf" % last_cos in stdout

            self.run("killall memtester")
            rdtset.communicate()
    def test_rdtset_l2cat_set_command_same_l3id_diff_l2id(self, iface):
        # Get cache topology
        stdout, _, exitstatus  = self.run_pqos(iface, '-s')
        assert exitstatus == 0
        regex = r"Core (\d+), L2ID (\d+), L3ID (\d+) => COS(\d+)(, RMID\d+)?"
        match_iter = re.finditer(regex, stdout)
        topology = defaultdict(lambda: {'l2ids': defaultdict(lambda: [])})

        for match in match_iter:
            core = int(match.group(1))
            l2id = int(match.group(2))
            l3id = int(match.group(3))

            topology[l3id]['l2ids'][l2id].append(core)

        if len(topology) < 2:
            pytest.skip('Test applies for machines with at least 2 sockets')

        # Get cores from the same socket, but different cluster
        # The same L3 ID (MBA ID or socket), different L2 ID (cluster)
        cores = []
        for _, l3id_info in topology.items():
            for l2id, l2id_cores in l3id_info['l2ids'].items():
                if len(cores) >= 2:
                    break

                core = l2id_cores[len(l2id_cores) // 3]
                self.log.debug('Found core %d, L2 ID %d', core, l2id)
                cores.append(core)

            if len(cores) >= 2:
                break

        assert len(cores) >= 2

        self.log.debug('Selected cores: %s', cores)

        param = f"-t l2=0xf;cpu={cores[0]},{cores[1]} -c {cores[0]},{cores[1]} memtester 10M"
        command = self.cmd_rdtset(iface, param)
        with subprocess.Popen(command.split(), stdin=subprocess.PIPE,
                              stdout=subprocess.PIPE) as rdtset:

            self.stdout_wait(rdtset, b"memtester version")

            (stdout, _, exitstatus) = self.run_pqos(iface, "-s")
            assert exitstatus == 0
            if iface == "MSR":
                last_cos = Env().get('cat', 'l2', 'cos') - 1
            else:
                last_cos = Resctrl.get_ctrl_group_count() - 1

            assert last_cos > 0

            # Assigned two different COS
            regex_tpl = "Core %d, L2ID [0-9]+(, L3ID [0-9]+)? => COS(%d|%d)"
            regex1 = regex_tpl % (cores[0], last_cos, last_cos - 1)
            regex2 = regex_tpl % (cores[1], last_cos, last_cos - 1)
            assert re.search(regex1, stdout) is not None
            assert re.search(regex2, stdout) is not None
            assert "L2CA COS%d => MASK 0xf" % (last_cos - 1) in stdout
            assert "L2CA COS%d => MASK 0xf" % last_cos in stdout

            self.run("killall memtester")
            rdtset.communicate()