vmx: write cpuid.coresPerSocket back from CPU topology

When writing the VMX file from the domain XML, write
cpuid.coresPerSocket if there is a specified CPU topology in the guest.

Use the domain XML of esx-in-the-wild-9 in vmx2xml as testcase for
xml2vmxtest.

Signed-off-by: Pino Toscano <ptoscano@redhat.com>
Acked-by: Richard W.M. Jones <rjones@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
Signed-off-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Pino Toscano 2018-04-19 15:03:38 +02:00 committed by Ján Tomko
parent 5cceadcbac
commit f10a1a95a2
4 changed files with 106 additions and 0 deletions

View File

@ -3246,6 +3246,35 @@ virVMXFormatConfig(virVMXContext *ctx, virDomainXMLOptionPtr xmlopt, virDomainDe
virBufferAsprintf(&buffer, "numvcpus = \"%d\"\n", maxvcpus);
if (def->cpu) {
unsigned int calculated_vcpus;
if (def->cpu->mode != VIR_CPU_MODE_CUSTOM) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("Expecting domain XML CPU mode 'custom' but "
"found '%s'"),
virCPUModeTypeToString(def->cpu->mode));
goto cleanup;
}
if (def->cpu->threads != 1) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("Only 1 thread per core is supported"));
goto cleanup;
}
calculated_vcpus = def->cpu->sockets * def->cpu->cores;
if (calculated_vcpus != maxvcpus) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("Expecting domain XML CPU sockets per core as %d "
"but found %d"),
maxvcpus, calculated_vcpus);
goto cleanup;
}
virBufferAsprintf(&buffer, "cpuid.coresPerSocket = \"%d\"\n", def->cpu->cores);
}
/* def:cpumask -> vmx:sched.cpu.affinity */
if (def->cpumask && virBitmapSize(def->cpumask) > 0) {
int bit;

View File

@ -0,0 +1,39 @@
.encoding = "UTF-8"
config.version = "8"
virtualHW.version = "10"
guestOS = "other-64"
uuid.bios = "42 00 93 72 17 da be 73-77 9d 00 7c cf 1b d2 28"
displayName = "v2v-windows-kkulkarn"
annotation = "MIQ GUID=b55c806d-99b9-4fa5-bbcc-a4de04f822e5"
memsize = "16384"
numvcpus = "16"
cpuid.coresPerSocket = "4"
sched.cpu.shares = "normal"
scsi0.present = "true"
scsi0.virtualDev = "lsisas1068"
scsi0:0.present = "true"
scsi0:0.deviceType = "scsi-hardDisk"
scsi0:0.fileName = "/vmfs/volumes/datastore/directory/v2v-windows-kkulkarn.vmdk"
floppy0.present = "false"
floppy1.present = "false"
ethernet0.present = "true"
ethernet0.virtualDev = "vmxnet3"
ethernet0.networkName = "VM Network"
ethernet0.connectionType = "bridged"
ethernet0.addressType = "vpx"
ethernet0.generatedAddress = "00:50:56:80:b3:81"
svga.vramSize = "8388608"
pciBridge0.present = "true"
pciBridge4.present = "true"
pciBridge4.virtualDev = "pcieRootPort"
pciBridge4.functions = "8"
pciBridge5.present = "true"
pciBridge5.virtualDev = "pcieRootPort"
pciBridge5.functions = "8"
pciBridge6.present = "true"
pciBridge6.virtualDev = "pcieRootPort"
pciBridge6.functions = "8"
pciBridge7.present = "true"
pciBridge7.virtualDev = "pcieRootPort"
pciBridge7.functions = "8"
vmci0.present = "true"

View File

@ -0,0 +1,37 @@
<domain type='vmware'>
<name>v2v-windows-kkulkarn</name>
<uuid>42009372-17da-be73-779d-007ccf1bd228</uuid>
<description>MIQ GUID=b55c806d-99b9-4fa5-bbcc-a4de04f822e5</description>
<memory unit='KiB'>16777216</memory>
<currentMemory unit='KiB'>16777216</currentMemory>
<vcpu placement='static'>16</vcpu>
<cputune>
<shares>16000</shares>
</cputune>
<os>
<type arch='x86_64'>hvm</type>
</os>
<cpu>
<topology sockets='4' cores='4' threads='1'/>
</cpu>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<devices>
<disk type='file' device='disk'>
<source file='[datastore] directory/v2v-windows-kkulkarn.vmdk'/>
<target dev='sda' bus='scsi'/>
<address type='drive' controller='0' bus='0' target='0' unit='0'/>
</disk>
<controller type='scsi' index='0' model='lsisas1068'/>
<interface type='bridge'>
<mac address='00:50:56:80:b3:81'/>
<source bridge='VM Network'/>
<model type='vmxnet3'/>
</interface>
<video>
<model type='vmvga' vram='8192' primary='yes'/>
</video>
</devices>
</domain>

View File

@ -279,6 +279,7 @@ mymain(void)
DO_TEST("esx-in-the-wild-5", "esx-in-the-wild-5", 4);
DO_TEST("esx-in-the-wild-6", "esx-in-the-wild-6", 4);
DO_TEST("esx-in-the-wild-7", "esx-in-the-wild-7", 4);
DO_TEST("esx-in-the-wild-9", "esx-in-the-wild-9", 10);
DO_TEST("gsx-in-the-wild-1", "gsx-in-the-wild-1", 4);
DO_TEST("gsx-in-the-wild-2", "gsx-in-the-wild-2", 4);