Thanks for that John, I’ve figured it out, it only took minor changes to /usr/share/pyshared/nova/virt/libvirt/{driver,config}.py
I’ve got a patch pasted below: diff -uNr libvirt.old/config.py libvirt/config.py --- libvirt.old/config.py 2013-06-07 06:33:51.000000000 +1200 +++ libvirt/config.py 2013-09-30 16:26:12.000000000 +1300 @@ -335,6 +335,10 @@ self.mode = None self.match = "exact" + #EF: This sets the default topology + self.sockets = '1' + self.cores = '4' + self.threads = '1' def format_dom(self): cpu = super(LibvirtConfigGuestCPU, self).format_dom() @@ -342,7 +346,7 @@ if self.mode: cpu.set("mode", self.mode) cpu.set("match", self.match) - + return cpu diff -uNr libvirt.old/driver.py libvirt/driver.py --- libvirt.old/driver.py 2013-06-07 06:33:51.000000000 +1200 +++ libvirt/driver.py 2013-09-30 16:26:05.000000000 +1300 @@ -2005,7 +2005,6 @@ msg = _("Passthrough of the host CPU was requested but " "this libvirt version does not support this feature") raise exception.NovaException(msg) - return cpu def get_guest_disk_config(self, instance, name, disk_mapping, inst_type, @@ -2152,7 +2151,18 @@ setattr(guest, scope[1], value) guest.cpu = self.get_guest_cpu_config() - + #EF: Get number of VCPU's, divide that by 8 to get the number of sockets (we are using 8 core CPUs) + numSockets = int(guest.vcpus) / 8 + numCoresRemain = int(guest.vcpus) % 8 + if numCoresRemain > 0: + numSockets = numSockets + 1 + if numSockets > 0: + guest.cpu.sockets = str(numSockets) + guest.cpu.cores = '8' + else: + guest.cpu.sockets = '1' + guest.cpu.cores = '8' + if 'root' in disk_mapping and disk_mapping['root']['dev'] is not None: root_device_name = "/dev/" + disk_mapping['root']['dev'] else: @@ -2333,6 +2343,7 @@ locals()) conf = self.get_guest_config(instance, network_info, image_meta, disk_info, rescue, block_device_info) + xml = conf.to_xml() if write_to_disk: From: John Mark Walker [mailto:johnm...@johnmark.org] Sent: Thursday, 26 September 2013 8:43 a.m. To: openstack@lists.openstack.org Subject: [Openstack] Fwd: Defining VM's CPU Socket:Core Topology Did anyone else find this message in their spam filter? ---------- Forwarded message ---------- From: Evan Fraser <evan.fra...@trademe.co.nz> Date: Tue, Sep 24, 2013 at 7:49 PM Subject: [Openstack] Defining VM's CPU Socket:Core Topology To: "openstack@lists.openstack.org" <openstack@lists.openstack.org> Hello, I am trying to figure out how to define a VM’s CPU Socket:Core:Threads topology. For licensing reasons we can’t create VM’s that map each core as a separate socket. KVM and libvirt both support the ability to define the socket:core ratio/topology, but I can’t see how to get openstack to request those capabilities. I've tried the libvirt_cpu_mode and libvirt_cpu_model options, but they only seem to control the cpu's name, and what flags are passed through. It seems that if I could only get nova to create the xml file with a topology section eg: <toplogy sockets=’1’ cores=’4’ threads=’1’/> then it would work. This feature request seems related: https://bugs.launchpad.net/nova/+bug/1199019 But I’m not sure if it’s possible to define it within nova as yet anyway. Cheers, Evan. Evan Fraser Trade Me | Storage Engineer P +64 4 803 2756 M +64 22 087 4032 E evan.fra...@trademe.co.nz _______________________________________________ Mailing list: http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack Post to : openstack@lists.openstack.org Unsubscribe : http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack _______________________________________________ Mailing list: http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack Post to : openstack@lists.openstack.org Unsubscribe : http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack