Power Systems Virtual Serverのストレージには、2つのTierがあり、1GBあたりのIOPSが設定されています。ボリュームのサイズが大きくなるほどIOPS性能も上がっていく、という特徴があります。
https://cloud.ibm.com/docs/power-iaas?topic=power-iaas-about-virtual-server#storage-tiers
Tier 1 -> 10 IOPS/GB
Tier 3 -> 3 IOPS/GB
実体としては、FS9000シリーズがファイバー接続されているというのは、こちらのハードウェア仕様を見ることで分かります。
https://cloud.ibm.com/docs/power-iaas?topic=power-iaas-about-virtual-server#hardware-specifications
仕様通りの性能が出るかどうか、ndiskで測定してみました。結論を先に書くと、ほぼ、仕様から想定される通りの性能が出ました。
※保証値ではないため、環境やI/Oの特性により結果が異なる可能性があります。
環境
Power VS上の下記の環境で測定しました。
AIX 0.25core 2GBメモリ(Tier1)に、2TBのボリュームを1つと、100GBのボリュームを1つ、接続。
ツールを入手
今回は、nstressツールに含まれるndisk64を使います。
nstressツールは下記からダウンロードできます。ダウンロードしたtarを展開すると、ndisk64が入っており、そのまま実行できます。
https://www.ibm.com/support/pages/stress-test-your-aix-or-linux-server-nstress
ツールの実行方法は、下記を参考にしました。
https://it-memo.info/?p=1851
テスト用のファイルも上記に倣い、1GBのファイルを4つ作っています。
# ls -la /data/test
total 8388608
drwxr-xr-x 2 root system 256 Oct 16 22:11 .
drwxr-xr-x 4 root system 256 Oct 16 22:08 ..
-rw-r--r-- 1 root system 1073741824 Oct 21 23:46 testfile1
-rw-r--r-- 1 root system 1073741824 Oct 21 23:46 testfile2
-rw-r--r-- 1 root system 1073741824 Oct 21 23:46 testfile3
-rw-r--r-- 1 root system 1073741824 Oct 21 23:46 testfile4
#
また、様々なパラメータが指定できますが、ブロックサイズ4KB、read/writeは50:50で測定しました。
2TBボリューム
まず、2TBのボリュームでテストします。
Tier 1(10 IOPS/GB)のストレージで2,000 GBなので、20,000 IOPSが期待される性能です。
IO/secの列のTOTALSの行で、ほぼ仕様通りの20030.0 IOPSだった事が分かります。
# ./ndisk64 -f /data/test/testfile1:/data/test/testfile2:/data/test/testfile3:/data/test/testfile4 -R -r 50 -M 4 -b 4K -s 32M -t 60 -D
Command: ./ndisk64 -f /data/test/testfile1 /data/test/testfile2 /data/test/testfile3 /data/test/testfile4 -R -r 50 -M 4 -b 4K -s 32M -t 60 -D
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
File open() mode = Direct I/O mode - O_DIRECT
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) ....
start randomise - bs=4096 sizeof(long)=4
stop randomise
start randomise - bs=4096 sizeof(long)=4
stop randomise
start randomise - bs=4096 sizeof(long)=4
stop randomise
start randomise - bs=4096 sizeof(long)=4
stop randomise
Proc - <-----Disk IO----> | <-----Throughput------> RunTime
Num - TOTAL IO/sec | MB/sec KB/sec Seconds
1 - 300800 5013.3 | 19.58 20053.28 60.00
2 - 300430 5007.2 | 19.56 20028.94 60.00
3 - 300590 5009.8 | 19.57 20039.33 60.00
4 - 299978 4999.6 | 19.53 19998.40 60.00
TOTALS 1201798 20030.0 | 78.24 80119.94
- Random procs= 4 read= 50% bs= 4KB
#
シーケンシャルも20137.1 IOPSと、仕様から期待される通りの性能が出ています。
# ./ndisk64 -f /data/test/testfile1:/data/test/testfile2:/data/test/testfile3:/data/test/testfile4 -S -r 50 -M 4 -b 4K -s 32M -t 60 -D
Command: ./ndisk64 -f /data/test/testfile1 /data/test/testfile2 /data/test/testfile3 /data/test/testfile4 -S -r 50 -M 4 -b 4K -s 32M -t 60 -D
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
File open() mode = Direct I/O mode - O_DIRECT
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) ....
start randomise - bs=4096 sizeof(long)=4
stop randomise
start randomise - bs=4096 sizeof(long)=4
stop randomise
start randomise - bs=4096 sizeof(long)=4
stop randomise
start randomise - bs=4096 sizeof(long)=4
stop randomise
Proc - <-----Disk IO----> | <-----Throughput------> RunTime
Num - TOTAL IO/sec | MB/sec KB/sec Seconds
1 - 301831 5030.5 | 19.65 20122.13 60.00
2 - 302455 5041.0 | 19.69 20163.90 60.00
3 - 301638 5027.3 | 19.64 20109.21 60.00
4 - 302295 5038.3 | 19.68 20153.04 60.00
TOTALS 1208219 20137.1 | 78.66 80548.28
- Seqential procs= 4 read= 50% bs= 4KB
#
なお、プロセス数が少ないと、別の箇所がネックになるようで、ディスク性能をフルには使えていないようでした。
# ./ndisk64 -f /data/test/testfile1 -R -r 50 -M 1 -b 4K -s 32M -t 60 -D
Command: ./ndisk64 -f /data/test/testfile1 -R -r 50 -M 1 -b 4K -s 32M -t 60 -D
Synchronous Disk test (regular read/write)
No. of processes = 1
I/O type = Random
Block size = 4096
Read-Write = Equal read and write
Sync type: none = just close the file
File open() mode = Direct I/O mode - O_DIRECT
Number of files = 1
File size = 33554432 bytes = 32768 KB = 32 MB
Run time = 60 seconds
Snooze % = 0 percent
----> Running test with block Size=4096 (4KB) .
start randomise - bs=4096 sizeof(long)=4
stop randomise
Proc - <-----Disk IO----> | <-----Throughput------> RunTime
Num - TOTAL IO/sec | MB/sec KB/sec Seconds
1 - 322749 5379.2 | 21.01 21516.62 60.00
#
# ./ndisk64 -f /data/test/testfile1:/data/test/testfile2 -R -r 50 -M 2 -b 4K -s 32M -t 60 -D
Command: ./ndisk64 -f /data/test/testfile1 /data/test/testfile2 -R -r 50 -M 2 -b 4K -s 32M -t 60 -D
Synchronous Disk test (regular read/write)
No. of processes = 2
I/O type = Random
Block size = 4096
Read-Write = Equal read and write
Sync type: none = just close the file
File open() mode = Direct I/O mode - O_DIRECT
Number of files = 2
File size = 33554432 bytes = 32768 KB = 32 MB
Run time = 60 seconds
Snooze % = 0 percent
----> Running test with block Size=4096 (4KB) ..
start randomise - bs=4096 sizeof(long)=4
stop randomise
start randomise - bs=4096 sizeof(long)=4
stop randomise
Proc - <-----Disk IO----> | <-----Throughput------> RunTime
Num - TOTAL IO/sec | MB/sec KB/sec Seconds
1 - 309330 5155.5 | 20.14 20622.03 60.00
2 - 309387 5156.4 | 20.14 20625.78 60.00
TOTALS 618717 10312.0 | 40.28 41247.81
- Random procs= 2 read= 50% bs= 4KB
#
OSのキャッシュが有効な場合
上記は、ストレージ性能を確認するのが目的だったので、-Dオプションを付けていました。
-Dオプションを付けないとOSのキャッシュを使うようになり、ストレージ自体の性能より高い結果になります。
# ./ndisk64 -f /data/test/testfile1:/data/test/testfile2:/data/test/testfile3:/data/test/testfile4 -R -r 50 -M 4 -b 4K -s 32M -t 60
Command: ./ndisk64 -f /data/test/testfile1 /data/test/testfile2 /data/test/testfile3 /data/test/testfile4 -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) ....
start randomise - bs=4096 sizeof(long)=4
stop randomise
start randomise - bs=4096 sizeof(long)=4
stop randomise
start randomise - bs=4096 sizeof(long)=4
stop randomise
start randomise - bs=4096 sizeof(long)=4
stop randomise
Proc - <-----Disk IO----> | <-----Throughput------> RunTime
Num - TOTAL IO/sec | MB/sec KB/sec Seconds
1 - 9758340 162640.2 | 635.31 650560.86 60.00
2 - 9746163 162438.1 | 634.52 649752.24 60.00
3 - 9209120 153485.9 | 599.55 613943.74 60.00
4 - 9590731 159845.8 | 624.40 639383.02 60.00
TOTALS 38304354 638410.0 | 2493.79 2553639.85
- Random procs= 4 read= 50% bs= 4KB
#
# ./ndisk64 -f /data/test/testfile1:/data/test/testfile2:/data/test/testfile3:/data/test/testfile4 -S -r 50 -M 4 -b 4K -s 32M -t 60
Command: ./ndisk64 -f /data/test/testfile1 /data/test/testfile2 /data/test/testfile3 /data/test/testfile4 -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) ....
start randomise - bs=4096 sizeof(long)=4
stop randomise
start randomise - bs=4096 sizeof(long)=4
stop randomise
start randomise - bs=4096 sizeof(long)=4
stop randomise
start randomise - bs=4096 sizeof(long)=4
stop randomise
Proc - <-----Disk IO----> | <-----Throughput------> RunTime
Num - TOTAL IO/sec | MB/sec KB/sec Seconds
1 - 1187841 19803.1 | 77.36 79212.44 59.98
2 - 1190883 19852.0 | 77.55 79407.87 59.99
3 - 1190368 19842.1 | 77.51 79368.26 59.99
4 - 1112224 18493.8 | 72.24 73975.40 60.14
TOTALS 4681316 77991.0 | 304.65 311963.96
- Seqential procs= 4 read= 50% bs= 4KB
#
100GBボリューム
100GB, Tier1のボリュームは、仕様から想定される通り、ほぼ1,000 IOPSでした。
# /ndisk64 -f /data2/test2/testfile1 -R -r 50 -b 4K -s 32M -t 60 -D
Command: /ndisk64 -f /data2/test2/testfile1 -R -r 50 -b 4K -s 32M -t 60 -D
Synchronous Disk test (regular read/write)
No. of processes = 1
I/O type = Random
Block size = 4096
Read-Write = Equal read and write
Sync type: none = just close the file
File open() mode = Direct I/O mode - O_DIRECT
Number of files = 1
File size = 33554432 bytes = 32768 KB = 32 MB
Run time = 60 seconds
Snooze % = 0 percent
----> Running test with block Size=4096 (4KB) .
start randomise - bs=4096 sizeof(long)=4
stop randomise
Proc - <-----Disk IO----> | <-----Throughput------> RunTime
Num - TOTAL IO/sec | MB/sec KB/sec Seconds
1 - 60951 1015.8 | 3.97 4063.33 60.00
#
# /ndisk64 -f /data2/test2/testfile1 -S -r 50 -b 4K -s 32M -t 60 -D
Command: /ndisk64 -f /data2/test2/testfile1 -S -r 50 -b 4K -s 32M -t 60 -D
Synchronous Disk test (regular read/write)
No. of processes = 1
I/O type = Sequential
Block size = 4096
Read-Write = Equal read and write
Sync type: none = just close the file
File open() mode = Direct I/O mode - O_DIRECT
Number of files = 1
File size = 33554432 bytes = 32768 KB = 32 MB
Run time = 60 seconds
Snooze % = 0 percent
----> Running test with block Size=4096 (4KB) .
start randomise - bs=4096 sizeof(long)=4
stop randomise
Proc - <-----Disk IO----> | <-----Throughput------> RunTime
Num - TOTAL IO/sec | MB/sec KB/sec Seconds
1 - 60952 1015.8 | 3.97 4063.38 60.00
#
以上です。