Chris Hall bio photo

Chris Hall

Making technology fit my requirements...

Windows, Linux, Virtualisation, Unified Computing & Cloud Offerings Design Engineer.

PolarCloudsUK Chris LinkedIn Github

vSphere Logo Last time we looked at a workaround to install ESXi 7.0 into a VMware virtual machine hosted on physical hardware that contains an unsupported CPU. If you’ve not seen that post, catch up now. It’s a great read.

As mentioned, this post is part 2 of a multipart series. Find the other parts here:

To recap, the ESXi installer uses the CPUID instruction to identify the CPU(s) installed in the system. From the value obtained the user is told that their processor is either:

  • Unsupported. At which point the installer quits. No ESXi 7.0 for you!
  • Will be unsupported in a later ESXi version. The installer will allow install continuation.
  • Nothing. The installer accepts that a valid CPU is present and silently continues the installation.

Overview

CPUID and the EAX Value

The CPUID instruction returns processor identification and feature information held in the EAX registers of the CPU in the system.

You can read more about the construction of the EAX value at x86 Instruction Set Reference - CPUID and CPUID — CPU Identification.

Determining a CPUID

As luck would have it, Intel publish CPUID’s of their processors (or Processor Signatures as some of their literature calls it) in Intel Architecture and Processor Identification With CPUID Model and Family Numbers and Intel Xeon Processor Scalable Family Update March 2020.

Let’s put that aside for the moment and single step through determining the CPUID of processor.

1. Find the Processor Model Number

Simple. Check in Configure - Hardware - System of the host system that is to run the ESXi 7.0 VM. For example:

Processor Model Number

In my case, my ESXi 6.7 host is running E5640 CPUs.

2. Use CPU-World

Next, use the search function of CPU-World to obtain further information on the processor model found in step 1. For example:

CPU_World CPUID

Looks like the E5640 CPUs have a CPUID of 206C2h (h = hex notation), so 206C2.

3. Cross Check

Lets check the Intel Architecture and Processor Identification With CPUID Model and Family Numbers, paper from above and sure enough, we can see that Gulftown and Westermere-EP CPU’s have and CPUID of 0x206Cx (the “0x” prefix = hex notation, “x” suffix = variable):

Westmere-EP CPUID

So yes, 206C2 is a valid CPUID.

4. The Quick Way

Connect via SSH to your ESXi host and issue the command esxcli hardware cpu cpuid raw list -c 0

CPUID via SSH

A confirmed CPUID of 206C2 padded with three zeros! Nice :smile:

Converting a CPUID to an EAX Value

As we saw in Workaround ESXi CPU Unsupported Error - Part 1, an EAX number must be entered into the vSphere CPU Identification Mask setting in binary:

CPU Advanced Settings

Conversion is easy. Use an online hexadecimal to binary converter.

Again, using the three zero padded 000206C2 example from above:

binary from hex

The binary EAX value we need to enter to pass through to the VM a CPUID of a Westermere-EP CPU is 0000:0000:0000:0010:0000:0110:1100:0010 when using colons instead of spaces, as vSphere expects it.

Pulling It All Together

So I present to you a list of processors, their CPUIDs, their binary EAX numbers and the result of installing ESXi 7.0 into a VM configured with the corresponding EAX number.:

Intel CPUIDs and Binary EAX Values

Processor Generation CPUID Binary EAX Value ESXi 7.0 Installer
Action
Westmere-EP 206C2 0000:0000:0000:0010:0000:0110:1100:0010 Fail
SandyBridge 206A2 0000:0000:0000:0010:0000:0110:1010:0010 Warning
IvyBridge 306A2 0000:0000:0000:0011:0000:0110:1010:0010 Warning
Haswell 306C3 0000:0000:0000:0011:0000:0110:1100:0011 PASS
Broadwell 406F1 0000:0000:0000:0100:0000:0110:1111:0001 PASS
Skylake 50654 0000:0000:0000:0101:0000:0110:0101:0100 PASS
Kabby Lake 806E9 0000:0000:0000:1000:0000:0110:1110:1001 PASS


Eagle eyed readers will recognise that in Part 1, we used the Haswell processor EAX value to enable ESXi 7.0 installation. :stuck_out_tongue_winking_eye:

AMD CPUIDs and Binary EAX Values

Processor Generation CPUID Binary EAX Value ESXi 7.0 Installer
Action
Opteron 6124HE 100F91 0000:0000:0001:0000:0000:1111:1001:0001 Untested*
Opteron 6212 600F12 0000:0000:0110:0000:0000:1111:0001:0010 Untested*
Opteron 6320 600F20 0000:0000:0110:0000:0000:1111:0010:0000 Untested*
Epyc 7251 800F12 0000:0000:1000:0000:0000:1111:0001:0010 Untested*
Epyc 7371 800F12 0000:0000:1000:0000:0000:1111:0001:0010 Untested*


*As server used for testing is Intel CPU based, I’m unable to test EAX values for AMD CPUs.

The environment used for the above testing:

  • Server: Dell R710, fitted with two Xeon Westmere-EP CPUs
  • Host ESXi: ESXi 6.7 build 15160138 installed
  • Managed by: vCenter 6.7 build 15129973
  • Test VM compatibility: ESXi 6.7 Update 2 and later (VM version 15)
  • Test VM guest OS: VMware ESXi 6.5 or later
  • ESXi 7.0 installer: VMware-VMvisor-Installer-7.0.0-15843807.x86_64.iso

Conclusion and Wrap Up

In this post we looked at CPUIDs, how to obtain them from online sources and how to find them by querying physical hardware. From there we looked at how to convert a CPUID into a binary EAX value.

Finally, we applied the generated EAX values to a VM and ran the ESXi 7.0 installer, with results as detailed above.

Next time, in part 3, we’ll look at using what we’ve learnt in parts 1 and 2 in the physical world. Stay tuned..! :smiley: :computer:

-Chris