Why are my new servers so much slower than the old ones?

I had a support call today where I was asked to have a look at some servers to find out why they seemed so much slower than the existing ones. With not much detail to go on I first looked at some basic metrics;

Basic Metrics

MetricOld ServerNew Server
Hardware ModelHP ProLiant DL380 G5Dell PowerEdge R715
Operating SystemMicrosoft(R) Windows(R) Server 2003 Standard x64 EditionMicrosoft Windows Server 2008 R2 Enterprise
Memory32,766 MB131,046 MB
Processor2 Processor(s) Installed.
[01]: EM64T Family 6 Model 23 Stepping 10 GenuineIntel ~3000 Mhz
[02]: EM64T Family 6 Model 23 Stepping 10 GenuineIntel ~3000 Mhz
2 Processor(s) Installed.
[01]: AMD64 Family 21 Model 1 Stepping 2 AuthenticAMD ~3000 Mhz
[02]: AMD64 Family 21 Model 1 Stepping 2 AuthenticAMD ~3000 Mhz

The first thing that stands out is that the new server is from a different hardware vendor, but a higher spec, later generation system – so what could be wrong?

I decided to have a look in the BIOS first to see if there were any obvious misconfigurations, and noticed that the power management settings were not set to “Maximum Performance” and that the C1E state was enabled.

Before changing anything I downloaded and ran Super Pi to get a simple baseline of single threaded calculations on the new higher spec server.

I then changed three BIOS settings, and re-ran the Super Pi calculations;

  • Enabled “Processor HPC mode”
  • Disabled “C1E”
  • Set Power Management to “Maximum Performance”

The results;


** before on the left, after on the right

WOW, what a difference! By simply changing the power management settings in the BIOS, a calculation that previously took 1 minute 8 seconds now only takes 11 seconds!

17,581 total views, 2 views today

Are all your guest OS partitions correctly aligned?

Guest OS partition alignment isn’t a new topic, but it is important that you deal with any misaliged disks to ensure that you are getting the best out of your storage. This post will cover how to identify which of your windows VM’s are affected using PowerShell and WMI.

Firstly, to put the performance differences into perspective, here are the results of a simple iometer benchmark comparing misaligned IO (on the left) to correctly aligned IO (on the right).







As you can see from these results, there are significant advantages of using correctly aligned disks. Now you need to find out if you have any misaligned disks with this simple PowerShell script.

Remember to change the parameters on the highlighted rows;

  • Row 15 – your vCenter Server name
  • Row 24 – your VM’s in Scope
  • Row 67 – the path to export the CSV results
Check Disk Alignment;
## =============================================================================
## NAME : Check_Disk_Alignment.ps1
## AUTHOR : Jon Munday (www.jonmunday.net)
## DATE : 20/03/2013
## PURPOSE : This script Checks to see if NTFS partitions are aligned correctly
## =============================================================================

## Clear

## Loads PowerCLI snap-in to the current session.
Add-PSSnapin vmware.vimautomation.core

## Connect to vCenter
$vcenter = 'myvcenter.mydomain.fqdn'
Write-Host "Connecting to $vcenter" -ForegroundColor Green
Connect-VIServer $vcenter | Out-Null

## Create empty array
$results = @()

## Get VM's you want check for alignment
Write-Host " - Getting list of Virtual Machines"
$computers = Get-Datacenter MyDatacenter | Get-VM -Name * | Where-Object {$_.PowerState -eq "PoweredOn"} | Sort Name

## Check each VM
foreach ($computer in $computers){
    $ping = Test-Connection -ComputerName $computer -Count 1 -Quiet

    IF($ping -eq 'True'){

    $partitions = Get-WmiObject -Class Win32_DiskPartition -ComputerName $computer

    foreach ($partition in $partitions){

    ## Association of Disk to Partition - For Example Disk #0, Partition #0 = C:\
    $query = "ASSOCIATORS OF {Win32_DiskPartition.DeviceID='$($partition.DeviceID)'} WHERE AssocClass=Win32_LogicalDiskToPartition"

    $disktopart = Get-WmiObject -ComputerName $computer -Query $query

        $Detail = New-Object PSObject -Property @{
            SystemName = $partition.SystemName
            Drive = $disktopart.DeviceID
            DiskName = $partition.Name
            BlockSize = $partition.BlockSize
            SizeGB = "{0:N2}" -f ($partition.Size/1024/1024/1024)
            StartingOffset = "{0:N0}" -f ($partition.StartingOffset)
            AlignmentCheck = If([Uint64]($partition.StartingOffset % 4096) -eq 0) {"Aligned"} Else {"NOT Aligned"}

        $results += $Detail


## Display Results in PowerShell ISE Console
$results `
| Select SystemName,Drive,DiskName,BlockSize,SizeGB,StartingOffset,AlignmentCheck `
| Sort SystemName,Drive,DiskName `
| Format-Table -AutoSize

## Export Results to CSV
$results `
| Select SystemName,Drive,DiskName,BlockSize,SizeGB,StartingOffset,AlignmentCheck `
| Sort SystemName,Drive,DiskName `
| Export-CSV -Path C:\TEMP\DiskAlignment\Alignment_Results.csv -NoTypeInformation

## Disconnect from vCenter
Write-Host "Disconnecting from $vcenter" -ForegroundColor Yellow
Disconnect-VIServer -Server $vcenter -Force -Confirm:$false

Your results are displayed in both the Powershell console and exported to CSV where you can analyse them in Excel using pivot tables.

CSV Results;


Now the only thing left to do, is deal with the issue!

137,543 total views, 14 views today