Twitter poll: how many vCPUs do you think a physical CPU Core can handle with vSphere 5

 

I was reading a document the other day where it was mentioned that you could potentially run up to 25 VMs per Physical CPU core with vSphere. Now first off, this wasn’t worded very well, it should have perhaps read “vCPUs” instead of “VMs”. The assumption of course was that each VM would be a single vCPU machine.

 

Nevertheless this is still a bit of a precarious thing to say though if you do not mention what kind of Physical CPU we are talking about, and what kind of load these vCPUs are going to be bearing. I think the assumption was that the VMs would be running extremely light loads and almost potentially be sitting idle most of the time to achieve that kind of density per Physical CPU core.

 

So with that thinking I decided to ask the question on Twitter. I only had 12 responses to the poll, but nevertheless, here are the results in Pie Chart format. The most sensible answer I got was under the “other” category, which was answered as “until %RDY >=10“, referring to the ESXTOP performance counter for CPU Ready time called %RDY. So this answer was saying keep adding vCPUs per core until you start seeing CPU %RDY (remember to look at this figure for individual vCPUs, not aggregated vCPUs) figures of greater than, or equal to 10%. This is the general figure to watch for, as anything over and above this would usually indicate CPU contention issues. I thought that this was a clever answer, but the other figures are also interesting to look at. The general assumption was that we were talking about low activity VMs with 1 vCPU, and the host system was running on a modern Intel Nehalem / 32nm Xeon processor.

 

Assuming, low activity single vCPU VMs on modern Xeon 32nm physical CPU

 

Not too many results to work off, considering I only got 12 responses, but the general consensus seems to be that 5-10 single vCPU VMs to 1 physical CPU core. Of course this isn’t a recommendation at all, its all down to opinion from an online poll, and the poll doesn’t take into account any types of workloads or specific processor specifications. The key thing to look out for here when considering consolidation ratios like this would be what kind of workload these vCPUs would be running. You would also always want to watch your performance stats (peaks and averages), making sure that you don’t get any high %RDY times, scaling up accordingly.

 

I have opened up another voting results collector to get a new set of results from the above results. Do you have an opinion? Please add your view on this poll, it’s only one question and will literally take a couple of seconds to enter!

Click here to take survey

 

VMware, Coreinfo and mapping logical CPU cores to physical processors.

Sometimes you may have a requirement due to licensing to ensure a Virtual Machine’s CPU configuration is perfectly set out in terms of “physical sockets”. Or perhaps you want to run an operating system such as Windows Server 2003 SE on your Virtual Machine. By default this VM would be limited to only use 4 cores because of the way VMware tells the operating system that each CPU has only 1 core per socket. (Giving it 4 x vCPUs would be the same as giving a physical Windows Server 2003 SE machine 4 x physical CPUs – the actual CPU limit). Either way, it can be quite useful to verify you have the correct CPU configuration.

Enter Coreinfo. This is a handy command line utility by Mark Russinovich which allows you to dump the information about your current CPU and cache configuration for Windows. Download the utility and execute the following command to gather information about the logical CPU core mapping to physical processor.

coreinfo.exe -c -s

In the case of a single socket, six core CPU (such as the one I have running here) this is the output you will see:

 

The Logical to Physical Processor Map information in the first section marks each CPU core with an asterisk (*). The next section, lists the Logical Processor to Socket mappings, indicating how many “processor sockets” your machine has and at which location each Processor Core is at (again marked with an asterisk).

 

If you had provisioned a VM with 4 x vCPUs by default, this would show up with 4 x Sockets and 4 x Physical Processors like so:


Besides being a limiting factor for Windows Server 2003 SE VMs when trying to use 8 x vCPUs (you can’t have more than 4 x “physical” CPUs), this may also be a potential issue with a socket licensed edition of SQL server for example, as you would now have 4 x sockets to worry about with your licensing.

 

So here is where VMware’s useful extra configuration parameters come in handy. These are basically bits of extra configuration you can add to your VMs, and are stored in your VM’s .vmx configuration file. By simply editing your VM, you can add a configuration option which specifies how many Cores per Socket there are. To do this using vSphere, power off your VM, then edit it’s settings. Go to the Options tab, then General, then Configuration Paramaters.

 

 

In this case I have a VM with 4 x vCPUs, which shows up by default with 4 x processor sockets. I want this to be 4 x cores with 1 x socket. So now I would click “Add Row” and in the first empty column, enter: cpuid.coresPerSocket and use 4 as the value in the second column. See this screenshot for specifics (and adjust the value used depending on your desired configuration):

 

 

Power up your VM, and run coreinfo again, using

coreinfo.exe -c -s

 

You should now see that VMware is assigning 4 CPU cores per “Physical CPU socket”. In other words, your VM now has 1 x “physical” processor socket, and 4 x cores. Meaning your single processor application socket is now valid on this VM. Here is the result of assigning my VM a value of 4 for “cpuid.coresPerSocket” when it uses 4 x vCPUs in vSphere:

 

 

As you can now see, it has changed from the original configuration where it had 4 x Sockets listed under “Logical Processor to Socket Map” with a “Physical Processor” for each “Socket”, to showing the 4 x “Physical Processors” all on “Socket 0”.

 

If you are using VMware Workstation, this configuration is easy to do – just edit your VM settings, and look for the dropdown menu under the CPU configuration – change this to how many Processors you want and how many Cores per Processor you will use. (See the screenshot below for an example of 2 x Sockets with 2 x cores per socket):

 

 

Well, that is a brief overview of how to look at your Processor configuration (whether you are using a physical machine or a Virtual Machine), and how to change your CPU socket / core configurations using VMware vSphere or Workstation. The two uses I can think of as stated above are for licensing issues, or issues where you are being limited by what your guest OS can handle in terms of physical CPUs. Feel free to chime in, in the comments below if you can think of any other uses this may have, or if spot a mistake anywhere!