Hi fellows!
I use several Windows 2003 virtual machines hosted on Esx.
We have SAN-FDDI-SCSI-RAID5 disk array
I am not an admin of this Esx infrastructure but it seems that there is a disk IO performance problem.
I run sqlio.exe -frandom -i1
on my Windows2003 comps
and got that results
C:\Program Files\SQLIO>"C:\Program Files\SQLIO\sqlio.exe" -frandom -i1
sqlio v1.5.SG
1 thread reading for 30 secs from file testfile.dat
using 2KB random IOs
using current size: 8 MB for file: testfile.dat
initialization done
CUMULATIVE DATA:
throughput metrics:
IOs/sec: 22.25
MBs/sec: 0.04
My sysadmin said that it is ok but I think it is not because on my real desktop computer I have much higher
If anybody used SQLIO on virtual Win2003, could you please send your result to compare.
Thank you in advance!
I'm getting
4600 IO/Sec
and 9 MB/Sec from my SAN with the same test.
.04 MB/sec is bad. That is like dial up modem speeds.
Thank you !
Did you run it with parameters?
>"C:\Program Files\SQLIO\sqlio.exe" -frandom -i1
MB/Sec is not very critical because SQLIO reads data with little 2K blocks
BUT IO/Sec = 22.05 is realy very slow - Every simple IDE disk can produce 100 IO per second I think
Here you go:
C:\Program Files\SQLIO>sqlio.exe -frandom -i1
sqlio v1.5.SG
1 thread reading for 30 secs from file testfile.dat
using 2KB random IOs
using current size: 8 MB for file: testfile.dat
initialization done
CUMULATIVE DATA:
throughput metrics:
IOs/sec: 5255.93
MBs/sec: 10.26
My guess is that your Disk offsets are wrong and therefore your not getting the IO you should be.
Thank you very much!
I am not a specialist of Linux and ESX so Where can I read about
Disk offsets?
Is it parameter of virtual machine file system images?
Diskalignment is on the host in your case. If you have used the Virtual Infrastructure Client to create your VMFS volumes they should be aligned automatically. VMFS uses default 1MB blocks
Diskalignment is simply to align your partition, so that it start in the beginning of a disk block. If a OS diskblock spans across two disksystem blocks it requires two I/Os to read one OS diskblock. Disksystems have different blocksizes and you will need to read the manual for the disksystem or talk with the vendor.
If you are using Windows 2003 you can use Diskpart to align with the "create partition primary align=", but that only makes sense in the physical world until we have detailed knowledge about how ESX I/O works.
Some examples. Equallogic uses 64K disk blocks, HP EVA 5000 uses 4K disk blocks. So If you both align to 64 and uses 64K blocks in your OS on an Equallogic box, you will have a very good tuned disksystem on those points. Keep in mind that there are a lot of other factors as well to tune, and that no matter how many drives you have in a SAN they are not any better that the controllers, cache and other components inbetween.
And you are on the right path, testing your equipment
HP EVA 5000 uses 4K disk blocks
An EVA chunk is 128KB. A disk block is 512 Bytes.
Dammit!
IOs/sec: 5255.93 against my 22.25 !!!!!
More than 100 times less!!!
It is very strange,
as I undestand bad partition alignment(offset) can slow down IOs maximum
by two times (becuase of additionanl IO per read).
It must be some kind of very bad config on ESX I think!
Thank you all for help
Another intresting behaviar I found!
When I run SQLIO with additional parameter -t256
"C:\Program Files\SQLIO\sqlio.exe" -frandom -i1 -t256
I've got
IOs/sec: 5253.23
MBs/sec: 10.26
Almost the same IO-throughput that Sanderso send in previouse post.
So if SQLIO executes 256 reads at a time in many threads ESX executes them in parallel.
So phisical SCSI-SAN disk performance is good.
But if SQLIO works in one thread making reads one-by-one it is very slow!
Now It seems to be problem of
LSI Login PCI-X Ultra320 SCSI Host Adapter
that is installed in guest Windows2003
Am I right?
Single random synchronous I/O is much slower than parallel random asynchronous I/Os. If that data is not already in the read cache, the program always has to wait for the disk read. In that case it does not even help if the data is striped across many disk drives, because only one disk is hit at a time.
Weird. HP says to align diskblocks on a multiple of 4096 bytes.
In my case the data for SQLIO is already in the cache - because
SQLIO use 8Mb test file and our SCSI controller has 256Mb cache and
there is no other disk activities except mine (I did at night).
It sounds like we use a different terminology and/or talk about different things.
There was customer advisory for EVA3000/5000 which suggested to set the partition offset to 64 blocks (=32768 bytes) for native Windows disks to get away with a performance problem during massive sequential writes to VRAID-5 virtual disks.
There is also information which suggest the initialize disks used by the OpenVMS operating systems with a cluster size whose value I think it was 4 (=2 KBytes).
I have never head about suggestions for other operating systems. Of course that does not mean they don't exist - could you please tell me the source of the 4KB? Maybe there is some confusion with the default NTFS cluster size which happens to be 4KB, too?