2013年1月22日火曜日

RAID-Zの読み込みのIOPSはなぜ低いのか

このエントリーをはてなブックマークに追加
現在ftp.jaist.ac.jpはストレージの性能不足に悩まされています。ピーク時にストレージのI/Oが飽和して、スループットがやや低くなることがあります。ストレージは11本のHDDで組んだRAID-Z2を2組たばねて構成しています。読み込みのIOPSは、HDDが22本あるのに約600しか出ません。HDDのIOPSは約180出ているので、全体のIOPSはHDDの約3.6本分になります。

これはあくまでもキャッシュなしの性能です。読み込みのI/Oの98%はARCかL2ARCのいずれかにヒットするので、キャッシュ込みのIOPSは約30,000となります。最近はこれでも足りなくなっているので、死蔵しているメモリが192GiBのサーバーに移行して、ARCを増やして性能を改善する予定です。

ストレージの読み込みのIOPSが低いのは、RAID-Z2を11本のHDDで組んでいるからです。性能よりも容量を重視してあえてそうしてあります。以前RAID-Zを組むHDDの数を増やしても読み込みのIOPSが増えないことを説明しましたが、今回はデータをもとにこれを説明します。

以下に示したのは、RAID-Z2の1秒間の読み込みのI/Oの回数をサイズごとに集計したものです。ZFSのブロックサイズは、セクターサイズの512バイト(AFTなら4096バイト)から128Kiバイトまで可変なのでI/Oのサイズが変化します。ftp.jaist.ac.jpは大きなファイルが多いので一番多いのは128Kiバイトのブロックです
RAID-Z2sizecount
20481
61441
1018881
30722
56322
87042
537602
35843
51204
5127
81927
46089
131072204
total245
以下に示したのは、HDDの1秒間の読み込みのI/Oの回数をサイズごとに集計したものです。
HDDsizecount
15361
51201
76801
117761
435201
30722
20484
56325
732165
25606
588806
40967
291847
112648
61449
583689
102481
512212
14848795
14336990
total2151
RAID-Z2のパリティを除くHDDの数9で128Kiバイトを割って、セクターサイズの512で丸めたのが、一番多いブロックの14336バイトです。二番目に多い14848バイトはそれに512を加えたものです。合計を見るとRAID-Z2の約9倍のI/Oが行われているのがわかります。

以前に説明したとおり、一つのブロックのRAID-Zへの書き込みは、分割したブロックがセクターサイズより小さくならない限り、すべてのHDDに分割されます。読み込むときにはパリティを除いたすべてのHDDを読む必要があります。そのためHDDの数を増やせばその分多くのI/Oが発生します。HDDの数を増やしてもRAID-ZのIOPSが増えないのはそのためです。

普通のRAIDの場合はストライプサイズをI/Oのブロックサイズと合わせれば、一つの読み込みに対してHDDへのI/Oは一つしか発生しません。これがRAID-Zととの大きな違いです。

0 件のコメント:

コメントを投稿