ラベル hardware の投稿を表示しています。 すべての投稿を表示
ラベル hardware の投稿を表示しています。 すべての投稿を表示

2012年6月13日水曜日

RAID組むとき考えたこと(1)

The new RAID
autor:boboroshi

LSI MegaRAID SAS 9280-8e というイイRAIDカードを使ったので備忘録がてらのメモです。

ぼくはこれまで、ちゃんとしたRAIDカードを多用する感じで仕事してないので、こちらが参考になりました(やっ太郎ブログ

さて、今回の構成です。

今回の構成







  • 某社の1Uサーバ

  • LSI MegaRAID SAS 9280-8e

  • 某社のSAS接続ディスクエンクロージャ(SATA 2TB X 16で、RAID6)

  • CentOS 5.4

  • いわゆるDAS構成

  • 用途は巨大なファイルサーバです。NFSマウントして使用します。


考えたこと


HDDの話



  • a.(平均)シーク待ち時間

  • b.(平均)回転待ち時間(サーチ時間)

  • c.転送時間


大雑把に言うと、a + b + c = 応答時間(アクセス時間) となります。
a + b = 待ち時間 ですね。
1 / 応答時間 = IOPS

となります。
下記は、基本情報技術者試験みたいな話ですが...

a.(平均)ヘッドのシーク待ち時間


読み書きのためにヘッドが移動(シーク)するのにかかる時間のことです。通常外周と内周では速度が変わるため、平均値が使われます。

b.(平均)回転待ち時間(サーチ時間)


データが磁気ヘッドの下に来るまでの平均時間なので、最小0、最大1、なので1/2してます。
サーチ時間=1/2 * 1回転の時間
1回転の時間(ミリ秒)=60秒*10^3 / 1分間の回転数

c.転送時間


転送時間=データのバイト数 / 転送速度
転送速度=1トラックのバイト数 / 1回転の時間

つまり


当然ですが、回転数が早いほうが応答時間としては短くなります。
例えば一般的な、SATA HDDの場合、5,400rpmより、7,200rpmのほうが早いということになります。

コントローラの設定の話


write policy


今回のRAIDカードのようにバッテリーバックアップ付ライトキャッシュ(BBWC)が搭載されている場合、ライトキャッシュを有効にしたほうがよいケースが多いと思います。

当然、ライトキャッシュがあっても、書き込みデータはそこからあふれるわけですが、コントローラ側の実装により、隣接領域を連続して書き込んでくれるなど、キャッシュなしの場合に比べパフォーマンスが向上することが期待されます。

キャッシュ有効化し、キャッシュに書き込みを完了した時点で完了通知を出すのをライトバック。キャッシュを使用しない(無効化している)書き込みをライトスルーといいます。

今回はライトバックの設定としました。

read policy


書き込み同様、読み取りのポリシーもいくつかあります。

Adaptive
シーケンシャルリードと想定されれば先読みする。いわゆる混合系。

Read ahead
常に先読み

No .read ahead
先読みしない

とありますが、今回はファイルサーバなので、シーケンシャルリード主体と判断してRead aheadとしました。
DBであれば、ランダムアクセス主体なので、No .read aheadか、Adaptiveのほうがよいかもしれません。

ディスクキャッシュ


ディスクにも通常キャッシュが搭載されていますが、バッテリーバックアップが無い為、マシンのクラッシュ時には消えてしまう可能性があります。そのため、エンタープライズ系のHDDはよくデフォルトでディスクキャッシュが無効化されているのですが、されていない場合は明示的に無効化する必要があります。

Cache Policy


これいまいちよくわからなかったのですが、マニュアルを見る限り、読み取り処理を行ったあと、データをリードキャッシュに格納するかの設定っぽいです。

LSIならでは?なのかな??

Direct
キャッシュされない。ただし、Read aheadで読み込んだブロックはリードキャッシュに残る(っぽい)
Cached
すべての読み取りがキャッシュされる。

とりあえず、chachedにしてみました。が、いろいろ海外のブログとか漁った感じだと、Direct I/Oでいいのかもしれません。このへん参照。

実際の設定


[bash]
#バッテリキャッシュの強制(常時ライトバック)
/opt/MegaRAID/MegaCli/MegaCli64 -LDSetProp -CachedBadBBU -Immediate -LALL -aAll

#ライトバック設定
/opt/MegaRAID/MegaCli/MegaCli64 -LDSetProp -WB -Immediate -LALL -aAll

#read ahead設定
/opt/MegaRAID/MegaCli/MegaCli64 -LDSetProp -RA -Immediate -LALL -aAll

#ディスクキャッシュの無効化
/opt/MegaRAID/MegaCli/MegaCli64 -LDSetProp -DisDskCache -Immediate -LALL -aAll

#I/O Poclicyを設定(cached にしたけど、directのほうがよさげ)
/opt/MegaRAID/MegaCli/MegaCli64 -LDSetProp -Cached -Immediate -LALL -aAll
[/bash]

結果こんな感じ
[bash]
/opt/MegaRAID/MegaCli/MegaCli64 -LDInfo -LALL -aAll

Adapter 0 -- Virtual Drive Information:
Virtual Drive: 0 (Target Id: 0)
Name :
RAID Level : Primary-6, Secondary-0, RAID Level Qualifier-3
Size : xxx TB
State : Optimal
Stripe Size : 512 KB
Number Of Drives : 16
Span Depth : 1
Default Cache Policy: WriteBack, ReadAhead, Cached, Write Cache OK if Bad BBU
Current Cache Policy: WriteBack, ReadAhead, Cached, Write Cache OK if Bad BBU
Access Policy : Read/Write
Disk Cache Policy : Disabled
Encryption Type : None
[/bash]




MegaCli64のコマンド自体は、ネット上にコマンドリファレンスが転がっているので、それを参考にするのがよいかと思います。

区切りがいいので今回はこのへんで。
書ききれなかった「RAIDレベル」「フルストライプ書き込み」等については、次に触れたいと思います。

なお、当たり前ですが上記の記述は環境によって正しい場合と正しくない場合があります。

参考


これすばらしい本です

2011年8月22日月曜日

Hello world!

Welcome to WordPress. This is your first post. Edit or delete it, then start blogging!