CacheCade の効果
はじめに
CacheCade とは
LSI社のRAIDカード MegaRAID のオプショナルライセンスとして提供される、SSDをHDDアレイのキャッシュとして用いる技術である。データをキャッシュすることでIOPSの向上とレイテンシ減少の効果があるとうたっている。
When IT pushes hard disk drives (HDD) arrays to reach their I/O potential, data “hot spots” become inevitable. Utilizing a small solid state drive (SSD) investment as a front-side flash cache for the much larger disk array, LSI® MegaRAID® CacheCade® Pro 2.0 software dynamically keeps the “hottest” data in flash memory. This can dramatically improve read/write speeds and drop latency.
http://www.lsi.com/products/raid-controllers/pages/megaraid-cachecade-pro-software.aspx
このエントリの目標
CacheCadeを実際に用いた感想やベンチマーク結果から、その効果について定性的に述べる。
ベンチマーク環境
以下のような構成のマシンで行った。
- Express 5800 R120e-2M
- Xeon E5-2630 v2 @ 2.6GHz
- 64GB RAM
- MegaRAID SAS 9272-8i (CacheCade License)
- 2.5" 500GB 7200rpm (x4) + Crucial M5 240GB
- CentOS 6.5, Kernel 2.6.32-431.17.1.el6.x86_64
RAIDカードの各設定項目は次の値の通りである。
- RAID5
- Min Stripe Size = 8k
- Max Stripe Size = 64k
- No Read Ahead
- Write Through / Write Back (2条件を比較)
ベンチマークは flexible I/O tester (fio) を用いた。使用したシナリオは次の2つである。
1. random-read
[random-read] rw=randread bs=4k size=1000m directory=/home/hoge/test/ numjobs=1 invalidate=1
2. random-write
[random-write] rw=randwrite bs=4k size=1000m directory=/home/ttajima/test/ numjobs=10 invalidate=1
結果と所見
random-read
キャッシュされていない場合
書き込み直後に読み出し等でキャッシュされていない場合は、以下のような結果になる。
平均IOPSは2k弱であるが、読み込み開始時は400程度で徐々に上がっていった結果である。
これは読み出し命令の4k以外の周辺も同時に読み込まれ、キャッシュされるので測定途中からキャッシュヒットするためと思われる。
read : io=1000.0MB, bw=7632.6KB/s, iops=1908, runt=134162msec clat (usec): min=49, max=64177, avg=516.73, stdev=1465.77 lat (usec): min=49, max=64178, avg=517.45, stdev=1465.73 clat percentiles (usec): | 1.00th=[ 159], 5.00th=[ 173], 10.00th=[ 177], 20.00th=[ 187], | 30.00th=[ 189], 40.00th=[ 191], 50.00th=[ 193], 60.00th=[ 201], | 70.00th=[ 205], 80.00th=[ 207], 90.00th=[ 262], 95.00th=[ 2448], | 99.00th=[ 8768], 99.50th=[ 9536], 99.90th=[10304], 99.95th=[10560], | 99.99th=[15808] bw (KB /s): min= 1013, max=23656, per=99.69%, avg=7608.00, stdev=7836.09 lat (usec) : 50=0.01%, 100=0.17%, 250=89.52%, 500=4.30%, 750=0.42% lat (usec) : 1000=0.02% lat (msec) : 2=0.29%, 4=1.37%, 10=3.65%, 20=0.26%, 50=0.01% lat (msec) : 100=0.01%
キャッシュされている場合
一方で上記の計測を行った後など、ファイル全域にわたってキャッシュされている場合は高IOPSと低レイテンシが測定された。
アクセスランプもSSDのみ点滅し、キャッシュヒット率は極めて高いと思われる。
read : io=1000.0MB, bw=18872KB/s, iops=4718, runt= 54260msec clat (usec): min=101, max=615, avg=203.22, stdev=16.91 lat (usec): min=101, max=616, avg=203.97, stdev=16.83 clat percentiles (usec): | 1.00th=[ 167], 5.00th=[ 181], 10.00th=[ 183], 20.00th=[ 195], | 30.00th=[ 197], 40.00th=[ 197], 50.00th=[ 199], 60.00th=[ 209], | 70.00th=[ 211], 80.00th=[ 215], 90.00th=[ 225], 95.00th=[ 229], | 99.00th=[ 241], 99.50th=[ 245], 99.90th=[ 255], 99.95th=[ 258], | 99.99th=[ 524] bw (KB /s): min=12808, max=19712, per=99.99%, avg=18870.67, stdev=617.92 lat (usec) : 250=99.74%, 500=0.24%, 750=0.01%
random-write
write through
書き込みは直接ディスクアレイに書き込む方式である。この場合は大変時間がかかったためジョブ数が1であることに注意されたい。
計測IOPSは639だが、計測中のiostatでは400程度が関の山と感じられた。
write: io=1000.0MB, bw=2556.7KB/s, iops=639, runt=400520msec clat (usec): min=2, max=8050, avg= 3.22, stdev=15.92 lat (usec): min=2, max=8050, avg= 3.32, stdev=15.92 clat percentiles (usec): | 1.00th=[ 2], 5.00th=[ 2], 10.00th=[ 3], 20.00th=[ 3], | 30.00th=[ 3], 40.00th=[ 3], 50.00th=[ 3], 60.00th=[ 3], | 70.00th=[ 3], 80.00th=[ 3], 90.00th=[ 4], 95.00th=[ 5], | 99.00th=[ 6], 99.50th=[ 7], 99.90th=[ 10], 99.95th=[ 13], | 99.99th=[ 17] bw (KB /s): min= 0, max=974808, per=100.00%, avg=640821.33, stdev=555133.58 lat (usec) : 4=85.09%, 10=14.81%, 20=0.10%, 50=0.01%, 100=0.01% lat (msec) : 10=0.01%
write back
OSのキャッシュのせいか、一瞬でジョブが終了してしまい正確な測定方法がわからなかった。
OSからのライトバック中にiostatで観察すると、コンスタントに1k IOPSの性能が出ていたように見えた。
write: io=10000MB, bw=3352.4MB/s, iops=858196, runt= 2983msec clat (usec): min=2, max=202885, avg= 6.26, stdev=126.84 lat (usec): min=2, max=202886, avg= 6.37, stdev=126.84 clat percentiles (usec): | 1.00th=[ 3], 5.00th=[ 3], 10.00th=[ 3], 20.00th=[ 4], | 30.00th=[ 4], 40.00th=[ 5], 50.00th=[ 6], 60.00th=[ 6], | 70.00th=[ 7], 80.00th=[ 8], 90.00th=[ 9], 95.00th=[ 10], | 99.00th=[ 17], 99.50th=[ 23], 99.90th=[ 32], 99.95th=[ 35], | 99.99th=[ 48] bw (KB /s): min= 5, max=780920, per=12.01%, avg=412297.88, stdev=224646.88 lat (usec) : 4=11.13%, 10=81.22%, 20=6.88%, 50=0.76%, 100=0.01% lat (usec) : 250=0.01%, 1000=0.01% lat (msec) : 250=0.01%
おわりに
CacheCadeのread特性は静的なコンテンツを配信する場合に役立ちそうだと思われる。
つまりキャッシュサーバーのキャッシュディスクに使用しライトバックを控える運用をすれば、HDDのコストパフォーマンスを活かしつつ要件を満たす性能が得られると思われる。
また、書き込みの挙動はOSにバッファリングされて非同期で書き戻されるような動作を見せるため、カーネル等の理解を深めたい。