When you try to install ESXi 7.0 or 8.0 on a system with a 12th Gen Intel CPU, the installation fails with a purple diagnostics screen:
HW feature incompatibility detected; cannot start
Fatal CPU mismatch on feature "Hyperthreads per core"
Fatal CPU mismatch on feature "Cores per package"
Fatal CPU mismatch on feature "Cores per die"
This problem is caused by the new architecture of Intel CPUs which are equipped with different types of cores - Performance-cores and Efficient-cores. With vSphere 7.0 Update 2, the kernel parameter cpuUniformityHardCheckPanic has been implemented to address the issue. This article explains the manual and automated methods to properly implement the kernel option.
This article is valid for:
- ESXi 8.0 and later
- ESXi 7.0 Update 2 and later
Manual Method
The parameter needs to be set prior to installation and the first boot of ESXi.
- When ESXi installation starts, press SHIFT+O to edit boot options.
- Append cpuUniformityHardCheckPanic=FALSE
- Press ENTER
- Install ESXi
- When the installation is finished, reboot the system and press SHIFT+O to edit the boot options again.
- Append cpuUniformityHardCheckPanic=FALSE and press ENTER
- To make the kernel option permanent, run the following command on your ESXi host:
# esxcli system settings kernel set -s cpuUniformityHardCheckPanic -v FALSE
This setting allows ESXi to work with different P-Cores and E-Cores, present in 12th Gen Intel CPUs.
Automated Kickstart Method
If you prefer an automated approach, you can also use a scripted kickstart installation to fix the issue for you. In this example, I'm installing ESXi 8.0 using a USB flash drive on an Intel 12th Gen Pro NUC.
- Create a bootable USB flash drive using the ESXi ISO (See this article for instructions).
- On the flash drive, open the /efi/boot/boot.cfg file with an editor and add the following options to the kernelopt= line: ks=usb:/KS.CFG cpuUniformityHardCheckPanic=FALSE
This will instruct the ESXi installer to perform a scripted installation from the /KS.CFG file. - As ESXi will not be able to boot without the kernel option and thus does not reach the %firstboot section, you have to manipulate the installed ESXi on the USB flash drive post-installation but before the first reboot. This happens in the %post section. Create the /KS.CFG file with the following content (fix parameters to match your environment):
vmaccepteula install --firstdisk=usb --overwritevmfs network --bootproto=static --ip=192.168.0.26 --netmask=255.255.255.0 --gateway=192.168.0.1 --hostname=esx12.virten.lab --nameserver=192.168.0.1 rootpw VMware1! %post --interpreter=busybox /bin/mcopy -o -i /dev/disks/mpx.vmhba32\:C0\:T0\:L0\:5 ::BOOT.CFG /tmp/BOOT.cfg /bin/sed -i '/kernelopt/s/$/ cpuUniformityHardCheckPanic=FALSE/' /tmp/BOOT.cfg /bin/mcopy -o -i /dev/disks/mpx.vmhba32\:C0\:T0\:L0\:5 /tmp/BOOT.cfg ::BOOT.CFG /bin/reboot %firstboot --interpreter=busybox # Enable SSH vim-cmd hostsvc/enable_ssh vim-cmd hostsvc/start_ssh # Enable ESXi Shell vim-cmd hostsvc/enable_esx_shell vim-cmd hostsvc/start_esx_shell # Suppress Shell warning esxcli system settings advanced set -o /UserVars/SuppressShellWarning -i 1 # Disable CPU Uniformity Check localcli system settings kernel set -s cpuUniformityHardCheckPanic -v FALSE # SSH Key cat > /etc/ssh/keys-root/authorized_keys <<EOF ssh-rsa AAAAB3N[...] yourname EOF # NTP esxcli system ntp set -s pool.ntp.org esxcli system ntp set -e 1
- Insert the flash drive into your System and power it on. The installation should start automatically and after a couple of minutes, you should be able to access the system with SSH or UI.
- Please note that the %firstboot section is not applied when Secure Boot is enabled, which is the default for most systems. Consider disabling Secure Boot for the full kickstart pleasure, or run these commands manually. Secure Boot does not affect the %post section, so the mcopy and sed magic will work.
Good post, can also disable E-cores at first install.
It seems like this is a better option rather than disabling the E-cores, because on that 1240p you get 12 total cpus to work with. However, it seems like it disables hyperthreading.
You also can install esxi normally in a hard drive, use manual method for the 1st boot and after server boots up, from cli, run the command: esxcli system settings kernel set -s cpuUniformityHardCheckPanic -v FALSE to set the option to the system.
run esxcli system settings kernel list -d to check if the option was set correctly, then reboot to test it.
Hi, I don't know what happened but I can't install ESXi. I can do the first part but at the restart it asks me to install again and it hangs. Can you detail the steps? Thank you.