Performance testing solid-state drives

By Curtis Collicutt, Cloud Developer, Edmonton

Over the last couple of years, I have done a lot of performance testing with storage systems, especially exotic ones like FusionIO or OCZ Z-drive R4 PCIe-based flash cards. Right now I am testing several different types of commercial and enterprise solid-sate drives (SSD) for a stateless virtual machine project.

To properly ascertain storage performance, I need at least three results from the tests:

    1.    Throughput (this is easy as all tools seem to do this)
    2.    Input/Output Operations Per Second (IOPS)
    3.    Latency

I have seen many tools that test the performance of storage systems. However, I am aware of only one that does what I would consider a great job of testing performance '€” and providing all the results I need. That tool is fio.

fio, which I believe stands for '€œflexible I/O tester'€, is available in most Linux distributions and can be installed easily in Ubuntu with apt-get install fio or in Redhat Enterprise with yum install fio if the the EPEL repository is installed.

But, what do you test? The reality is that performance testing is always about comparing results. A single set of results is no good without something to compare it to. So for me, it'€™s important to have a standardized set of tests so that I can compare new tests on new storage systems to older results. To accomplish this, I use the four basic tests that FusionIO recommends:  

    1.    Write IOPS
    2.    Write throughput
    3.    Read IOPS
    4.    Read throughput

All the tests report latency as well.

Here is a link to the simple script I have been using lately to run the tests on a bare device.

NOTE: The write tests will destroy data on the drive you are testing!

One other thing I would like to note is that the --direct=1 switch used in the fio commands in the script means you are going to test with unbuffered IO. Otherwise, you would simply test the faster cache of the storage system, which might lead to incorrect performance conclusions.

The output of the tests is quite verbose, so I won'€™t show you all the results, but here are some snippets of a recent test on two striped 512GB Samsung 830 SSD drives. Nothing like 83k IOPS!

md2_2013_02_06_16_04_45_readbw.out:  read : io=301164MB, bw=1003.8MB/s, iops=1003 , runt=300051msec
md2_2013_02_06_16_04_45_readiops.out:  read : io=12210MB, bw=41678KB/s, iops=83355 , runt=300002msec
md2_2013_02_06_16_04_45_writebw.out:  write: io=192428MB, bw=656521KB/s, iops=640 , runt=300137msec
md2_2013_02_06_16_04_45_writeiops.out:  write: io=9282.4MB, bw=31683KB/s, iops=63366 , runt=300003msec

If you have any corrections or suggestions, please let me know. 🙂