Unfortunately some of my CPUs (ES) do not share a common standard feature set that fall under one of the EVC definitions like "Merom", "Sandy Bridge", etc. Even after loading all hosts into an EVC cluster and try to vMotion I'd get Ex: "XSAVES (save supervisor states) is unsupported."
Also with EVC it downgrades the CPU features on better hosts, so you lose the ability to make use of things like AVX2, on all VMs. This makes certain workloads very slow because you're not getting the full benefit of CPU-based features.
What I did was by trial & error figure out a method to do "per-VM EVC" by modifying the vmx files with CPU feature flags, to remove certain conflicting features, like this:
Start VM with this on lowest spec host and it can vmotion everywhere:
Code:
cpuid.80000001.ecx = "0000:0000:0000:0000:0000:0000:0000:0001"
cpuid.80000001.edx = "0010:1100:0001:0000:0000:1000:0000:0000"
cpuid.80000008.eax = "0000:0000:0000:0000:0011:0000:00--:----"
cpuid.80000008.ebx = "0000:0000:0000:0000:0000:0000:0000:0000"
cpuid.80000008.ecx = "0000:0000:0000:0000:0000:0000:0000:0000"
cpuid.7.ebx = "0000:0000:0000:0000:0000:0000:0000:0000"
cpuid.7.ecx = "0000:0000:0000:0000:0000:0000:0000:0000"
cpuid.7.edx = "0000:0000:0000:0000:0000:0000:0000:0000"
I attempted vMotion, copied out all the errors of missing features, then went on sites like this:
x86 instruction listings - Wikipedia to figure out which CPUID bitmasks to apply.
It works but only for one VM startup. vCenter sees the cpuid entries and removes them, so if you shut a VM down and need to vmotion it across incompatible feature sets again, you need to login to esx host directly, remove from inventory, modify vmx on disk, re-add it to inventory, then start it. Once it's started it stays "good" and you can vmotion it everywhere.