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