Storage is one of the 4 core design parts that has a big impact on the performance and the cost of a virtual environment. I was looking for a way get some demands for the storage i wanted in my environment. When you talk about storage demands you talk about IOps. IOps stands for Input Output operations per second and is a common benchmark for Hard disk (including solid-state drives). In search of answers i found a lot of information but at two create blog, of two people how are well known with in the VMware community, i found the total picture a was looking for. The blogs belong to Josh Townsend of VMtoday and Duncan Epping of yellow-bricks. The links of the related article of the blogs are at the bottom of this post. They collected the information i also found divided over the web. Now i can just link to those pages but this is also a overview for my self.
In my search i found that there is a formula to calculate the IOps of a disk. To calculate the IOps (Write or Read) you need the following specifications of you disk
Seek latency or seek time this is the time that is taken to move the head of the disk to the right track on the disk. The time that this action cost depends on how many track the head must travel. The seek latency that is in the specifications of the manufacture is the average seek latency. This is measured by taking the time it takes to travel one-third of the disk. The reason for one-third is that most accesses are short seeks of just a few tracks.
Rotation latency this is the time required for the the correct sector within the track of the disk to rotate into a position where it is accessible by the read or write by the head. Rotation latency is directly affected by the rotating speed of the disk. The higher the speed of the spindle (the rpm) the lower the latency.
The deference between track and sector can be viewed in the drawing below. A disks has multiple tracks and these are the red circles on the disk and every circle are divided in to sectors with is a small part of the tracks. The head of the disk moves tot the right track and read or write with in a sector
The Seek and Rotation Latency are numbers that can be found in the technical specifications of you disk vendor.
Now that we known what we need and what we are using we can do the math. The following formula is use to calculate the IOps:
IOPS = 1000/(Seek Latency + Rotational Latency)
The value 1000 is the 1000 ms that are in a second. The latency numbers by the vendors are given in millisecond and the IOps are in seconds. So now you known how to calculate the IOps of one disk.
There is a other way of determining the IOps of a disk. with in the storage community there are some accepted working numbers. i found different tables that are exactly the same or are very close. Personally i like the table of Duncan Epping because it is on the safe side. Remember the tables i found are mostly based on random IO just like the one below.
Table 1 source
Why not just give the table at the start? i like to known how these things are composed you may never known when you must calculate the IOps when you’re at a customer with performance problems. Storage can be the cause of it. And with this table you must known what the percent of write and read is for your system. So it is a good indication but it i think is better to do the math or better a capacity measurement. When you do the math you can calculate the IOps for read and for write with the same formula. The Seek latency is different for read ( Random read seek time) and write (Random write seek time). This is all for a single disk.
Within a (virtual) environment you usually don’t have one disk but a bundle of disk that are in a volume in some kind of RAID configuration so you don’t lose everything when one of you’re disks fails. How to calculate the IOps for the raid that you are using? For the read IOps is is simple just just multiply the IOps by the amount of disk without the raid overhead. example lets take 4 (15k) disks in a raid 5 (raid 5 has 1 disk of overhead see raid set here) so this is:
175 IOps X (4-1)= 525 Read IOps
But for write IOps it gets complicated when you write in a Raid set you get a extra factor that needs to bee considered this is called a penalty. Penalties are due to the extra time it takes the parity data to get written to disk. RAID groups have different kind of write penalties. When we take the table 1 en say this is the IOps for read and added the raid write penalty you get the following number (see table 2). We are walking on the safe side because the numbers in table 1 are based on random IO. To calculate the write IOps of a disk just take the read IOps for a single disk en divide this by the IO penalty. In the table below a calculated the most common disks:
Table 2 source
with these formulas you can calculate the IOps which you have or what you get form the storage vendor or how many disk you should put in to you’re raid set to get the throughput you need. Is this correct? do you have a 100% read or write? I don’t think so so what must be the ratio between read and write? When you known what the ratio is between read and write you just use the formula of Duncan:
(TOTAL IOps × % READ)+ ((TOTAL IOps × % WRITE) ×RAID Penalty)
But before you can do this you make sure you understand the environment needs on storage I/O. In ESX you can see how many IOps you are using and since the last update it is also possible to see this for a NFS store. Within windows use the Performance Monitor. For total IOps use Disk Transfers/sec for read use Disk Reads/sec and for write use Disk Writes/sec. These measuring points can all be found under the Physical Disk pull down menu.
This article is inspired by many web pages in my search for answers about IOps but there are 2 bloggers whose article gave me the understanding i need to get the job done! Thank you:
Duncan Epping : IOps