« LEDシーリングライトの省エネ・節電効果 | トップページ | Hitachi HDS721050CLA360が壊れかかっていた・・・ »

2014年6月 1日 (日)

IntelチップセットのRAID1が遅い

2014/6/13追記: 2x Hitachi HDS721050CLA360によるRAID1のReadパフォーマンスが単体ディスクよりかなり劣る結果になっているが、これはミラーを構成する1台のディスクのReadパフォーマンスが酷く悪くなる問題が発生していたことが原因と判明した。詳細は別の記事を参照されたい。

ここ数年IntelチップセットによるRAID1を使っているのだが、「RAID1の読み込みパフォーマンスはシングルドライブよりも良くなる」とIntelが公式に述べているのを最近知った。なるほど理屈は確かにその通りのように思える。しかし実際そうなのか、と調べたら意外な結果が待っていた。

Cdm_129_h Cdm_129

ドライブH: はWDC WD20EARS-00MVWB0、ドライブS: はHitachi HDS721050CLA360、それぞれ2台ずつ使ったRAID1構成である。どちらもかなりデータが詰まっているのでその影響を考慮してやる必要があるが、どう見ても「RAID1の読み込みパフォーマンスはシングルドライブよりも劣る」としか思えない。どうなっているのだろう?

/*-----------  -----------*/

CrystalDiskMarkは詳細な状況を把握し辛い

CDM (CrystalDiskMark、以下同様) は、日本の一般ユーザーにはデファクトスタンダードと言えるベンチマークツールだ。同じ条件で数値を比べるのが容易である。

CDMの測定項目の内Seqはブロックサイズ = 1MB、QD (Queue Depth) = 1でシーケンシャルアクセスを行っていて、主にストレージシステムの転送速度を測っている。それ以外の項目ではランダムアクセスを行っていて、アクセスタイム、つまりディスクの回転待ちの影響を測っていることになる。CDMはディスクドライブ単体の転送速度やNCQの利き具合を調べるには良いツールだと思う。

CDMではファイルサイズと測定回数を変更可能で、偶然が測定結果に影響する度合いを調整できる。しかし本質的な測定条件は固定である。ある意味これがCDMの「売り」だと思うのだが、今回は都合が悪い。RAID1システムの転送速度を調べたいのだが、CDMだと一つの条件でしか測れない。これだとブロックサイズやQDを少し変えると大きく結果が異なる場合を見逃すおそれがある。

伝統的なツールにIOmeterがあるが、すでにデータ入れてしまったディスクを測定できないし、古さは否めない。最近よく話題になるのがfioである。これは柔軟性も高く機能も申し分ないのだが、その代わり使いこなすのが大変である。

今回は中間的な性格のツール ATTO Disk Benchmark (v2.43) を使った (これ以降ATTOと略)。決して新しくもないし、ある意味中途半端なツールだ。

Atto_129_h Atto_129

ATTOは予め準備された範囲ではあるが、測定条件を変えられる。上はCDMのSeqに合わせてQD = 1に設定した場合だ。右上の設定項目「Neither」がその部分である。グラフ左端にブロックサイズが示されていて、1024.0がCDMのSeq.と同条件だ。大体同じ結果になっていることが分かる。しかしブロックサイズが512や4の数字は著しく異なる。CDMはランダムアクセスだがATTOはシーケンシャルアクセスを行っているからである。

 

コンピューターの構成

今回話題にしているコンピューターは以下のような構成だ。

  • MB: GA-EP45-DS5
  • CPU: Core 2 Duo E8500
  • RAM: DDR2-800 4GB Dual-Channel mode
  • HDD0: TS128GSSD340 (SSD) Boot, C:
  • HDD1: 2x Hitachi HDS721050CLA360 (RAID1) S:, E:, G:, F:
  • HDD2: 2x WDC WD20EARS-00MVWB0 (RAID1) H:
  • OS: Windows 8.1 Pro x64

SSDを除き数年前のハードウエアだが、特に不満なく日常用途に使えている。

 

ネット情報

検索してみるとX58およびX79チップセットでSSDを使ったRAID1の読み込みパフォーマンスはシングルドライブよりも良くなるが、P55、H67、およびH77チップセットで普通のハードディスクを使った場合シングルドライブよりも劣る、と言う情報が見つかった。異なるバージョンのドライバーを試しても大きな違いは無かったとのこと。やり取りの推移はあまりスッキリしないが、現象としてどうもそう言うことらしい。またこれとは別に、X79チップセットでSSDでも普通のディスクでもRAID1の読み込みパフォーマンスはRAID0並だ!と言う情報もある。しかしよく見るとSSDの読み込みパフォーマンスはシングルドライブの2倍近くになっているが、普通のディスクはシングルドライブよりも若干劣っている。

さらに別の情報によると、X58チップセットで新しいRAIDドライバーだと読み込みパフォーマンスが低下するが古いドライバーならOK (少なくともシングルドライブ並) とある。

なおこれらの事例の内、X58チップセットは私のコンピューターと同じICH10Rを使っている。

