I'm trying to figure out the best practice for enabling hyperthreading on a quad processor server while using Citrix vm's. Should HT be enabled or not?
If yes then when I set my single cpu vm for processor affinity how can I tell which VCPU are binded to the PCPU? I would like to avoid binding 2 vm's to VCPU that are actually the same PCPU.
As I recall the kernel avoids putting 2 threads on logical CPUs that are on the same socket. It will if it must, but it avoids it at all costs. As for how to tell, VCPU0 - 3 would be the logical CPUs on CPU0, assuming it is a dual core with hyperthreading enabled. Of that you would have VCPU0 & VCPU2 as the physical cores, VCPU1 & VPCU3 would be the hyperthreading. Then extrapolate from there
This may start a war or at least a small skirmish (ala amd-intel, mac-pc, etc, etc,) but we have disabled hyperthreading on ALL of our hosts that have the capability. These were single core servers at the time, mostly IBM 445's, but we also do this on our hp's.
One of the main reasons we did this was because of our Citrix servers and performance issues they had on hosts that had hyperthreading enabled.
Your mileage may vary. This is what we chose to do and this has resolved some of the citrix performance problems we had. Others may swear by HT and it probably works well for them.