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にバッファリングされて非同期で書き戻されるような動作を見せるため、カーネル等の理解を深めたい。