以上をまとめると、

  • SSDを使ったRAID1だとRAID0並にシングルドライブの約2倍の読み込みパフォーマンスが得られる
  • 普通のハードディスクを使ったRAID1だと読み込みパフォーマンスがシングルドライブより劣る
  • 普通のハードディスクを使ったRAID1で古いドライバーを使うとシングルドライブと同程度の読み込みパフォーマンスになる

必ずそうなるものでも無さそうなので、どれも最後に「場合がある」と加える必要があるだろう。

私のコンピューターのハードウエア構成でも古いRAIDドライバーを使うと改善する可能性がありそうだ。

 

Intel チップセットRAIDドライバーについて

まず関連する予備知識について触れたい。Intel Desktop Chipset用のRAIDドライバーは、当初MSM (Matrix Storage Manager) と呼ばれていた。2009年、後にRST (Rapid Storage Technology) と呼ばれる新たなドライバーが開発され、2010年初めにリリースされた。またMSMおよび初期のRSTのドライバーファイルはiaStor.sys一つだけだったが、RST v11.5.0.1149からiaStorA.sysとiaStorF.sysの2ファイル構成に変わった。この件について詳しい説明はFernando's Win-RAID Forumで読むことができる。

次にIntelが正式に公表しているドライバーとその対応状況は以下の通りだ。

バージョン 日付 対応チップセット 対応OS 備考
MSM 8.​9.​0.​1023 2009/07/17 945~5シリーズ WinXP~7 MSMの最終版
RST 11.2.​0.​1006 2012/06/11 ICH7~7シリーズ WinXP~7 1ファイル方式の最終版
RST 12.9.​0.​1001 2013/12/12 5シリーズ~8シリーズ Win7~8.1 最新版

バージョン13が出ているという情報もあるが、Intelホームページで12.9.0.1001より新しいものは見つけられなかった。

悩ましいのは、Intelの公式情報ではP45チップセットとWindows 8.1両方をサポートしているバージョンがどれなのか良く分からないことである。これについてWindows 8.1をインストールする前かなり悩んだ。

前出のFernando's Win-RAID Forumを読み解くと、Intelが明記しているよりも新しいWindows上で問題なく動作するようである。またRAIDモードならRST 12.9.3.1000はICH8R/M以上のチップセットをサポートしている (AHCIモードだと5シリーズ以上)。それならIntelから入手できる最新のRST 12.9.0.1001を選ぶのがよかろう、と言うことで、最初に掲載したCDMとATTOの結果はこのドライバーによるものである。

なおデバイスマネージャーの「ドライバーソフトウエアの更新」ではダウングレードできない。今インストールしているよりも古いドライバーに入れ替える場合、インストーラー付のパッケージを使う必要がある。

 

ドライバーの違いによるRAID1パフォーマンス変化

ATTOのスクリーンショットを並べるのは能が無いので集約したグラフを作った。こうするならfioを使っても良かったのかもしれない。

まずドライブH:、WDC WD20EARS-00MVWB0を使ったRAID1をQD=1で測った結果である。ドライバーは前掲の表に記載の3種類を試した。

Atto_h_qd1

ドライバーがMSM8.9だとブロックサイズが1MB以下でRead/Writeパフォーマンスが大体同じになった。たぶん単体ディスクのパフォーマンスと同程度になっているのだと思われる。これは3番目のネット情報と同じ現象かもしれない。ただしブロックサイズ2MB以上でReadパフォーマンスがWriteよりも落ち込んでいくのが不思議である。
RST11.2の場合、ブロックサイズ0.5kBと1kBを除きRead/Writeともに他のドライバーよりも劣っている。
RST12.9では、ブロックサイズ16kB以上のReadパフォーマンスはWriteよりも低く、また不安定に変動している。その一方、ブロックサイズ4kB以下でReadパフォーマンスが顕著に高くなっている。これがどういう仕組みで実現されているか不思議である。また単体ディスクの2倍程度に達している可能性があるが、実際に使用した場合体感できる差につながるかどうか疑問だ。

次にドライブH:をQD=10で測った結果。QD=10はATTOで設定できる最大値である。

Atto_h_qd10

MSM8.9のブロックサイズ16kB~4MBでReadパフォーマンスがQD=1の場合よりも低下している。常識ではQDを増加に伴ってパフォーマンスもある程度増加するものだが、なぜこうなるか不思議だ。しかしブロックサイズ8MBでは一転してReadパフォーマンスの著しい増加が認められる。これは単体ドライブを超えている可能性があるが、実際の使用でこのような条件 (80MB分の読み込み要求を一気に発行する) が起こり得るかどうか疑問である。
上記を除くと、多くの箇所でQD=1の場合に比べてRead/Write両方のパフォーマンスが向上している。これは単体ドライブでQDを増加させたときに起こる現象がそのまま表れたのだと考えられる。

ドライブS:、Hitachi HDS721050CLA360のQD = 1

Atto_s_qd1

ブロックサイズ32kB以上では、どのドライバーでもReadパフォーマンスはWriteの半分以下である。ブロックサイズ8kB以下でRST11.2と12.9のReadパフォーマンスが顕著に増加していて、ドライブH:でRST12.9に起こっていたのと同じ現象が発生しているものと考えられる。

