Host CPID, Geast CPUID and UserCPUID / what are they

virtual-machinesvirtualizationvmware-esxi

i found out that there are some IDs associated to the CPUIDs in vmx file of each virtual machine, these IDs are;

hostCPUID.{Num}

hostCPUID.80000001

guestCPUID.{Num}

guestCPUID.80000001

userCPUID.{Num}

userCPUID.80000001

i had some examination and search and i found out that guestCPUID and userCPUID are the same but hostCPUID always is different, Also i realized that these IDs are 32 hexadecimal characters that contains EDX, EAX, ECX and EDX

i just want to know why hostCPUID is different from two other IDs??

and what is the different between these format of IDs and another format that explain in VMware documents ( cpuid.{Num}.edx or cpuid.{Num}.eax ) that written in binary codes not hexadecimal??

also i need to know why there are no CPUIDs in vmx file of some virtual appliance that often are available in OVF/OVA format and we can just deploy it??

Best Regards,

Best Answer

It looks like they aren't IDs at all but masks of what features are available:

I assume that the "host" in hostCPUID is the actual raw CPUID bits reported to ESXi by the host's cpu

GuestCPUID represents the feature bits exposed to the VM. In addition to your masking, there are masks applied based on the capabilities supported by the virtual hardware.

UserCPUID is what will be visible to the guest ring-3 code running natively when using binary translation.

Meaning of the hostCPUID, userCPUID and guestCPUID lines in the vmware.log file

ESXi doesn't expose all CPU features to the VM, at least not when making use of EVC. So it's obvious that the "virtual" CPU has a different mask than the actual raw CPU.

OVF/OVA don't have a real CPU underneath. And the CPU features presented to the VM are determined by the environment the virtual appliance is deployed to. So presumably they are simply missing because there's no meaningful value for them. (I'm just guessing here.)