Why doesn't Windows 8 Task Manager report the actual CPU frequency when Virtualisation is turned on?
In this question, I asked why the actual CPU frequency wasn't being reported in the performance tab of windows task manager. It turns out I had Virtualization turned on in the BIOS. When I disabled it in the bios, Task Manager shows the actual CPU frequency (I assume averaged over all cores).
So why can't or doesn't Task Manager report the CPU frequency when Virtualisation is turned on?
Solution 1:
Headline: It is showing the actual CPU frequency.
Installing (not just running) Hyper-V on Windows 8 causes the CPU to run at 100% all the time. I guess Microsoft was running into issues with virtual machines (VMs) when the speed would fluctuate. One way to fix that, is to not let it fluctuate.
I travel quite a bit and I have to install (turn on under Windows Features) and uninstall Hyper-V depending on my needs.
I noticed that with Hyper-V installed, but not running (my VM was Shutdown) my battery life was less than 2 hours. I would usually get 6+ hours before installing the Hyper-V.
It is ashamed that I have to make the tradeoff of VM (with short battery life) or Battery Life (with no VM)... What's worse is it isn't a matter of just turning off the Hyper-V, then turning it back on. You need to do some work to setup your VM again.
This information was based on Windows 8.0 Pro running on a Lenovo X1 Carbon and many hours of experimenting. I've not tried this again on Windows 8.1 Pro on my Microsoft Surface Pro 2.
UPDATE: I did try this again on Windows 8.1 Surface Pro 2. Same results. I've not tried it on my Surface Pro 3 yet.
Solution 2:
It's not true that installing Hyper-V causes power management to be disabled. Instead, when Hyper-V is installed, the OS on your physical computer, called "parent partition", is just another virtual machine. This is different from how the old Virtual PC/Virtual Server worked.
So Task Manager shows your virtual CPUs, not physical CPUs. And for virtual CPUs, it can only report what the hypervisor allows it to see. E.g. it will show very low CPU load even if you have virtual machines running with very high load. Another effect is that it cannot see the actual speed.
I have several servers running Hyper-V and I can confirm via CPU-Z that core speed goes down when there is less workload, and it goes up when there is a lot of load.
I have also enabled Hyper-V on my laptop running Win8.1, and even though Task Manager always shows 2.89 GHz for the i7-3520M CPU, I can use the machine for ~4-5 hours on battery, with normal load, just like without Hyper-V being enabled. And of course CPU-Z shows much lower core speed for most of the time (or even up to 3.5 GHz when pushed hard).
Maybe bad drivers might affect this negatively, however it worked on any machine I tested so far without messing with drivers or configuration (Lenovo Thinkpad laptops and Supermicro servers with Xeon E2xxx, E5-xxxx).
Solution 3:
This is normal. Some power management options are disabled when the Hyper-V role is enabled.
At least on my system, the CPU is in fact clocking up and down as appropriate for the current load level; a utility such as CPU-Z confirms this. While sleep and hibernate remain available (at least on Windows 8.1 Pro, but not Windows Server 2008), you cannot limit the processor's clock rate, which would be useful on battery. CPU time used by Hyper-V is not accounted for in Task Manager, and host processes always have priority over Hyper-V guests; in other words, any process, even a low-priority process, will starve Hyper-V guests of CPU time if the host process saturates the CPU.