Recently I became rather intrigued with Hyper-V's Limit Processor Functionality (LPF) function. One little checkbox became such an obsession that I start wasting hours of my time trying to find out exactly what it does. The dialogue says, "Limit processor functionality to run an older operating system such as Windows NT on this virtual machine".
That sounds pretty plausible because the newer multiple core processors with hardware accelerated virtualization were not around in the old days these operating systems were around.
Simple I thought. I'd find a selection of system information tools and run those with the check box flagged and without. I'd then compare the processor details and get the answer. So I chose three popular tools I thought would help me out. They were Everest, SiSoft Sandra and CPU-Z. They actually ended up adding to my confusion!
To understand the results, it is important to understand what platforms I was testing on.
In order to test a base OS without a hypervisor, I ran Vista 32-bit and tested the CPU results on that.
I then ran tests on the parent partition for Windows Server 2008 with the Hyper-V role enabled, and then two child partitions running Windows XP with the Limit Processor Functionality checkbox on and off. I used XP SP2 because it is not enlightened and is not aware of VMBus. I also tried Windows XP SP3 with the Integration components for Hyper-V, but that made no difference to the result sets, so the results I'm providing apply to any version of Windows XP. The child partitions were only provided with a single CPU, even though I have a Core 2 Duo processor because Hyper-V only provides multi processor support for Windows Server 2003 and 2008 child partitions. The tools gave the same results for the Windows Server 2008 parent partition and the Windows XP child partition without LPF set, so the former is not shown.
So here's the breakdown in tabular format for CPU-Z v1.44.3. I've only listed what was different, and not each item in the tool. That could take forever!
At face value, CPU-Z, showed differences, and these difference encouraged me. I did expect to see some differences in the Instructions line, which shows the processor instruction sets, but did not. They all listed: MMX, ,SSE, SSE2, SSE3, SSSE3, EM64T.
Thinking I was on to something I decided to look at other tools with a view to finding out a deeper level of information to truly explain what the LPF function does.
I tried the freeware version of SiSoft Sandra Lite XIIc v2008.1.12.34 next, and that where things started getting interesting! Instead of enlightening me, I just got more confused! The results it gave were as follows (again just those that differ are shown).
The results left me confused. SiSoft Sandra had picked up some results that conflicted with what I had seen in CPU-Z. I was expected the same results and more, but now what I had was two tools in conflict on thread capability, and also a Hyper-Threading result I really wasn't expecting.
I decided to look further and find a tool that would help me close the gap. Basically I thought if two tools were in agreement out of the three, then those results were possibly the correct results.
So I made use of an evaluation version Everest Ultimate Edition v4.20.1170. The results were starting to gain more clarity, and at the same time this tool starting helping me what understand exactly what was going on. Unfortunately it's results really only provided me with a starting point, but wow, what a starting point it was!
I was starting to see some consistency in the results, and had removed the different results for HyperThreading (HTT) that SiSoft Sandra Lite gave, and decided that HTT was not actually supported. I still didn't know why the anomaly presented itself, and it took a lot of research and puzzling through things to find out why!
As it turned out, the last two rows of the Everest results, plus some other registers I've not listed from its result set started to point me to the reasons why...
For now, I knew there are differences in the way an LPF virtual machine views a processor, versus one that does not have LPF enabled.
That's it for now
In Part 2, the final part, I'll take a deeper dive into CPUID and also help you determine whether an operating system is running on a hypervisor or not. Remember, that applies to the parent partition too, where the motherboard name is not actually presented as a virtual machine. It is possible to tell if you're running in a virtual machine pretty easily, but finding out if you're running in a hypervisor is actually even simpler if you know how...