I currently have an IIS application pool running on a physical server with 2 x quad core processors that has an average of 50% utilization across all cores. I need to make this application highly available and after researching our options I settled on creating a Hyper V cluster with this application in a virtual machine.
What I am worried about is that the VM only has 4 vCPUs and based on the characteristics I have previously seen with another Hyper V server it seems like 1 vCPU can only max out one core of the physical CPU. Even if the vCPU is at 100% it will not be able to utilize the processing power of the other physical cores. If this observation is correct then I would already be utilizing 100% of 4 cores based on my current utilization of 50% across 8 cores (not accounting for the overhead inherent in virtualization itself).
In researching this I have watched Brian Ehlert youtube video on Hypervisor CPU utilization and read his Hyper-v Concepts vCPU Tecknet wiki entry. Based on my understanding of what Brian is saying, since the w3wp.exe process that runs the application pool is spinning up and tearing down worker threads to handle individual users connections to our website then these discrete connections should provide the break point where the vCPU can move from one physical processor to the next rapidly enough to allow me to utilize the performance of all 8 cores of a physical system when the VM only has 4 vCPUs.
This still doesn't add up to me and goes against what I have seen. Since a single vCPU must complete it's current processing before it can be switched to another physical CPU that would mean that there is no way for a single vCPU to achieve a higher net utilization of the physical CPUs than 100% of one core. If the apps threads do not have breakpoints then this will be 100% of one physical core, if it the apps threads do have breakpoints that would allow the hypervisor to move the vCPU on to the next physical core than the utilization might be something like 25% of each of the physical cores in a quad core system with the resulting total still being limited to 100% of a single core.
Based on this reasoning it would seem that 1 vCPU will never be able to utilize a greater total % of the all the physical cores than 100% of a single core when the vCPUs utilization of physical cores is summed up across all cores.
Ultimately this would mean that I cannot achieve the performance level of an 8 core system from inside a VM even if the VM had 4 vCPUs and was running on a system with 16, 32, or even 64 physical cores.
Is there a way to achieve the performance I am looking for in a single VM?