# Calculating IOPS for a single HDD - what am I doing wrong?

So I know there is no standardized way of calculating IOPS for a HDD, but from everything I have read it appears one of the most accurate formulas is the following:
IOP/ms = + {rotational latency} + ({block size} / {data transfer rate})

Which is IOs per millisecond or what the book I've been reading calls "Disk Service Time". Also rotational latency is calculated as half of one rotation in milliseconds.

This was taken from the EMC book "Information Storage and Management" -arguably a pretty reliable source right\wrong?

Putting this formula into practice consider this Seagate data sheet.

I am going to calculate IOPS for the ST3000DM001 model for a block size of 4kb:

• Seek Average (Write) = 9.5 -I'll measuring IOPS for writes
• Spindle speed = 7200rpm
• Average Data Rate = 156MB/s

So my variables are:

• Seek Time = 9.5ms
• Rotational latency = (.5 / (7200rpm / 60)) = 0.004s = 4ms
• Data Rate = 156MB/s = (0.156MB/ms / 0.004MB) = 39

9.5ms + 4ms + 39 = IO/ms 52.5

1 / (52.5 * 0.001) = 19 IOPS

19 IOPS for this drive clearly is not right so what am I doing wrong?

-

Your basic formulas are reasonable, but this:

Data Rate = 156MB/s = (0.156MB/ms / 0.004MB) = 39

can't be right. You need to determine the time needed to read a block, which would be

``````4 KB / 156 MB/s = 2.5 * 10^-5s ( ~ 0.025 ms)
``````

As this is value is negligible, you might omit it for your rule-of-thumb approximation and the calculation would look like `1 / 0.0135`, resulting in around 74 IOPS.

-
4 KB / 156 MB/s = 2.45 * 10^-5s ( ~ 0.0245 ms) is where I'm confused. How do you get 0.0245ms from that? I don't understand the unit conversion- sorry my basic math skills are embarrassing what exactly is "2.45 * 10^-5s". I guess in the grand scheme of things, especially when your buying whole shelves of disks, using data rate like this isn't a huge factor- I just want to understand how it could be used. –  red888 Nov 6 '13 at 21:52
@red888 `4 KB / (156 MB/s * 1024 KB/MB) = 4 KB / 159744 KB/s = 0.000025 s = 2.5 * 10^-5 s`. The notation of `* 10^-x` is common whenever you deal with very small values. Basically, it is a mathematical representation of the number of leading zeros in a decimal fraction. As this number is very low compared to the other summands for seek time and rotational latency and does not significantly influence the overall result, you often see it omitted entirely in IOPS approximations - just as Mark Wagner's answer suggested. –  the-wabbit Nov 6 '13 at 22:05
Thanks for clarifying that- I must admit I'm more than a little embarrassed to have actually forgotten what scientific notation looks like. Memories of highschool chemistry are flashing before my eyes. –  red888 Nov 7 '13 at 13:33

Why are you including the data rate?

1 / ( 0.004 + 0.0095 ) ~ 74 IOPS.

-
But how do I know what block size those I/Os are? –  red888 Nov 6 '13 at 21:55
Think I'm going to ask another question specifically about my confusion with this. –  red888 Nov 7 '13 at 15:50