The Sara Chana Chronicles

This blogs represents my thoughts and opinions, and are not necessarily the views of my employer.

The Mystery of Hyper-V's Limit Processor Functionality? (Part 1)

The Mystery of Hyper-V's Limit Processor Functionality? (Part 1)

  • Comments 2
  • Likes

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!

  Windows Vista SP1 Windows XP Child - Default settings Windows XP Child - LPF Enabled
Processor Name Intel Mobile Core 2 Duo 7100 Intel Core 2 Duo Intel Core 2
Code Name Merom Conroe <blank>
  Socket P478 Socket 775 LGA Socket 775 LGA
Cores 2 1 1
Threads 2 1 1

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).

  Windows Vista SP1 Windows XP Child - Default settings Windows XP Child - LPF Enabled
SiSoft Sandra Lite XIIc      
Type Mobile, Dual-Core Dual-Core <blank>
Cores per processor 2 2 1
Threads per core 1 1 2
Package FC µPGA (Socket P) FC LGA775 FC LGA775
Maximum Physical / Virtual Addressing 36-bit / 48-bit 40-bit / 48-bit 36-bit / 32-bit
HTT - Hyper-Threading Technology No No Yes
VMX - Virtual Machine extension Yes No No

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!

  Windows Vista SP1 Windows XP Child - Default settings Windows XP Child - LPF Enabled
Everest Ultimate Edition      
CPU Type Mobile DualCore Intel Core 2 Duo T7100, 1782 MHz (9 x 198) Mobile DualCore Intel Core 2 Duo, 1800 MHz Mobile Intel Core 2 Duo, 1800 MHz
Motherboard Name Dell Latitude D630 Microsoft Virtual Machine Microsoft Virtual Machine
CPU Type Mobile DualCore Intel Core 2 Duo T7100 Mobile DualCore Intel Core 2 Duo Mobile Intel Core 2 Duo
Motherboard Chipset Intel Crestline-GM GM965 Intel 82440BX/ZX Intel 82440BX/ZX
HTT / CMP Units 0 / 2 0 / 0 0 / 0
MONITOR / MWAIT Instruction Supported Not Supported Not Supported
SYSCALL / SYSRET Instruction Not Supported Supported Supported
Virtual Machine Extensions (Vanderpool) Supported Not Supported Not Supported
Hyper-Threading Technology (HTT)  Not Supported Not Supported Not Supported
CPUID (0) 0000000A-756E6547-6C65746E-49656E69 00000006-756E6547-6C65746E-49656E69  00000002-756E6547-6C65746E-49656E69 
CPUID (80000000) 80000004-00000000-00000000-00000000 80000008-00000000-00000000-00000000 80000008-00000000-00000000-00000000

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...

This post is governed under the site terms of use and by the Creative Commons Attribution-NonCommercial-NoDerivs license. Original work of Natasha Anne Mocke.You may republish this work as long as explicit credit is given to the author.

  • Good job and very useful information

  • If you're using Hyper-V, and you've gone into the settings for a Virtual Machine, under the CPU section,

Your comment has been posted.   Close
Thank you, your comment requires moderation so it may take a while to appear.   Close
Leave a Comment