comparing disk performance of machines

I am in the process of moving applications running on old Linux machines onto VMs. As part of this, I need to justify the VMs have at least the capacity (i.e. CPU speed, RAM, disk, disk speed, network speed...), otherwise the moves will slow the applications down.

So, as part of that, I need a way of profiling disk performance. I understand performance is partially application specific (i.e. amounts and relative ratios of sequential/random reads/writes and so on).

I understand there is the hdparam -t command, which gives a time to read sequentially from the first part of a disk. However, is there a tool that'll give a disk a workout of sequential/random activities and some kind of score? Are there any better disk performance tools?


There are many, but I'll be talking about just two.

IOMETER

IOMeter is a benchmarking tool that is very featured. You frequently find it being used by the major benchmarking sites when discussing performance of new storage systems. Anandtech used it for ages, and may still do so as a tool in their overall benchmarking suite.

IOZONE

My personal favorite, IOZone has fewer features than IOMeter but it easier to use. You can get a reasonably good benchmark with very few flags, and can tune it to get exactly what you're looking for. It also has a throughput-test mode where it'll spawn multiple simultaneous testing threads so you can get an idea of the differences between one big process hammering storage, and lots of processes hammering storage.


Both of these tools blow hdparm -t out of the water when it comes to relevancy. HDParm doesn't deal with enough data to not fully exclude system effects of memory.

When benchmarking virtual spaces, be aware that storage performance is by necessity much less predictable than it is on dedicated storage. Both of these tests can saturate the I/O channel between you and storage, which in turn means that some other VM experiencing high I/O can throw off your numbers, and your benchmarking throw off theirs in return.

IOZone, as I said, is easy to use. This will give you a real solid IO workout:

iozone -a -s 8G

That'll do a full benchmarking series on an 8GB file. You want the file to be larger than RAM in the box so may be smaller or larger depending on what you're doing.


The command line utility bonnie++ does a pretty good job of profiling hard drive IO performance in a standard enough way that is is useful for comparing across machines, inside and out of virtual environments, and as you change hardware specs.