Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

With the new Xeon CPUs supporting Hyper-threading, what is the current wisdom with regard to using it (or not) on a Hyper-V host machine?

I was originally under the impression that turning it on in a virtual host environment could be detrimental as the 'extra' CPUs were not true cores. However I've also read (unconfirmed) comments along the lines of MS doing some hard work to get Hyper-V running well in a Hyper-threading environment.

Does anyone have any solid information or experience in this regard? Cheers!

share|improve this question
add comment

4 Answers

up vote 4 down vote accepted

The old problem with Hyper Threading in Virtual Server 2005, without getting overly technical, is the CPU cache was being poisioned, i.e. it was caching almost nothing because the context of what was happening on each thread was unrelated - causing them to compete for the on chip cache.

Newer chips have larger and smarter caches so this is less problem.

Is it ideal to have on or off? That really depends on workload, if both threads happen to be running the same VM and the same task then it would almost certinaly be a BIG advantage to have on. If they were doing unrelated things with a lot of random RAM I/O (several different VMs for example) it would cause only half the chip's cache to be available to each which in theory could be slower - In reality it rarely is anymore.

If you have older generation chips though you may want to check the chip cache sizes - In virtualization the largest cache you can get the better - Ram truly is MUCH slower than CPUs - just not NEAR as bad as disk drives.

NOTE: What you are reading that says turn off was found regarding the chips that were single core with Hyper-Threading - For example this was official answer back in the day (2005/2006?) - http://www.VirtualServerFAQ.com/tiki-index.php?page=VirtualServerHostDualCore

Steve Radich http://www.VirtualServerFAQ.com

share|improve this answer
add comment

According to Windows IT Pro, you want to leave it on: http://windowsitpro.com/article/articleid/101631/q-does-hyper-threading-affect-hyper-v.html

The new four-core Intel Core i7 processor enables hyper-threading, which splits each processor core into two virtual cores to (potentially) improve performance.

The concern with Hyper-V and hyper-threading is that you assign a number of processor cores to each virtual machine (VM). Imagine that you assign one processor each to two guest VMs from the Hyper-V management console, thinking that each is going to use a separate core. What if the hypervisor assigns each of the VMs to the same physical core, with each getting a virtual core? You'd potentially get lousy performance and three physical cores not doing much, where you'd have liked each VM to get its own physical core.

Fortunately, this isn't the case. Microsoft has done a lot of work around Hyper-Threading and Hyper-V. Essentially, while Hyper-Threading will aid performance sometimes, it will never hurt performance, so Hyper-Threading should be enabled.

share|improve this answer
    
Hmm thanks for the answer. This may be what I read originally. They do say to leave it on, but it seems pretty empty; I'm not particularly convinced. Maybe it's just me. –  CapBBeard Jul 29 '09 at 20:45
add comment

Programs that are aware of hyperthreading are able to distinguish between a physical core and a logical (virtual) core, and allocate resources accordingly.

Hyperthreading decreases the cost of context-switching by allowing the states of two processes to be stored at any given time, instead of just one state at a time. Context-switching is typically considered to be very expensive, because you have to load the entire state of a process into the CPU. This means that if you have a CPU-intensive process running, the hyperthreaded CPU can frequently switch between that process and others without incurring much of a performance hit.

The advantage of running virtual servers is that you can create a large pool of resources which can be allocated to different servers on the fly, as needed. This includes reallocating CPU cores and balancing the load across all the available cores. If the hypervisor doesn't know the difference between a physical core and a logical core, then you're right--some physical cores may sit idle while others are pegged at 100% CPU utilization while both of their logical cores are competing for CPU time. However, if the hypervisor is able to tell the difference between physical and logical cores, it will try to balance the CPU load across the physical CPUs before allocating multiple processes to two logical cores that belong to the same physical core.

share|improve this answer
add comment

I haven't studied the issue in detail, but Microsoft does not recommend using hyperthreading with Exchange 2010 due to "capacity planning and monitoring" issues. You might want to test your own workloads before choosing one configuration or the other.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.