ストレージのI/Oパフォーマンス測定ツール「nstress」の使い方

ストレージのI/Oパフォーマンスを測定するツールで「nstress」というツールがあります。
「100% Read」「100% Write」「70% Read 30% Write」などを測定することができます。

nstressツールは下記サイトからダウンロードできます。

https://www.ibm.com/developerworks/community/wikis/home?lang=en#!/wiki/Power%20Systems/page/nstress

ここでは、「nstress_AIX6_April_2014.tar」をダウンロードしました。

まず最初に、I/O性能を測定したいストレージ上のVGに、測定用領域としてファイルシステムを作成します。
ここでは、「/test」で作っています。

次に、I/Oテストで使用するファイルをddコマンドで「/test」以下に作成します。

512byte * 2097152 = 1073741824byte (1GByte)

# dd if=/dev/zero of=/test/testfile1 count=2097152
2097152+0 レコードを入力しました。
2097152+0 レコードを出力しました。
#

このテストファイルを4つ作ります。ここでは以下のように作りました。

  • /test/testfile1 1GB
  • /test/testfile2 1GB
  • /test/testfile3 1GB
  • /test/testfile4 1GB
     

ダウンロードした「nstress_AIX6_April_2014.tar」ファイルを展開すると、その中に「ndisk64」という実行ファイルがあります。

これを使ってI/O性能をテストします。

 

 

 

I/Oテスト実施 (Sequential I/O編)

SequentialでのI/O性能を測定していきます。
テストシナリオは、Read/Write割合いを4つのパターンに分けてテストしてみました。

I/Oテストのシナリオ①  Read 100% Write 0%

項目 設定値 オプション
I/O方式 Sequential -S
I/Oファイル /test/testfile1、/test/testfile2、/test/testfile3、/test/testfile4 -f /test/testfile1:/test/testfile2:/test/testfile3:/test/testfile4
Read (%) 100% -r 100
Blockサイズ 4096byte (Default) -b 4K
I/Oサイズ 32MB (Default) -s 32M
I/O時間 60秒 -t 60

コマンド実行結果

# ndisk64 -f /test/test1.dat:/test/test2.dat:/test/test3.dat:/test/test4.dat -S -r 100 -M 4 -b 4K -s 32M -t 60
Command: ndisk64 -f /test/test1.dat /test/test2.dat /test/test3.dat /test/test4.dat -S -r 100 -M 4 -b 4K -s 32M -t 60
        Synchronous Disk test (regular read/write)
        No. of processes = 4
        I/O type         = Sequential
        Block size       = 4096
        Read-Write       = Read Only
        Sync type: none  = just close the file
        Number of files  = 4
        File size        = 33554432 bytes = 32768 KB = 32 MB
        Run time         = 60 seconds
        Snooze %         = 0 percent
----> Running test with block Size=4096 (4KB) ....
Proc - <-----Disk IO----> | <-----Throughput------> RunTime
 Num -     TOTAL   IO/sec |    MB/sec       KB/sec  Seconds
   1 -  11202317 186707.3 |    729.33    746829.04  60.00
   2 -  11762711 196046.5 |    765.81    784186.18  60.00
   3 -  11864962 197750.5 |    772.46    791001.90  60.00
   4 -  11293985 188233.1 |    735.29    752932.50  60.00
TOTALS  46123975 768737.4 |   3002.88   3074949.61
- Seqential procs=  4 read=100% bs=  4KB
#

上記の結果から次のことが分かります。

 60秒間のI/O回数      → 46123975回
 1秒あたりのI/O回数    → 768737回(IOPS)
 1秒あたりのI/Oサイズ    → 3002MB

 

I/Oテストのシナリオ②  Read 80% Write 20%

項目 設定値 オプション
I/O方式 Sequential -S
I/Oファイル /test/testfile1、/test/testfile2、/test/testfile3、/test/testfile4 -f /test/testfile1:/test/testfile2:/test/testfile3:/test/testfile4
Read (%) 80% (Write:20%) -r 80
Blockサイズ 4096byte (Default) -b 4K
I/Oサイズ 32MB (Default) -s 32M
I/O時間 60秒 -t 60

コマンド実行結果

