VMware Cloud Community
robert_way
Contributor
Contributor

Determining if my SAN is the performance bottleneck

Hey folks, I am struggling to find out what the bottleneck is in my envrionment. I have 6 ESX hosts that have about 25 XP instances on each and they all connect back to an HP MSA1500 SAN. The boxes are nowhere near being starved for CPU and/or memory as they run at about 35% CPU utilization and at about 50-60% memory utilization throughout the day. For some reason, the VMs are still pigs and I am narrowing down on the SAN.

Now I myself am not a SAN guy so I can't just telnet into the controller and start looking at stuff but I am suspicious not of the controller/SAN sustained throughput, but its ability to handle a ton of I/O requests. Throughput metrics are relatively low, any suggestions on how to find out what it is in the SAN that is slowing things down. Any suggestions would be appreciated.

Thanks in advance,

Robert

0 Kudos
6 Replies
Jasemccarty
Immortal
Immortal

Are your XP VM's running extensive disk i/o apps?

Also, did you modify the disk timeout value in the registry?

We had some EventLog entries a while back that basically pointed to not being able to write to the disk (.vmdk on san).

I increased the disk timeout, and we don't have any issues any more...

It may help, may not, but here's the .reg:

Windows Registry Editor Version 5.00

\[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Disk]

"TimeOutValue"=dword:0000003c[/code]

And 0000003c is 60 seconds.

Jase McCarty - @jasemccarty
0 Kudos
robert_way
Contributor
Contributor

Thanks for the response, our XP template already has the TimeOUtValue set at 60 so that doesn't seem to be the issue. The VMs don't crash waiting on a response back from the SAN. I guess I am trying to find out if my controller is saturated.

We have investigated the desktop agents like ePO and BigFix clients to cut back on their activity as well as narrow down the focus of on-access virus scanning.

Thanks again....

Message was edited by:

robert_way

0 Kudos
admin
Immortal
Immortal

There might be a way to do this through VirtualCenter, but here goes:

you can look at /proc/vmware/scsi/vmhbaX/Y:Z on one of the MSA LUNs.

You'll see a column called totalTime. This is the average time it took for a SCSI command to go all the way from VM to diskarray and back. You can compare this time with non-MSA LUNs or systems and see if it is unusually higher. If it is, your diskarray or some element in the fabric is the bottleneck.

0 Kudos
donbaek
VMware Employee
VMware Employee

Please note that totalTime is the time from when the command entered the VMkernel queue till it completed while issueTime is the time the I/O spent only in the VMkernel queue. So if we subtract the issueTime from the totalTime we get the time the I/O spent in the driver which is what you want here.

Also, it should be noted that these values are in CPU cycles (TSC values), so you need to divide with your CPU speed (e.g. 3000000000 for a 3Ghz CPU) to get it in seconds.

Lastly, please note that figuring what's really your bottleneck can be really hard, since queueing is expected if the VM's are issuing a lot of I/O's. Here are a few things to keep in mind:

\- The bottom line (of th /proc node(s) SV mentioned) shows 'active' and 'queued' values (for the given instant when you look at the proc node). The active value reflects how many commands are active in the driver for this LUN (and it can never go past the queue depth reported at the very top). The queued value tells you how many I/O's are issued that had to be queued in the VMkernel, and so queued+active is the amount of total I/O outstanding from all your VM's. If your system is busy it should show a (almost) constantly max'ed active value.

\- If the queued value is high due to the VM's constantly pushing lot's of I/O's that fine, but if it is constantly high due to bad performance from your storage it is bad - so you need to look at the average I/O turnaround time (the time spent in the driver from above) and try to determine whether that number is too high or too low, but really you also want to consider the average I/O sizes here (which is "(KBwritten + KBread) / cmds").

\- Note that writes are typically faster than reads due to caching.

\- There is a HUGE difference between sequential and random I/O's and you may not know much about what is issued (and likewise with the I/O size as mentioned above). It is therefore preferrable to test performance with VM's running a benchmark like 'iometer' on an otherwise idle system. Here you can pick the I/O size(s) and pattern (random vs. sequential percentages) so you take some of the guesswork out of the equation.

I am sure this did not make your life any easier, but doing fair and serious benchmarking is actually a fine art and without doing it carefully you may get less than ideal results and jump to the wrong conclusions.

As a very last thing, in case you find a performance issue, be aware that putting many VM's with large disks on the same (huge) VMFS may actually hurt performance because the I/O pattern (as seen from the array) is random I/O's scattered \_far_ apart on the volume (since a VM with a large disk tends to concentrate I/O to only a small part of it). If that is the case you may benefit from grouping the disks in the array into several smaller RAID groups and then have a VMFS with less VM's per volume.

/Thor

NB: I work for VMware, but opinions expressed above are my own and not necessarily those of my employer.

Message was edited by:

donbaek - had to add my disclaimer here Smiley Happy

0 Kudos
Steve_Mc
Hot Shot
Hot Shot

Robert, some considerations that come to mind quickly...

The disk layout on the SAN: are all virtual disks carved from the same spindles?

Disconnect external devices (CDROM, floppy.. ) from every VM.

Install VMware Tools in every VM.

Steve

0 Kudos
chbock
Contributor
Contributor

Hi there,

I just have a short question regarding SCSI warnign 0/5 0x0 0x0 0x which is SCSI ABORT.

Currently I'm dealing with a problem with ESX 2.5.x where SAN disks were lost for some minutes.

vmkwarning reports Host Busy 0/2 0x0 0x00 0x00 and after a short while 0/5 0x0 0x0 0x0 is seen.

When does VMware decides to send those scsi aborts ?

In /proc/vmware/config/disk I've found busy SCSI commands completion is delayed for 400 mili seconds. But I didn't figure out yet when the cmd is aborted.

Can anyone help here ?

P.S.:

Am I right to say

A = SCSI Device Status => storage device

B = SCSI Host Status => HBA of VMware ?

thanks

ch

0 Kudos