ドライブS:、Hitachi HDS721050CLA360のQD = 10

Atto_s_qd10

ブロックサイズ32kB以上でReadパフォーマンスがWriteよりも著しく劣ることなど、QD=1の場合に起こっていた顕著な現象を除き、ドライブH:でQDを1から10に変えた際起こったのと同じような状況になっている。

今回試したドライバーでは満足できる結果は得られなかった。バージョンによる違いよりもディスクが違うことの差が大きい。あまり好きではないが、「相性」と言う言葉を使うのにふさわしい状況かもしれない。

また違うバージョンを試しても満足できる結果が得られるとは思えない。もしそういう事があったなら、後続のバージョンに引き継がれないとは考えにくいからである。

 

本当にRAID1のReadパフォーマンスは単体ディスクより良くなるのか?

前出のIntelのページには

RAID 1 アレイの読み込みパフォーマンスはデータを複数のドライブ (オリジナルとミラー) から同時に読むことができるため、シングルドライブでの動作と比較してよくなります。

とある。なんとなくそうらしい印象を受けるが、よく考えると、これは必ずしも常に成り立つわけでは無いことに気づいた。

まず読み書き性能が単体ディスクよりも向上することが明らかなRAID0の場合を模式的に考えてみる。Readパフォーマンスが100MB/sのドライブ2台で構成されたRAID0アレイから、10個のストライピング単位から成るデータを読み込む場合を想定する。このデータは1つのファイル全体をシーケンシャルアクセスした場合と考えても良いし、またその中の1ブロックと考えても良い。

Read_raid0

次にRAID1でこれと同じことを行った場合どうなるか考えてみよう。

Read_raid1_like_raid0

RAID1の場合、両方のディスクがそれぞれすべてのデータを持っているから不要なデータを読み飛ばす必要が出てくる。普通のハードディスクで、仮にD0~D9が一つのトラックに収まっている場合を考えてみよう。100MB/sになるのは全てのデータを読んだ場合である。実際に必要なデータは半分だけなので、ハードディスク1台当たり50MB/s相当、アレイ全体で単体ディスクと同じ100MB/sのパフォーマンスになる。これは不要なデータを読まなくても全く同じだ。不要なデータがヘッドの下を流れていく間、何もせずに待つ以外に何もできない。

もう少し想像を働かせると、実際にはもっと悲惨な現象が起こっているかもしれない事がわかる。上の絵の通りのことをやろうとするとDisk1とDisk2に対してそれぞれ5回ずつランダムアクセスを行う必要がある。タイミングが悪いと途中でディスク1回転分待たされる場合が無いとも限らない。回転待ちが入るとパフォーマンスは簡単に半分とか1/10になってしまうからだ。

なおSSDでは回転待ちは発生しないし、データを読み飛ばすのにもほとんど時間はかからないはずである。なるほど、SSDを使ったRAID1でReadパフォーマンスが単体の2倍になるのはこういう事情があるからだろう。

RAID1の場合、RAID0のような決まったストライプサイズが有る訳ではない。また1回のI/Oブロックの分割数は少ない方が処理効率が良いので、前半・後半の2つに分けるのが一番良いはずだ。

Read_raid1_betrter

D0~D4およびD5~D9はそれぞれ一気に読む。たぶん実際にもこのような処理が行われているのではないかと思う。ただし現実は、ほとんどの場合複数のブロックを連続して読むから、結局最初のRAID1の図のような状況になることに変わりはない。こうすれば回転待ちの影響を受ける機会が一番少なくなるはずだ、と言うことである。

 

対策

パフォーマンスだけを考えると、チップセットのRAID機能を使うよりもWindowsの機能でミラーを作った方が良さそうである。デスクトップコンピューターのデータ用ディスクなので、ダイナミックディスクにミラーボリュームを作っても、あるいはWindows 8から使えるようになった記憶域プール (Storage Space) を使っても、ほとんど差は無さそうである。

問題はパフォーマンス以外の使い勝手である。日常的な監視機能や、移行や障害対応のやり易さを考える必要がある。これは今後の課題だ。

単体ドライブよりもReadパフォーマンスが劣ると分かったRAID1を使い続けるのは面白くないが、今まであまり問題なく使ってきているので、慌てて他の方式に移行するのは避けるべきである。検討したり確かめたりする時間は十分ある。

 

今回のまとめ

RAID1アレイで両方のディスクを同時にアクセスしてReadパフォーマンスを向上させようとする仕組みは、使っているのが普通のハードディスクだとうまく働かない。むしろパフォーマンス低下を招く場合が多い。

|

« LEDシーリングライトの省エネ・節電効果 | トップページ | Hitachi HDS721050CLA360が壊れかかっていた・・・ »

IT」カテゴリの記事

パソコン・インターネット」カテゴリの記事

趣味」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/543745/59741627

この記事へのトラックバック一覧です: IntelチップセットのRAID1が遅い:

« LEDシーリングライトの省エネ・節電効果 | トップページ | Hitachi HDS721050CLA360が壊れかかっていた・・・ »