# ndisk64 -f /test/test1.dat:/test/test2.dat:/test/test3.dat:/test/test4.dat -S -r 80 -M 4 -b 4K -s 32M -t 60
Command: ndisk64 -f /test/test1.dat /test/test2.dat /test/test3.dat /test/test4.dat -S -r 80 -M 4 -b 4K -s 32M -t 60
        Synchronous Disk test (regular read/write)
        No. of processes = 4
        I/O type         = Sequential
        Block size       = 4096
        Read-WriteRatio: 80:20 = read mostly
        Sync type: none  = just close the file
        Number of files  = 4
        File size        = 33554432 bytes = 32768 KB = 32 MB
        Run time         = 60 seconds
        Snooze %         = 0 percent
----> Running test with block Size=4096 (4KB) ....
Proc - <-----Disk IO----> | <-----Throughput------> RunTime
 Num -     TOTAL   IO/sec |    MB/sec       KB/sec  Seconds
   1 -   3790907  63181.6 |    246.80    252726.42  60.00
   2 -   3075605  51260.1 |    200.23    205040.43  60.00
   3 -   3020469  50341.2 |    196.65    201364.92  60.00
   4 -   3747108  62452.0 |    243.95    249807.85  60.00
TOTALS  13634089 227234.9 |    887.64    908939.62
- Seqential procs=  4 read= 80% bs=  4KB
#

上記の結果から次のことが分かります。

 60秒間のI/O回数      → 13634089回
 1秒あたりのI/O回数    → 227234回(IOPS)
 1秒あたりののI/Oサイズ   → 887MB

 

I/Oテストのシナリオ③  Read 50% Write 50%

項目 設定値 オプション
I/O方式 Sequential -S
I/Oファイル /test/testfile1、/test/testfile2、/test/testfile3、/test/testfile4 -f /test/testfile1:/test/testfile2:/test/testfile3:/test/testfile4
Read (%) 50% (Write:50%) -r 50
Blockサイズ 4096byte (Default) -b 4K
I/Oサイズ 32MB (Default) -s 32M
I/O時間 60秒 -t 60

コマンド実行結果

# ndisk64 -f /test/test1.dat:/test/test2.dat:/test/test3.dat:/test/test4.dat -S -r 50 -M 4 -b 4K -s 32M -t 60
Command: ndisk64 -f /test/test1.dat /test/test2.dat /test/test3.dat /test/test4.dat -S -r 50 -M 4 -b 4K -s 32M -t 60
        Synchronous Disk test (regular read/write)
        No. of processes = 4
        I/O type         = Sequential
        Block size       = 4096
        Read-Write       = Equal read and write
        Sync type: none  = just close the file
        Number of files  = 4
        File size        = 33554432 bytes = 32768 KB = 32 MB
        Run time         = 60 seconds
        Snooze %         = 0 percent
----> Running test with block Size=4096 (4KB) ....
Proc - <-----Disk IO----> | <-----Throughput------> RunTime
 Num -     TOTAL   IO/sec |    MB/sec       KB/sec  Seconds
   1 -   1101504  18358.3 |     71.71     73433.17  60.00
   2 -    593664   9890.8 |     38.64     39563.21  60.02
   3 -   3002255  50037.7 |    195.46    200150.84  60.00
   4 -   3067713  51128.5 |    199.72    204513.96  60.00
TOTALS   7765136 129415.3 |    505.53    517661.18
- Seqential procs=  4 read= 50% bs=  4KB
#

上記の結果から次のことが分かります。

 60秒間のI/O回数      → 7765136回
 1秒あたりのI/O回数    → 129415回(IOPS)
 1秒あたりのI/Oサイズ    → 505MB

 

I/Oテストのシナリオ④  Read 0% Write 100%

項目 設定値 オプション
I/O方式 Sequential -S
I/Oファイル /test/testfile1、/test/testfile2、/test/testfile3、/test/testfile4 -f /test/testfile1:/test/testfile2:/test/testfile3:/test/testfile4
Read (%) 0% (Write:100%) -r 100
Blockサイズ 4096byte (Default) -b 4K
I/Oサイズ 32MB (Default) -s 32M
I/O時間 60秒 -t 60

コマンド実行結果

