IAサーバーに限らず,一般的に,最もボトルネックになりやすいコンポーネントとしてディスク・サブシステム(ハード・ディスク・ドライブを含むコンポーネント)がある。ハード・ディスク・ドライブはサーバーの中で数少ない機械仕掛けで動作する,最も低速なサブシステムである。そのため,適切なチューニングを行っていないと,データの処理スピードが遅くなってしまう。逆に,適切なチューニングを施してディスク・サブシステムを高速化することにより,劇的なパフォーマンス改善を図れることが多い。ハードウエア・チューニングにおいては最も注意を払うに値するコンポーネントだ。

 ここで,このコンポーネントだけディスク“サブシステム”と記述している理由について説明しておく。サーバーでは,ATAハード・ディスク・ドライブや SCSIハード・ディスク・ドライブを単体で使用するのではなく,後述するRAIDを用いて複数の物理ディスクを1つの論理ディスクとして扱うことで,パフォーマンスの向上と耐障害性の確保(冗長化)を行うのが一般的である。

 ゆえに,ここではRAIDコントローラとハード・ディスク・ドライブによって構成されたディスク・サブシステムを対象として説明する。また,ディスクのインタフェースは,一部のローエンド機を除きサーバー・マシンではSCSIが一般的なため,SCSIでの情報のみ掲載し,ATAについては割愛させていただいた。

 まずはディスク・サブシステムの負荷状況を調べる方法やディスク・アクセスの特性を解説し,その後ディスク・サブシステム高速化技術であるRAIDの技術やRAIDレベルの選定方法を述べる。さらに,ディスクI/OとアプリケーションI/Oの最適化方法も紹介する。

ディスク・サブシステムの負荷を調べる

 ディスク・サブシステムの負荷状況は,以下のように調べる。

(1)iostat

 ディスク・サブシステムの統計情報を収集するためのコマンドである(図1)。各列の内容は表1の通り。

図1●iostatの実行結果
図1●iostatの実行結果
“iostat -d -x”でパーティション単位,ディスク単位で情報を取得できる。今回は,hp Smartアレイ5iコントローラを使用しているため,ディスク・サブシステム名が「cciss/c0d0」のように表示されている。通常のATAハード・ディスク・ドライブやSCSIハード・ディスク・ドライブであれば,「/dev/hda」「/dev/sda」のように表示される。“iostat -d -x cciss/c0d0p3 15 10”は,「iostat -d -x ディスク(パーティション)間隔回数」で特定のディスク(パーティション)に対して一定間隔・一定回数の情報を取得できる。
[画像のクリックで拡大表示]

表1●iostatの表示内容
表1●iostatの表示内容

(2)vmstat

 vmstatコマンドは,前にも述べた通り仮想メモリーの統計情報を取得するためコマンドだが,ディスク・サブシステム関連の統計情報も取得できる(第1回の図2)。ディスクサブシステムの負荷状況は以下の項目で把握できる。

● io

bi: ブロック・デバイスに送信されたブロック数(blocks/秒)。

bo: ブロック・デバイスから受信したブロック数(blocks/秒)。