ディスク入出力のパフォーマンスを順次パフォーマンスで判断するケースがよくありますが、実際には、順次入出力を行なっているサーバーはごくわずかです (フルテーブルスキャンのみを実行する 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 つのディスクが必要になります。