# ndisk64 -f /test/test1.dat:/test/test2.dat:/test/test3.dat:/test/test4.dat -S -r 0 -M 4 -b 4K -s 32M -t 60
Command: ndisk64 -f /test/test1.dat /test/test2.dat /test/test3.dat /test/test4.dat -S -r 0 -M 4 -b 4K -s 32M -t 60
        Synchronous Disk test (regular read/write)
        No. of processes = 4
        I/O type         = Sequential
        Block size       = 4096
        Read-Write       = Write Only
        Sync type: none  = just close the file
        Number of files  = 4
        File size        = 33554432 bytes = 32768 KB = 32 MB
        Run time         = 60 seconds
        Snooze %         = 0 percent
----> Running test with block Size=4096 (4KB) ....
Proc - <-----Disk IO----> | <-----Throughput------> RunTime
 Num -     TOTAL   IO/sec |    MB/sec       KB/sec  Seconds
   1 -   2201452  36697.7 |    143.35    146790.72  59.99
   2 -   2453249  40895.5 |    159.75    163582.19  59.99
   3 -   2463426  41057.6 |    160.38    164230.38  60.00
   4 -   2201846  36697.4 |    143.35    146789.41  60.00
TOTALS   9319973 155348.2 |    606.83    621392.69
- Seqential procs=  4 read=  0% bs=  4KB
#

上記の結果から次のことが分かります。

 60秒間のI/O回数      → 9319973回
 1秒あたりのI/O回数    → 155348回(IOPS)
 1秒あたりのI/Oサイズ   → 606MB

 

I/Oテスト実施 (Random I/O編)

SequentialでのI/O性能と同じく、RandomdでのI/Oも測定していきます。
​テストシナリオは、Sequentialの時と同じ条件で4つのパターンに分けてテストしてみました。

I/Oテストのシナリオ①  Read 100% Write 0%

項目 設定値 オプション
I/O方式 Random -R
I/Oファイル /test/testfile1、/test/testfile2、/test/testfile3、/test/testfile4 -f /test/testfile1:/test/testfile2:/test/testfile3:/test/testfile4
Read (%) 100% -r 100
Blockサイズ 4096byte (Default) -b 4K
I/Oサイズ 32MB (Default) -s 32M
I/O時間 60秒 -t 60

コマンド実行結果

# ndisk64 -f /test/test1.dat:/test/test2.dat:/test/test3.dat:/test/test4.dat -R -r 100 -M 4 -b 4K -s 32M -t 60
Command: ndisk64 -f /test/test1.dat /test/test2.dat /test/test3.dat /test/test4.dat -R -r 100 -M 4 -b 4K -s 32M -t 60
        Synchronous Disk test (regular read/write)
        No. of processes = 4
        I/O type         = Random
        Block size       = 4096
        Read-Write       = Read Only
        Sync type: none  = just close the file
        Number of files  = 4
        File size        = 33554432 bytes = 32768 KB = 32 MB
        Run time         = 60 seconds
        Snooze %         = 0 percent
----> Running test with block Size=4096 (4KB) ....
Proc - <-----Disk IO----> | <-----Throughput------> RunTime
 Num -     TOTAL   IO/sec |    MB/sec       KB/sec  Seconds
   1 -   7574117 126236.6 |    493.11    504946.30  60.00
   2 -   7500697 125012.3 |    488.33    500049.25  60.00
   3 -   7434081 123901.7 |    483.99    495606.90  60.00
   4 -   7429748 123829.4 |    483.71    495317.80  60.00
TOTALS  29938643 498980.1 |   1949.14   1995920.25
- Random procs=  4 read=100% bs=  4KB
#

上記の結果から次のことが分かります。

 60秒間のI/O回数      → 29938643回
 1秒あたりのI/O回数    → 498980回(IOPS)
 1秒あたりのI/Oサイズ   → 1949MB

 

I/Oテストのシナリオ②  Read 80% Write 20%

項目 設定値 オプション
I/O方式 Random -R
I/Oファイル /test/testfile1、/test/testfile2、/test/testfile3、/test/testfile4 -f /test/testfile1:/test/testfile2:/test/testfile3:/test/testfile4
Read (%) 80% (Write:20%) -r 80
Blockサイズ 4096byte (Default) -b 4K
I/Oサイズ 32MB (Default) -s 32M
I/O時間 60秒 -t 60

コマンド実行結果

