IOMelt - Version 0.7

A simple yet effective way to benchmark disk IO in Linux systems.

Download link (version 0.7): here or you can get it on GitHub.
 MD5: 2d65f4631d22b67ecac7ebfc581c98ca
README.

IOMelt is designed to run on Linux systems, it uses some calls that are exclusive to Linux so it will fail to compile on other systems (as of March 2012). It should not be hard to port it to other systems though, I just don't have enough spare time to do it.

UPDATES:

IOMelt runs a series of four tests:

  1. Serial write test: serially fills up a file until it reaches the specified size
  2. Serial read test: reads the file using read() within a loop
  3. Random rewrite test: random seeks an offset and writes to it
  4. Random reread test: random seeks and offset and reads it
  5. Random Mixed read/write test: randomly mixes read and write operations

Building should be simple, just run make inside the IOMelt folder and everything should work, feel free to send me an e-mail if you have any issues compiling or running IOMelt.

What is the typical output?

Here is the output on my desktop:
Serial write test - File size: 10.00M - Block size: 4096
Serial write test finished
write() calls: 2560
Wallclock seconds: 1.543724
write() calls per second: 1658.327716
write() bytes per second: 6.48M

Serial read test - File size: 10.00M - Block size: 4096
Serial read test finished
read() calls: 2560
Wallclock seconds: 0.030610
read() calls per second: 83633.220186
read() bytes per second: 326.69M

Random rewrite test - File size: 10.00M - Block size: 4096
Random rewrite test finished
write() calls: 2560
Wallclock seconds: 0.564044
write() calls per second: 4538.653023
write() bytes per second: 17.73M

Random reread test - File size: 10.00M - Block size: 4096
Random read test finished
read() calls: 2560
Wallclock seconds: 0.123327
read() calls per second: 20757.819866
read() bytes per second: 81.09M

Random mixed read/write test - File size: 10.00M - Block size: 4096
Random read/write test finished
read()/write() calls: 2560
Wallclock seconds: 0.553925
read()/write() calls per second: 4621.563979
read()/write() bytes per second: 18.05M


Finished all tests
Total wallclock time: 2.826951
Blocks in/out: 61112/82560
CPU user/system time: 0.000000/0.712044

I have seen some scatter plots using iomelt output, how can I do that?

Simply configure it as a cron job and use the '-d' option, then use R or excel to plot the data.

Typically I use '-dor', this is an example of the output:

#Date;Hostname;Test;File Size;Block Size;Total Time;Calls per second;Bytes per second
Tue Aug 21 21:05:32 2012;ubuntu;Serial Write;10485760;4096;19.028683;134.533746;551050.222445
Tue Aug 21 21:05:32 2012;ubuntu;Serial Read;10485760;4096;0.031733;80673.116139;330437083.705433
Tue Aug 21 21:05:32 2012;ubuntu;Random Rewrite;10485760;4096;6.699019;382.145505;1565267.989227
Tue Aug 21 21:05:32 2012;ubuntu;Random Reread;10485760;4096;1.287984;1987.602330;8141219.145243
Tue Aug 21 21:05:32 2012;ubuntu;Random Read/Write;10485760;4096;6.957187;367.964811;1507183.866131

This is an example of a scatter plot generated using R and iomelt data:

IOMelt Random Rewrite
Tweet