Calculating the IOPS using Bandwidth

I have the write Bandwidth value received from the system and I need to calculate the write IOPS using the BW,

Bandwidth = amount of data / second

http://rickardnobel.se/storage-performance-iops-latency-throughput/

As per the above link, I observed the following formula,

Average IO Size * IOPS = Bandwidth

So If my understanding is correct, then If I have the Average IO size, I will be able to calculate the IOPS.

Example :

Average IO Size is 4KB and Bandwidth = 32KB then

IOPS = Bandwidth / Average IO Size
IOPS = 32KB / 4KB
IOPS = 8

I have two questions from it,

1) Is it correct?
2) As per the definition, It seems Average IO size depends on OS and Application / service running, So Can someone elaborate on how to get this Average IO Size? so that I can get the IOPS.

• How does this relate to unix? This is question seems like pure math. Or an X/Y problem. If this were about Linux, the question should be "how do I get IOPS", upon which the answer becomes very simple. – Patrick Feb 8 '18 at 2:03

IOPS - input/output operations per second

Thus it actually might be very very roughly estimated as

Bandwidth / (average transaction block size + communication overhead)

Payload with all the checksums and protocol encapsulation can be enourmous, actuall I/O transactions will be batched at the hardware level, such manipulations are rendered invisible from the software perspective.

If we're comparing AHCI and PATA modes there's like ~2.5 overhead just from an aditional encapsulation of the ATA command set. Due to the command queue being synchronous further drive head movements can't be optimized. Some of the AHCI NCQ optimizations may fail.

And if it's a SSD the things are much more unpredicatable there, because SSD's are storing only an approximation of your data, which will be degrading over time, and you have to predict the IO execution plans of the hardware controller - some of them may fail.

Measuring actual IOPS in block devices nowadays became quite cumbersome. So, if your block device doesn't have some sort of hardware implementation of an IOPS counter - it's pratically imposible to measure at software level.

If we're speaking about rough estimations - NVMe controllers IOPS count accuracy can be like +/- 10K IOPS nowadays.