# ndisk64 -f /test/test1.dat:/test/test2.dat:/test/test3.dat:/test/test4.dat -R -r 80 -M 4 -b 4K -s 32M -t 60
Command: ndisk64 -f /test/test1.dat /test/test2.dat /test/test3.dat /test/test4.dat -R -r 80 -M 4 -b 4K -s 32M -t 60
        Synchronous Disk test (regular read/write)
        No. of processes = 4
        I/O type         = Random
        Block size       = 4096
        Read-WriteRatio: 80:20 = read mostly
        Sync type: none  = just close the file
        Number of files  = 4
        File size        = 33554432 bytes = 32768 KB = 32 MB
        Run time         = 60 seconds
        Snooze %         = 0 percent
----> Running test with block Size=4096 (4KB) ....
Proc - <-----Disk IO----> | <-----Throughput------> RunTime
 Num -     TOTAL   IO/sec |    MB/sec       KB/sec  Seconds
   1 -   6225778 103763.1 |    405.32    415052.57  60.00
   2 -   6263936 104399.5 |    407.81    417598.00  60.00
   3 -   6349020 105817.1 |    413.35    423268.59  60.00
   4 -   6331845 105531.1 |    412.23    422124.31  60.00
TOTALS  25170579 419510.9 |   1638.71   1678043.47
- Random procs=  4 read= 80% bs=  4KB
#

上記の結果から次のことが分かります。

 60秒間のI/O回数      → 25170579回
 1秒あたりのI/O回数    → 419510回(IOPS)
 1秒あたりのI/Oサイズ   → 1638MB

 

I/Oテストのシナリオ③  Read 50% Write 50%

項目 設定値 オプション
I/O方式 Random -R
I/Oファイル /test/testfile1、/test/testfile2、/test/testfile3、/test/testfile4 -f /test/testfile1:/test/testfile2:/test/testfile3:/test/testfile4
Read (%) 50% (Write:50%) -r 50
Blockサイズ 4096byte (Default) -b 4K
I/Oサイズ 32MB (Default) -s 32M
I/O時間 60秒 -t 60

コマンド実行結果

# ndisk64 -f /test/test1.dat:/test/test2.dat:/test/test3.dat:/test/test4.dat -R -r 50 -M 4 -b 4K -s 32M -t 60
Command: ndisk64 -f /test/test1.dat /test/test2.dat /test/test3.dat /test/test4.dat -R -r 50 -M 4 -b 4K -s 32M -t 60
        Synchronous Disk test (regular read/write)
        No. of processes = 4
        I/O type         = Random
        Block size       = 4096
        Read-Write       = Equal read and write
        Sync type: none  = just close the file
        Number of files  = 4
        File size        = 33554432 bytes = 32768 KB = 32 MB
        Run time         = 60 seconds
        Snooze %         = 0 percent
----> Running test with block Size=4096 (4KB) ....
Proc - <-----Disk IO----> | <-----Throughput------> RunTime
 Num -     TOTAL   IO/sec |    MB/sec       KB/sec  Seconds
   1 -   4645693  77428.7 |    302.46    309714.61  60.00
   2 -   4623314  77055.6 |    301.00    308222.28  60.00
   3 -   4658005  77633.4 |    303.26    310533.69  60.00
   4 -   4649225  77487.1 |    302.68    309948.38  60.00
TOTALS  18576237 309604.7 |   1209.39   1238418.97
- Random procs=  4 read= 50% bs=  4KB
#

上記の結果から次のことが分かります。

 60秒間のI/O回数      → 18576237回
 1秒あたりのI/O回数    → 309604回(IOPS)
 1秒あたりのI/Oサイズ   → 1209MB

 

I/Oテストのシナリオ④  Read 0% Write 100%

項目 設定値 オプション
I/O方式 Random -R
I/Oファイル /test/testfile1、/test/testfile2、/test/testfile3、/test/testfile4 -f /test/testfile1:/test/testfile2:/test/testfile3:/test/testfile4
Read (%) 0% (Write:100%) -r 100
Blockサイズ 4096byte (Default) -b 4K
I/Oサイズ 32MB (Default) -s 32M
I/O時間 60秒 -t 60

コマンド実行結果

