def test_support_requests_numa(self): cells = [ objects.NUMACell(id=0, cpuset=set(), memory=0), objects.NUMACell(id=1, cpuset=set(), memory=0) ] self.assertEqual(True, self.pci_stats.support_requests(pci_requests, cells))
def test_consume_requests_numa(self): cells = [ objects.NUMACell(id=0, cpuset=set(), memory=0), objects.NUMACell(id=1, cpuset=set(), memory=0) ] devs = self.pci_stats.consume_requests(pci_requests, cells) self.assertEqual(2, len(devs)) self.assertEqual(set(['v1', 'v2']), set([dev['vendor_id'] for dev in devs]))
def test_numa_cell_not_equivalent_missing_b(self): cell1 = objects.NUMACell(id=1, cpuset=set([1, 2]), memory=32, cpu_usage=10, pinned_cpus=set([3, 4]), siblings=[set([5, 6])]) cell2 = objects.NUMACell(id=2, cpuset=set([1, 2]), memory=32, pinned_cpus=set([3, 4]), siblings=[set([5, 6])]) self.assertNotEqual(cell1, cell2)
def test_obj_cell_relationships(self): obj = objects.NUMATopology(cells=[objects.NUMACell()]) rel = objects.NUMATopology.obj_relationships['cells'] for topo_ver, cell_ver in rel: prim = obj.obj_to_primitive(target_version=topo_ver) cell = objects.NUMATopology.obj_from_primitive(prim).cells[0] self.assertEqual(cell_ver, cell.VERSION)
def test_support_requests_no_numa_info(self): cells = [objects.NUMACell(id=0, cpuset=set(), memory=0)] pci_request = [ objects.InstancePCIRequest(count=1, spec=[{ 'vendor_id': 'v3' }]) ] self.assertEqual(True, self.pci_stats.support_requests(pci_request, cells))
def test_numa_cell_not_equivalent_different_pages(self): pt1 = objects.NUMAPagesTopology(size_kb=1024, total=32, used=0) pt2 = objects.NUMAPagesTopology(size_kb=1024, total=32, used=1) cell1 = objects.NUMACell(id=1, cpuset=set([1, 2]), memory=32, cpu_usage=10, pinned_cpus=set([3, 4]), siblings=[set([5, 6])], mempages=[pt1]) cell2 = objects.NUMACell(id=1, cpuset=set([1, 2]), memory=32, cpu_usage=10, pinned_cpus=set([3, 4]), siblings=[set([5, 6])], mempages=[pt2]) self.assertNotEqual(cell1, cell2)
def test_consume_requests_no_numa_info(self): cells = [objects.NUMACell(id=0, cpuset=set(), memory=0)] pci_request = [ objects.InstancePCIRequest(count=1, spec=[{ 'vendor_id': 'v3' }]) ] devs = self.pci_stats.consume_requests(pci_request, cells) self.assertEqual(1, len(devs)) self.assertEqual(set(['v3']), set([dev['vendor_id'] for dev in devs]))
def _fake_resources(self, values=None): resources = { 'memory_mb': 2048, 'memory_mb_used': 0, 'free_ram_mb': 2048, 'local_gb': 20, 'local_gb_used': 0, 'free_disk_gb': 20, 'vcpus': 2, 'vcpus_used': 0, 'numa_topology': objects.NUMATopology(cells=[ objects.NUMACell(id=1, cpuset=set([1, 2]), memory=512, memory_usage=0, cpu_usage=0, mempages=[], siblings=[], pinned_cpus=set([])), objects.NUMACell(id=2, cpuset=set([3, 4]), memory=512, memory_usage=0, cpu_usage=0, mempages=[], siblings=[], pinned_cpus=set([])) ])._to_json() } if values: resources.update(values) return resources
def test_free_cpus(self): obj = objects.NUMATopology(cells=[ objects.NUMACell(id=0, cpuset=set([1, 2]), memory=512, cpu_usage=2, memory_usage=256, pinned_cpus=set([1]), siblings=[], mempages=[]), objects.NUMACell(id=1, cpuset=set([3, 4]), memory=512, cpu_usage=1, memory_usage=128, pinned_cpus=set([]), siblings=[], mempages=[]) ]) self.assertEqual(set([2]), obj.cells[0].free_cpus) self.assertEqual(set([3, 4]), obj.cells[1].free_cpus)
def test_to_legacy_limits(self): limits = objects.NUMATopologyLimits(cpu_allocation_ratio=16, ram_allocation_ratio=2) host_topo = objects.NUMATopology( cells=[objects.NUMACell(id=0, cpuset=set([1, 2]), memory=1024)]) old_style = { 'cells': [{ 'mem': { 'total': 1024, 'limit': 2048.0 }, 'id': 0, 'cpus': '1,2', 'cpu_limit': 32.0 }] } self.assertEqual(old_style, limits.to_dict_legacy(host_topo))
def test_pinning_logic(self): numacell = objects.NUMACell(id=0, cpuset=set([1, 2, 3, 4]), memory=512, cpu_usage=2, memory_usage=256, pinned_cpus=set([1]), siblings=[], mempages=[]) numacell.pin_cpus(set([2, 3])) self.assertEqual(set([4]), numacell.free_cpus) self.assertRaises(exception.CPUPinningInvalid, numacell.pin_cpus, set([1, 4])) self.assertRaises(exception.CPUPinningInvalid, numacell.pin_cpus, set([1, 6])) self.assertRaises(exception.CPUPinningInvalid, numacell.unpin_cpus, set([1, 4])) numacell.unpin_cpus(set([1, 2, 3])) self.assertEqual(set([1, 2, 3, 4]), numacell.free_cpus)
def test_can_fit_hugepages(self): cell = objects.NUMACell(id=0, cpuset=set([1, 2]), memory=1024, siblings=[], pinned_cpus=set([]), mempages=[ objects.NUMAPagesTopology(size_kb=4, total=1548736, used=0), objects.NUMAPagesTopology(size_kb=2048, total=513, used=0) ]) # 1,002G pagesize = 2048 self.assertTrue(cell.can_fit_hugepages(pagesize, 2**20)) self.assertFalse(cell.can_fit_hugepages(pagesize, 2**21)) self.assertFalse(cell.can_fit_hugepages(pagesize, 2**19 + 1)) self.assertRaises(exception.MemoryPageSizeNotSupported, cell.can_fit_hugepages, 12345, 2**20)
# # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. """ Fakes For Scheduler tests. """ from patron import objects from patron.scheduler import host_manager NUMA_TOPOLOGY = objects.NUMATopology( cells=[objects.NUMACell( id=0, cpuset=set([1, 2]), memory=512, cpu_usage=0, memory_usage=0, mempages=[], siblings=[], pinned_cpus=set([])), objects.NUMACell( id=1, cpuset=set([3, 4]), memory=512, cpu_usage=0, memory_usage=0, mempages=[], siblings=[], pinned_cpus=set([]))]) COMPUTE_NODES = [ objects.ComputeNode( id=1, local_gb=1024, memory_mb=1024, vcpus=1, disk_available_least=None, free_ram_mb=512, vcpus_used=1, free_disk_gb=512, local_gb_used=0, updated_at=None, host='host1', hypervisor_hostname='node1', host_ip='127.0.0.1', hypervisor_version=0, numa_topology=None, hypervisor_type='foo', supported_hv_specs=[], pci_device_pools=None, cpu_info=None, stats=None, metrics=None),
def test_consume_requests_numa_failed(self): cells = [objects.NUMACell(id=0, cpuset=set(), memory=0)] self.assertRaises(exception.PciDeviceRequestFailed, self.pci_stats.consume_requests, pci_requests, cells)
def test_default_behavior(self): inst_cell = objects.NUMACell() self.assertEqual(0, len(inst_cell.obj_get_changes()))
# # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. from patron import exception from patron import objects from patron.tests.unit.objects import test_objects fake_obj_numa = objects.NUMATopology(cells=[ objects.NUMACell(id=0, cpuset=set([1, 2]), memory=512, cpu_usage=2, memory_usage=256, mempages=[], pinned_cpus=set([]), siblings=[]), objects.NUMACell(id=1, cpuset=set([3, 4]), memory=512, cpu_usage=1, memory_usage=128, mempages=[], pinned_cpus=set([]), siblings=[]) ]) class _TestNUMA(object):