fio
is a tool that will spawn a number of threads or
processes doing a particular type of io action as specified by the
user.
ioping
is a tool to monitor I/O latency in real time. It
shows disk latency in the same way as ping shows network latency. It
creates temporary files in the indicated directory and then tests the
latency of read operations on them.
In your /short/c37 area on Raijin create a suitably named sub-directory for this session, and in there check out the following Git repos:
man ioping/ioping.1 man fio/fio.1
Note: Raijin has three filesystems accessible to end-users: /home, /jobfs and /short.
% /short/z00/jxa900/ioping -c 20 -s 8KB -S 1024MB -C /home/900/jxa900 8 KiB from /home/900/jxa900 (lustre 10.9.103.3@o2ib3:10.9.103.4@o2ib3:/homsys): request=20 time=29 us --- /home/900/jxa900 (lustre -- --10.9.103.3@o2ib3:10.9.103.4@o2ib3:/homsys) ioping statistics --- 20 requests completed in 2.79 ms, 160 KiB read, 7.16 k iops, 55.9MiB/s min/avg/max/mdev = 28 us / 139 us / 289 us / 103 usFrom the above experiment, the corresponding data values are:
Working Set (MB) | Block Size (KB) | Time Taken (ms) | Data Read (KB) | IOPS | B/W (MB/sec) |
---|---|---|---|---|---|
1024 | 8 | 2.79 | 160 | 7160 | 55.9 |
(Later, if you have time/interest): repeat the above without the -C and/or with -D, to see more effects of caching)
Working Set (MB) | Block Size (KB) | Time Taken (ms) | Data Read (KB) | IOPS | B/W (MB/sec) |
---|---|---|---|---|---|
10 | 4 | ||||
10 | 128 | ||||
10 | 1024 | ||||
100 | 4 | ||||
100 | 128 | ||||
100 | 1024 | ||||
1024 | 4 | ||||
1024 | 128 | ||||
1024 | 1024 |
fio/fio --ioengine=libaio --gtod_reduce=1 --bs=1024K --size=1G \ --readwrite=write --thread --numjobs=2 --name=test --directory=./testIOand will produce output like:
test: (g=0): rw=write, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=libaio, iodepth=1 ... Starting 2 threads Jobs: 2 (f=2) test: (groupid=0, jobs=1): err= 0: pid=22754: Mon May 15 18:25:09 2017 write: IOPS=627, BW=628MiB/s (658MB/s)(1024MiB/1631msec) ... test: (groupid=0, jobs=1): err= 0: pid=22755: Mon May 15 18:25:09 2017 write: IOPS=652, BW=653MiB/s (684MB/s)(1024MiB/1569msec) ... Run status group 0 (all jobs): WRITE: bw=1256MiB/s (1317MB/s), 628MiB/s-653MiB/s (658MB/s-684MB/s), io=2048MiB (2147MB), run=1569-1631msecThe command
ls ./testIO
will display the temporary
files fio generated. Using a suitable batch script, run experiments on fio and complete the following table for sequential write IO performance (in the output, run=... is `Time Taken', and io=... is `Data Written'):
No of Threads | File Size (MB) | Block Size (KB) | Time Taken (ms) | Data Written (MB) | IOPS | B/W (MB/sec) |
---|---|---|---|---|---|---|
2 | 1024 | 1024 | ||||
4 | 1024 | 1024 | ||||
8 | 1024 | 1024 |