# ndisk64 -f /test/test1.dat:/test/test2.dat:/test/test3.dat:/test/test4.dat -R -r 0 -M 4 -b 4K -s 32M -t 60
Command: ndisk64 -f /test/test1.dat /test/test2.dat /test/test3.dat /test/test4.dat -R -r 0 -M 4 -b 4K -s 32M -t 60
        Synchronous Disk test (regular read/write)
        No. of processes = 4
        I/O type         = Random
        Block size       = 4096
        Read-Write       = Write Only
        Sync type: none  = just close the file
        Number of files  = 4
        File size        = 33554432 bytes = 32768 KB = 32 MB
        Run time         = 60 seconds
        Snooze %         = 0 percent
----> Running test with block Size=4096 (4KB) ....
Proc - <-----Disk IO----> | <-----Throughput------> RunTime
 Num -     TOTAL   IO/sec |    MB/sec       KB/sec  Seconds
   1 -   3578075  59643.8 |    232.98    238575.26  59.99
   2 -   3563705  59395.5 |    232.01    237581.83  60.00
   3 -   3578287  59657.2 |    233.04    238628.69  59.98
   4 -   3573056  59551.1 |    232.62    238204.20  60.00
TOTALS  14293123 238247.5 |    930.65    952989.97
- Random procs=  4 read=  0% bs=  4KB
#

上記の結果から次のことが分かります。

 60秒間のI/O回数      → 14293123回
 1秒あたりのI/O回数    → 238247回(IOPS)
 1秒あたりのI/Oサイズ   → 930MB

 

ndisk64のHELP表示

ndisk64のヘルプは次の内容です。パラメータの指定のやり方によって様々なテストが実施できます。素晴らしいツールですね。

ndisk64 -S          Sequential Disk I/O test (file or raw device)
        -R          Random    Disk I/O test (file or raw device)

        -t <secs>   Timed duration of the test in seconds (default 5)

        -f <file>   use "File" for disk I/O (can be a file or raw device)
        -f <list>   list of filenames to use (max 16) [separators :,+]
                        example: -f f1,f2,f3  or -f /dev/rlv1:/dev/rlv2
        -F <file>   <file> contains list of filenames, one per line (upto 2047 files)
        -M <num>    Multiple processes used to generate I/O
        -s <size>   file Size, use with K, M or G (mandatory for raw device)
                        examples: -s 1024K   or   -s 256M   or   -s 4G
                        The default is 32MB
        -r <read%> Read percent min=0,max=100 (default 80 =80%read+20%write)
                        example -r 50 (-r 0 = write only, -r 100 = read only)
        -b <size>   Block size, use with K, M or G (default 4KB)
        -O <size>   first byte offset use with K, M or G (times by proc#)
        -b <list>   or use a colon separated list of block sizes (31 max sizes)
                        example -b 512:1k:2K:8k:1M:2m
        -q          flush file to disk after each write (fsync())
        -Q          flush file to disk via open() O_SYNC flag
        -i <MB>     Use shared memory for I/O MB is the size(max=256 MB)
        -v          Verbose mode = gives extra stats but slower
        -l          Logging disk I/O mode = see *.log but slower still
        -o "cmd"  Other command - pretend to be this other cmd when running
                        Must be the last option on the line
        -K num      Shared memory key (default 0xdeadbeef) allows multiple programs
                    Note: if you kill ndisk,  you may have a shared memory
                    segment left over. Use ipcs and then ipcrm to remove it.
        -p          Pure = each Sequential thread does read or write not both
        -P file     Pure with separate file for writers
        -C          Open files in Concurrent I/O mode O_CIO
        -D          Open files in Direct I/O mode O_DIRECT
        -z percent  Snooze percent - time spent sleeping (default 0)

Asynchronous I/O tests (AIO) This now uses POSIX threads and  Async I/O API
        -A         switch on Async I/O use: -S/-R, -f/-F and -r, -M, -s, -b, -C, -D to determine I/O types
                (JFS file or raw device)
        -x <min>   minimum outstanding Async I/Os (default=1, min=1 and min<max)
        -X <max>   maximum outstanding Async I/Os (default=8, max=1024)
        see above -f <file>  -s <size>   -R <read%>  -b <size>

 

 

 

 

 

.


サブコンテンツ

このページの先頭へ