クラウドやサーバ会社を選択する場合に、カタログスペックと値段だけでなく、実際にベンチマークを取って性能比較すると良いです。秒間にどれだけ入出力できるか、IOPSなどを見てみましょう。お仕事はデータや数字で語れた方がかっちょいい。
IOPSってなにもの?
IOPS(Input Output Per Second)はディスクが1秒間に処理できる、入出力の回数です。これが多ければ性能の良いディスクと言えます。I/Oは入出力。
クラウド側の障害時にも役立つ
また、運用している中でクラウド基盤の影響で非常に重くなったりする場合があります。サーバ会社のサポートに非常に遅いと相談した場合、『具体的なデータはありますか?』と言われることがあります。そんな時は通常状態のベンチマークのデータと、重くなっている現在のデータを提出するとスムーズに対応して貰えるかもしれません。
fio編
理研のrpmを使ってインストールします。
1 |
# cd /usr/local/src/ && wget http://ftp.riken.jp/Linux/fedora/epel/7/x86_64/f/fio-2.2.8-2.el7.x86_64.rpm |
1 |
# yum install fio-2.2.8-2.el7.x86_64.rpm |
A社 HDDのマシン 4CPU 4GB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# fio -filename=/tmp/test2g -direct=1 -rw=read -bs=16k -size=2G -numjobs=64 -runtime=60 -group_reporting -name=file1 file1: (g=0): rw=read, bs=16K-16K/16K-16K/16K-16K, ioengine=sync, iodepth=1 ... fio-2.2.8 Starting 64 processes Jobs: 64 (f=64): [R(64)] [100.0% done] [155.7MB/0KB/0KB /s] [9960/0/0 iops] [eta 00m:00s] file1: (groupid=0, jobs=64): err= 0: pid=15406: Thu Jul 27 11:45:42 2017 read : io=9305.0MB, bw=158766KB/s, iops=9922, runt= 60015msec clat (usec): min=138, max=102028, avg=6445.47, stdev=19972.74 lat (usec): min=139, max=102028, avg=6445.98, stdev=19972.73 clat percentiles (usec): | 1.00th=[ 510], 5.00th=[ 692], 10.00th=[ 788], 20.00th=[ 892], | 30.00th=[ 956], 40.00th=[ 1020], 50.00th=[ 1096], 60.00th=[ 1160], | 70.00th=[ 1224], 80.00th=[ 1368], 90.00th=[ 2832], 95.00th=[80384], | 99.00th=[85504], 99.50th=[87552], 99.90th=[91648], 99.95th=[94720], | 99.99th=[98816] bw (KB /s): min= 1600, max= 3360, per=1.57%, avg=2487.20, stdev=188.20 lat (usec) : 250=0.01%, 500=0.86%, 750=6.81%, 1000=29.57% lat (msec) : 2=50.78%, 4=3.80%, 10=1.68%, 20=0.06%, 100=6.45% lat (msec) : 250=0.01% cpu : usr=0.08%, sys=0.31%, ctx=595645, majf=0, minf=2638 IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% issued : total=r=595520/w=0/d=0, short=r=0/w=0/d=0, drop=r=0/w=0/d=0 latency : target=0, window=0, percentile=100.00%, depth=1 Run status group 0 (all jobs): READ: io=9305.0MB, aggrb=158765KB/s, minb=158765KB/s, maxb=158765KB/s, mint=60015msec, maxt=60015msec Disk stats (read/write): vda: ios=600000/0, merge=0/0, ticks=3756580/0, in_queue=3979068, util=100.00% |
IOPS 秒間のI/O性能
1 |
read : io=9305.0MB, bw=158766KB/s, iops=9922, runt= 60015msec |
16KBの入出力を秒間9,922回できる。
スループット 帯域幅:時間あたりの仕事量。単位時間に運んだ総量
1 |
READ: io=9305.0MB, aggrb=158765KB/s, minb=158765KB/s, maxb=158765KB/s, mint=60015msec, maxt=60015msec |
aggrb=総合帯域=158,765KB/s
clat(completeion latency):データを要求してから、実際にデータが送られてくるまでの時間。遅延時間。これは短い方が性能が良い。
1 |
clat (usec): min=138, max=102028, avg=6445.47, stdev=19972.74 |
avg=平均=6445.47=6.44547ms
B社 SSDのマシン 4CPU4GB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# fio -filename=/tmp/test2g -direct=1 -rw=read -bs=16k -size=2G -numjobs=64 -runtime=60 -group_reporting -name=file1 file1: (g=0): rw=read, bs=16K-16K/16K-16K/16K-16K, ioengine=sync, iodepth=1 ... fio-2.2.8 Starting 64 processes Jobs: 64 (f=64): [R(64)] [100.0% done] [293.7MB/0KB/0KB /s] [18.8K/0/0 iops] [eta 00m:00s] file1: (groupid=0, jobs=64): err= 0: pid=7241: Thu Jul 27 11:45:46 2017 read : io=18311MB, bw=312485KB/s, iops=19530, runt= 60006msec clat (usec): min=93, max=172107, avg=3274.49, stdev=7514.37 lat (usec): min=93, max=172107, avg=3274.83, stdev=7514.36 clat percentiles (usec): | 1.00th=[ 151], 5.00th=[ 165], 10.00th=[ 171], 20.00th=[ 181], | 30.00th=[ 187], 40.00th=[ 195], 50.00th=[ 203], 60.00th=[ 213], | 70.00th=[ 225], 80.00th=[ 251], 90.00th=[18560], 95.00th=[21120], | 99.00th=[25472], 99.50th=[27520], 99.90th=[33536], 99.95th=[44800], | 99.99th=[116224] bw (KB /s): min= 1856, max=12000, per=1.56%, avg=4887.30, stdev=1030.08 lat (usec) : 100=0.01%, 250=79.65%, 500=4.38%, 750=0.37%, 1000=0.04% lat (msec) : 2=0.03%, 4=0.02%, 10=0.18%, 20=8.35%, 50=6.93% lat (msec) : 100=0.03%, 250=0.02% cpu : usr=0.11%, sys=0.40%, ctx=1172260, majf=0, minf=2636 IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% issued : total=r=1171935/w=0/d=0, short=r=0/w=0/d=0, drop=r=0/w=0/d=0 latency : target=0, window=0, percentile=100.00%, depth=1 Run status group 0 (all jobs): READ: io=18311MB, aggrb=312484KB/s, minb=312484KB/s, maxb=312484KB/s, mint=60006msec, maxt=60006msec Disk stats (read/write): vda: ios=1170858/408, merge=0/207, ticks=3814379/9757, in_queue=3824832, util=99.87% |
IOPS 秒間のI/O性能
1 |
read : io=18311MB, bw=312485KB/s, iops=19530, runt= 60006msec |
16KBの入出力を秒間19,530回できる。
スループット 帯域幅:時間あたりの仕事量。単位時間に運んだ総量
1 |
READ: io=18311MB, aggrb=312484KB/s, minb=312484KB/s, maxb=312484KB/s, mint=60006msec, maxt=60006msec |
aggrb=総合帯域=312,484KB/s
clat(completeion latency):データを要求してから、実際にデータが送られてくるまでの時間。遅延時間。これは短い方が性能が良い。
1 |
clat (usec): min=93, max=172107, avg=3274.49, stdev=7514.37 |
avg=平均=3274.49=3.27449ms
計測値 まとめ
IOPS | aggrb スループット | clat avg(平均レイテンシ) | |
A社HDD | 9,922 | 158,765KB/s | 6.44547ms |
B社SSD | 19,530 | 312,484KB/s | 3.27449ms |
SSDは優秀。
Bonnie++(ボニプラ)編
fio以外にもツールはあって、ベンチマークはいくつかツールを組み合わせてベンチマークを行うと良い按配。理研さんにまたお世話になります。
1 |
# cd /usr/local/src/ && wget http://ftp.riken.jp/Linux/dag/redhat/el7/en/x86_64/rpmforge/RPMS/bonnie++-1.96-1.el7.rf.x86_64.rpm |
1 |
# yum install bonnie++-1.96-1.el7.rf.x86_64.rpm |
S社 HDDのマシン 4CPU 4GB
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# bonnie++ -u 一般ユーザ名 -d /tmp/ -n 256:4096:512:16 -s 2048 -r 1024 Version 1.96 ------Sequential Output------ --Sequential Input- --Random- Concurrency 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP www.xxxxx.co.jp 2G 1486 99 192918 38 196113 29 3362 99 1207695 99 11792 88 Latency 8041us 23813us 11306us 3896us 174us 10846us Version 1.96 ------Sequential Create------ --------Random Create-------- www.xxxxx.co.jp -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete-- files:max:min /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP 256:4096:512/16 2264 10 69831 97 27726 97 2257 10 18016 27 1470 11 Latency 97190us 6945us 6597us 93536us 896ms 764ms 1.96,1.96,www.xxxxx.co.jp,1,1501103519,2G,,1486,99,192918,38,196113,29,3362,99,1207695,99,11792,88,256,4096,512,,16,2264,10,69831,97,27726,97,2257,10,18016,27,1470,11,8041us,23813us,11306us,3896us,174us,10846us,97190us,6945us,6597us,93536us,896ms,764ms |
%CPは実行中のCPU使用率
C社 SSDのマシン 4CPU 4GB
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# bonnie++ -u 一般ユーザ名 -d /tmp/ Version 1.96 ------Sequential Output------ --Sequential Input- --Random- Concurrency 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP www.sys-guard.co 8G 824 99 372738 35 336094 32 3962 99 626234 26 5298 90 Latency 10697us 171ms 60972us 4985us 101ms 17221us Version 1.96 ------Sequential Create------ --------Random Create-------- www.sys-guard.com -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete-- files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP 16 +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++ Latency 2639us 575us 648us 174us 183us 844us 1.96,1.96,www.sys-guard.com,1,1501216791,8G,,824,99,372738,35,336094,32,3962,99,626234,26,5298,90,16,,,,,+++++,+++,+++++,+++,+++++,+++,+++++,+++,+++++,+++,+++++,+++,10697us,171ms,60972us,4985us,101ms,17221us,2639us,575us,648us,174us,183us,844us |
%CPは実行中のCPU使用率
HTML出力もできる!
bon_csv2htmlコマンドにパイプで繋げるとHTML出力も可能です。見やすいね。
1 |
# bonnie++ -u 一般ユーザ名 -d /tmp/ -n 256:4096:512:16 -s 2048 -r 1024 | bon_csv2html > bonnie_result.html |
https://sys-guard.com/demo/bonnie_result.html
色々なツールがあるので、コストと実際の性能を実測して、要件にあったクラウドサーバを選択しましょう(ㆁᴗㆁ✿)
お疲れ様です。