Merge "libvirt: set guest cpu_shares value as a multiple of guest vCPUs"

This commit is contained in:
Jenkins
2015-01-16 04:40:28 +00:00
committed by Gerrit Code Review
2 changed files with 39 additions and 12 deletions
+23 -4
View File
@@ -1198,7 +1198,7 @@ class LibvirtConnTestCase(test.NoDBTestCase):
random, 'choice', side_effect=lambda cells: cells[0])):
cfg = conn._get_guest_config(instance_ref, [], {}, disk_info)
self.assertEqual(set([0, 1]), cfg.cpuset)
self.assertIsNone(cfg.cputune)
self.assertEqual(0, len(cfg.cputune.vcpupin))
self.assertIsNone(cfg.cpu.numa)
@mock.patch.object(objects.Flavor, 'get_by_id')
@@ -1230,7 +1230,7 @@ class LibvirtConnTestCase(test.NoDBTestCase):
cfg = conn._get_guest_config(instance_ref, [], {}, disk_info)
self.assertFalse(choice_mock.called)
self.assertEqual(set([3]), cfg.cpuset)
self.assertIsNone(cfg.cputune)
self.assertEqual(0, len(cfg.cputune.vcpupin))
self.assertIsNone(cfg.cpu.numa)
def _test_get_guest_memory_backing_config(
@@ -1304,7 +1304,7 @@ class LibvirtConnTestCase(test.NoDBTestCase):
# when choosing viable cells
choice_mock.assert_called_once_with([set([2, 3])])
self.assertEqual(set([2, 3]), cfg.cpuset)
self.assertIsNone(cfg.cputune)
self.assertEqual(0, len(cfg.cputune.vcpupin))
self.assertIsNone(cfg.cpu.numa)
@mock.patch.object(objects.Flavor, 'get_by_id')
@@ -1341,7 +1341,7 @@ class LibvirtConnTestCase(test.NoDBTestCase):
conn, "_get_host_capabilities", return_value=caps)):
cfg = conn._get_guest_config(instance_ref, [], {}, disk_info)
self.assertIsNone(cfg.cpuset)
self.assertIsNone(cfg.cputune)
self.assertEqual(0, len(cfg.cputune.vcpupin))
self.assertIsNone(cfg.numatune)
self.assertIsNotNone(cfg.cpu.numa)
for instance_cell, numa_cfg_cell in zip(
@@ -3198,6 +3198,25 @@ class LibvirtConnTestCase(test.NoDBTestCase):
[],
image_meta, disk_info)
@mock.patch.object(objects.Flavor, 'get_by_id')
def test_guest_cpu_shares_with_multi_vcpu(self, mock_flavor):
self.flags(virt_type='kvm', group='libvirt')
conn = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)
instance_ref = objects.Instance(**self.test_instance)
flavor = instance_ref.get_flavor()
flavor.extra_specs = {}
flavor.vcpus = 4
mock_flavor.return_value = flavor
disk_info = blockinfo.get_disk_info(CONF.libvirt.virt_type,
instance_ref)
cfg = conn._get_guest_config(instance_ref, [], {}, disk_info)
self.assertEqual(4096, cfg.cputune.shares)
@mock.patch.object(objects.Flavor, 'get_by_id')
def test_get_guest_config_with_cpu_quota(self, mock_flavor):
self.flags(virt_type='kvm', group='libvirt')
+16 -8
View File
@@ -3437,6 +3437,21 @@ class LibvirtDriver(driver.ComputeDriver):
id_maps.extend(gid_maps)
return id_maps
def _update_guest_cputune(self, guest, flavor, virt_type):
if virt_type in ('lxc', 'kvm', 'qemu'):
if guest.cputune is None:
guest.cputune = vconfig.LibvirtConfigGuestCPUTune()
# Setting the default cpu.shares value to be a value
# dependent on the number of vcpus
guest.cputune.shares = 1024 * guest.vcpus
cputuning = ['shares', 'period', 'quota']
for name in cputuning:
key = "quota:cpu_" + name
if key in flavor.extra_specs:
setattr(guest.cputune, name,
int(flavor.extra_specs[key]))
def _get_cpu_numa_config_from_instance(self, instance_numa_topology):
if instance_numa_topology:
guest_cpu_numa = vconfig.LibvirtConfigGuestCPUNUMA()
@@ -3871,14 +3886,7 @@ class LibvirtDriver(driver.ComputeDriver):
flavor))
guest.idmaps = self._get_guest_idmaps()
cputuning = ['shares', 'period', 'quota']
for name in cputuning:
key = "quota:cpu_" + name
if key in flavor.extra_specs:
if guest.cputune is None:
guest.cputune = vconfig.LibvirtConfigGuestCPUTune()
setattr(guest.cputune, name,
int(flavor.extra_specs[key]))
self._update_guest_cputune(guest, flavor, virt_type)
guest.cpu = self._get_guest_cpu_config(
flavor, image_meta, guest_numa_config.numaconfig)