6.2. 分析
ストレージスタックのパフォーマンスをうまくチューニングするには、基礎的なストレージに関する詳しい知識と様々なワークロードの下での実行方法に加えて、データがどのようにシステムで流れていくかを理解する必要があります。また、チューニングを施す実際のワークロードに関する理解も必要になってきます。
新規システムを導入する際はいつでも、ストレージのプロファイリングをボトムアップで行うことが推奨されます。raw LUN もしくはディスクから開始して、そのパフォーマンスを (カーネルのページキャッシュを迂回する) 直接 I/O を使って評価します。これは実行可能なテストのうちで最も基本的なもので、スタックで I/O パフォーマンス測定を行う際の基準となるものです。様々な I/O サイズやキューの深さにわたって連続およびランダムの読み取りや書き込みを行う (aio-stress などの) 基本的なワークロードジェネレーターから開始します。
以下は、aio-stress 実行のグラフです。それぞれで、連続書き込み、連続読み取り、ランダム書き込み、ランダム読み取り、の 4 ステージを実行しています。この例では、ツールは様々なレコードのサイズ (x 軸) とキューの深さ (グラフあたり 1 つ) にわたって実行するように設定されています。キューの深さは、ある時点で進行中の I/O 操作の数を表しています。
図6.1 1 スレッド、1 ファイルでの aio-stress 出力
左下から右上にかけてのスループットの線の傾きに注目してください。また、あるレコードサイズでは、進行中の I/O 数を増やすことでストレージからのスループットが増やせることにも注目してください。
このような簡単なワークロードをストレージに対して実行することで、負荷の下でのストレージパフォーマンスを理解することができます。このテストで得られたデータを保管して、より複雑なワークロードの分析時に比較してください。
デバイスマッパーもしくは md を使用する場合は、その層を次のテストに追加し、テストを繰り返してください。パフォーマンスが大幅に低下する場合、これが確実に予想されるか、説明可能になるようにします。例えば、スタックに checksumming raid 層が追加されると、パフォーマンス低下が予想されます。予想外のパフォーマンス低下は、誤って調整された I/O 操作が引き起こしている場合があります。デフォルトでは、Red Hat Enterprise Linux はパーティションとデバイスマッパーメタデータを最適に調整します。しかし、すべてのタイプのストレージが最適な調整をレポートするわけではなく、手動でのチューニングが必要となる場合もあります。
デバイスマッパーもしくは md 層を追加した後に、ブロックデバイス上にファイルシステムを追加し、直接 I/O を使ってそれに対するテストを行います。テスト結果を以前のものと比べて、不一致を間違いなく理解するようにします。Direct-write I/O は通常、事前割り当てファイル上ではよいパフォーマンスとなるので、パフォーマンステスト前にファイルを事前割り当てするようにします。
便利な総合ワークロードジェネレーターには、以下のものがあります。
- aio-stress
- iozone
- fio