diff --git a/intel_nfv_ci_tests/tests/scenario/test_numa_topology.py b/intel_nfv_ci_tests/tests/scenario/test_numa_topology.py index 92aeefd..5c815d8 100644 --- a/intel_nfv_ci_tests/tests/scenario/test_numa_topology.py +++ b/intel_nfv_ci_tests/tests/scenario/test_numa_topology.py @@ -26,6 +26,34 @@ CONF = config.CONF LOG = logging.getLogger(__name__) +def get_host_numa_placement(instance, vcpus): + """Get placement of instance CPUs on host. + + :param instance: Instance to get placement for. + :param vcpus: Number of vCPUs on instance. + """ + out, _ = processutils.execute('ps -eo pid,cmd,args | awk \'/%s/ && ' + '!/grep/ {print $1}\'' % + instance['id'], shell=True) + if not out: + return + + cgroup, _ = processutils.execute('grep cpuset /proc/%s/cgroup' + % out.strip(), shell=True) + cgroup = cgroup.split(":")[-1].strip() + if cgroup.index('emulator'): + cgroup = cgroup + '/..' + + placement = [] + for i in range(vcpus): + cpus, _ = processutils.execute('cgget -n -v -r cpuset.cpus %s' + % (cgroup.replace('\\', '\\\\') + + '/vcpu' + str(i)), shell=True) + placement.append(cpus.strip()) + + return placement + + class TestServerNumaBase(manager.NetworkScenarioTest): credentials = ['admin'] @@ -107,28 +135,6 @@ class TestServerNumaBase(manager.NetworkScenarioTest): username='cirros', private_key=self.keypair['private_key']) - def get_placement(self, vcpu): - - out, _ = processutils.execute('ps -eo pid,cmd,args | awk \'/%s/ && ' - '!/grep/ {print $1}\'' % - self.instance['id'], shell=True) - - if not out: - return - cgroup, _ = processutils.execute('grep cpuset /proc/%s/cgroup' - % out.strip(), shell=True) - cgroup = cgroup.split(":")[-1].strip() - if cgroup.index('emulator'): - cgroup = cgroup + '/..' - placement = [] - - for i in range(vcpu): - cpus, _ = processutils.execute('cgget -n -v -r cpuset.cpus %s' - % (cgroup.replace('\\', '\\\\') + - '/vcpu' + str(i)), shell=True) - placement.append(cpus.strip()) - return placement - class TestServerNumaTopo(TestServerNumaBase): """ @@ -166,7 +172,7 @@ class TestServerNumaTopo(TestServerNumaBase): topo = self.get_numa_topology(rmt_client) self.assertEqual(2, len(topo['nodes'])) self.assertNotEqual(None, rmt_client) - placement = self.get_placement(4) + placement = get_host_numa_placement(self.instance, 4) self.assertEqual(placement[0], placement[1]) self.assertNotEqual(placement[1], placement[2]) self.assertEqual(placement[2], placement[3])