One of the questions that comes up over and over again in the forums is related to sizing ESX servers. These questions are usually in the form of "How many VMs can I run on this server?" or "How many ESX hosts do I need to virtualize 10 physical servers running Windows?" and are usually supported with statements like "none of the servers are really doing much work" or "these are really busy servers that get hit hard by lots of users". The biggest problem with these posts is that the data presented is subjective at best and completely invalid at worst. In other words, one person's "busy" or "large" is another person's "idle" or "small", and none of these descriptors provide any real value for the task at hand.
For proper sizing, it really comes down to knowing what your servers and/or workloads are actually doing. Anything else is guesswork, and will likely result in you (or your customers) not realizing the full potential that virtualization offers. The instructions below will detail how to create a very generic baseline for a Windows server, using nothing but the native perfmon application that comes included with Windows.
To create a generic baseline, we will use the following three Windows perfmon counters:
Memory: Available MBytes
PhysicalDisk: Disk Transfers/sec
Processor: % Processor Time
Step 1 - Implement the baseline:
01. Log on to the server that you wish to baseline
02. Start - Run -> perfmon
03. Expand Performance Logs and Alerts and then choose Counter Logs
04. Right-click in the right pane under System Overview and then choose "New Log Settings From..."
05. Browse to the GenericBaseline.htm (attached to this entry) file and choose Open
06. When prompted, give the baseline a meaningful name
07. Leave the default values on the General tab - this will sample data every 15 seconds
08. Select the Log Files tab and click the Configure button to change the location off of the C: drive - You've been warned!
09. Select the Schedule tab and configure both Start log and Stop log to Manually (using the shortcut menu)
Note: After testing is complete, you can set the schedule accordingly (30 days is a recommended interval, but be sure to include your busiest times - like month-end)
10. Click Apply and OK
Step 2 - Test the baseline:
Now that the baseline is implemented, it would be a really good idea to let it run for a few hours or so and then verify that the data is indeed the data you want to see. You don't want to run this baseline for 30 days only to then find out that something went wrong. You can Start/Stop the counter log at any time, by right-clicking it and choosing Start/Stop. Once you have verified that you are getting accurate data, schedule it and forget about it.
Step 3 - View the baseline data:
01. Log on to the server that you wish to view the baseline data for
02. Start - Run -> perfmon
03. Select System Monitor
04. Right-click in the right pane and then press Ctrl+L
05. For the data source, choose Log files and then click the Add button
06. Browse to the counter log you created earlier and then choose Open
07. Click the Data tab and remove the default objects listed there
08. Now add the 3 counters used in the counter log (Memory: Available MBytes, PhysicalDisk: Disk Transfers/sec, Processor: % Processor Time)
09. Click OK and the results are now visible in the window
10. Best bet is to avoid looking at the graph, and just focus on the raw numbers shown just below the graph - Here you will see Minimum, Maximum and Average Values
Step 4 - Interpreting the data:
Available MBytes - This is the amount of available memory. Subtract this value from the actual memory in the server, and you will get a pretty good idea of what the actual memory requirements are for this workload.
Disk Transfers/sec - These are the disk IOPS.
% Processor Time - The percentage of time the processor is being used - maximums of 100 are to be expected.
Step 5 - Using the data:
With just these three counters, you can gain good insight into what your servers are really doing. With this limited data, you could even do some of the server sizing yourself. At least now, you can take this basic data to the forums with your questions. Having the supporting data is important, because it removes a large degree of the subjectivity and leaves what is basically a simple math problem.