Пример #1
0
 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))
Пример #2
0
 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]))
Пример #3
0
 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)
Пример #4
0
 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)
Пример #5
0
 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))
Пример #6
0
 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)
Пример #7
0
 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]))
Пример #8
0
 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
Пример #9
0
 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)
Пример #10
0
    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))
Пример #11
0
 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)
Пример #12
0
    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)
Пример #13
0
#
#    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),
Пример #14
0
 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)
Пример #15
0
 def test_default_behavior(self):
     inst_cell = objects.NUMACell()
     self.assertEqual(0, len(inst_cell.obj_get_changes()))
Пример #16
0
#
#    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):