この節では、ランダム入出力と順次入出力の違いと、特定の構成に対する DiskSuite の最適化戦略について解説します。
ランダム入出力の定義
ランダム入出力環境の例としては、データベースや汎用ファイルサーバーなどがあります。ランダム入出力では、ディスクのシーク時間や回転応答時間によって入出力サービス時間が決定されます。
ランダム入出力を理解することの必要性
ランダム入出力環境のメリットを利用することで、パフォーマンスを向上させることができます。
ランダム入出力環境の構成戦略
入出力要求のサービス中は、すべてのディスクスピンドルをビジーにするのが理想です。ランダム入出力要求は小規模 (通常は 2 〜 8 K バイト) なので、ランダム入出力を複数のディスクドライブに分割するのは効率的ではありません。
データをすべてのディスクに単純に分散させるため、飛び越し値は重要ではありません。通常の入出力要求より大きな飛び越し値であれば問題ありません。
たとえば、4.2 G バイトの DBMS テーブル領域があるとします。4 つの 1 .05 G バイトのディスクスピンドルに渡ってストライプ化して、入出力負荷が完全にランダムでテーブル範囲全体に広がっている場合には、4 つのスピンドルは均等にビジーになります。
ランダム入出力パフォーマンスの目標最大値 (DiskSuite ツールのパフォーマンスモニターまたは iostat(1M) コマンドで調べることができます) は、35% です。65% を超えるディスク使用状況が続く場合には、問題となります。さらにその値が 90% を超える場合は、重大な問題です。
100% で動作しているディスクを 4 つのディスクにストライプ化した場合には、各ディスクが 25% (= 100/4) で動作するものと考えがちです。しかし実際には、 (1 つのディスクの 100% に対する) スループットを人為的に制限しているわけではないので、すべてディスクの使用状況は 35% を超えるでしょう。
ディスク入出力のパフォーマンスを順次パフォーマンスで判断するケースがよくありますが、実際には、順次入出力を行なっているサーバーはごくわずかです (フルテーブルスキャンのみを実行する DBMS サーバーや、極端にデータアクセスが集中するような環境にある NFS サーバーなどのみです) 。
順次入出力について理解する必要性
順次入出力環境のメリットを利用することで、パフォーマンスを向上させることができます。
この場合の目標は、1 つのディスクから得られるパフォーマンスより高い順次パフォーマンスを引き出すことです。このためには、ストライプ幅を通常の入出力要求サイズより小さく設定しなければなりません。この結果、通常の入出力要求が複数のディスクスピンドルに分散され、順次バンド幅が広がります。
順次入出力環境の最適化戦略
飛び越し値を通常の入出力要求サイズより小さい値に設定することによって、1 つのディスクから得られるパフォーマンスより高い順次パフォーマンスをアレイから引き出します。
max-io-size / #-disks-in-stripe (最大入出力サイズ/ストライプのディスク数)
例:
通常の入出力要求サイズが 256 K バイトであり、4 つのスピンドルに渡ってストライプ化するとします。この場合に最適なストライプのユニットサイズは、次のように計算されます。
256 K バイト / 4 = 64 K バイト以下
順次入出力では、シーク時間と回転時間は存在しないことになります。順次入出力を最適化する場合には、ディスクの内部転送レートが最も重要になります。
まず最初に、max-io-size / #-disks-in-stripe (最大入出力サイズ/ストライプのディスク数) の値を調整することをお勧めいたします。UFS ファイルシステムでは、maxcontig パラメータによってファイルシステムのクラスタサイズが制御されます (デフォルトは 56 K バイト) 。一部の順次アプリケーションでは、このクラスタサイズを大きくすることによってパフォーマンスを向上させることができます。たとえば、maxcontig を 12 に設定すると、ファイルシステムのクラスタサイズは 96 K バイト (12 * 8 K バイトブロック) になります。飛び越し値が 24 K バイトの 4 方向ストライプを使用すると、ストライプ幅は 96 K バイト (= 4 * 24 K バイト) になり、パフォーマンスを向上させることになります。
例:順次アプリケーションでは、通常の入出力要求サイズは大きくなります (128 K バイト、場合によっては 1 M バイト以上) 。通常の入出力要求サイズが 256 K バイトで、4 つのディスクスピンドルに渡ってストライプする場合には、256 K バイト / 4 = 64 K バイトですから、最適な飛び越し値は 32 〜 64 K バイトになります。
ストライプ数:ストライプの場合には、先にパフォーマンス条件を決めてしまうというアプローチもあります。たとえば、あるアプリケーションで 10.4 M バイト/秒のパフォーマンスが要求され、各ディスクのパフォーマンスが約 4 M バイト/秒であるとします。この場合には、ストライプすべきディスクスピンドル数は、次のように計算されます。
10.4 M バイト/秒 / 4 M バイト/秒 = 2.6
したがって、3 つのディスクが必要になります。