30.4. パフォーマンステスト手順

このセクションでの目標は、VDO がインストールされているデバイスのパフォーマンスプロファイルを構築することです。各テストは、VDO がインストールされている状態とされていない状態で行う必要があります。これにより、ベースシステムのパフォーマンスに関連して VDO のパフォーマンスを評価することができます。

30.4.1. 第 1: I/O デプスの影響、固定 4 KB ブロック

このテストでの目標は、アプライアンスに対して最適なスループットを生成し、レイテンシーを最低限に抑える I/O デプスを判別することです。VDO は、従来のストレージデバイスに使われていた従来の 512 B ではなく、4 KB セクターサイズを使用します。セクターサイズを大きくすることで、より容量の多いストレージに対応し、パフォーマンスを向上して、多くのオペレーティングシステムで使用されるキャッシュバッファーサイズに一致できるようになります。
  1. 4 KB I/O および、1、8、16、32、64、128、256、512、1024 の I/O デプスで 4 コーナーテストを実行します。
    • 連続の 100% 読み込み。固定 4 KB*
    • 連続の 100% 書き込み。固定 4 KB
    • ランダムの 100% 読み込み。固定 4 KB*
    • ランダムの 100% 書き込み。固定 4 KB**
    * 書き込み fio ジョブを最初に実行することで、読み込みテスト中に読み込める領域を事前に入力
    ** 4 KB ランダム書き込み I/O 実行後に VDO ボリュームを再作成
    サンプルシェルテスト入力 (書き込み):
    # for depth in 1 2 4 8 16 32 64 128 256 512 1024 2048; do 
      fio --rw=write --bs=4096 --name=vdo --filename=/dev/mapper/vdo0 \ 
          --ioengine=libaio --numjobs=1 --thread --norandommap --runtime=300\  
          --direct=1 --iodepth=$depth --scramble_buffers=1  --offset=0 \
          --size=100g
      done
  2. 各データポイントでスループットとレイテンシーを記録して、グラフに示します。
  3. テストを繰り返し、4 コーナーテストを完了させます。--rw=randwrite--rw=read--rw=randread
結果は、以下のグラフ通りです。重要なのは、I/O の上昇により、スループット増大が低減することが証明されている範囲と変曲点の動作です。同じように、連続アクセスやランダムアクセスは、異なる値でピークに達しますが、あらゆるストレージ構成に対して異なります。図30.1「I/O デプス解析」の各パフォーマンスカーブの「曲部」に注意してください。マーカー 1 は、ポイント X の連続スループットのピークを示し、マーカー 2 は、ポイント Z でのランダム 4 KB スループットのピークを示しています。
  • このアプライアンスは、連続 4 KB I/O デプス > X からメリットを得ていません。そのデプスを超えると、帯域幅の上昇が減少し、平均リクエストレイテンシーが各追加 I/O リクエストに対して 1:1 上昇します。
  • このアプライアンスは、このアプライアンスは、ランダム 4 KB I/O デプス > Z からメリットを得ていません。そのデプスを超えると、帯域幅の上昇が減少し、平均リクエストレイテンシーが各追加 I/O リクエストに対して 1:1 上昇します。
I/O デプス解析

図30.1 I/O デプス解析

図30.2「ランダム書き込みの、増大する I/O のレイテンシーレスポンス」 では、図30.1「I/O デプス解析」 のカーブの「曲部」の後のランダム書き込みレイテンシーの例を示しています。ベンチマーキング処理では、最も低いレスポンス時間ペナルティを受ける最大スループットのポイントでテストを行う必要があります。このサンプルアプライアンスのテスト計画を進めていくにあたり、I/O デプス = Z で別のデータを収集します。
ランダム書き込みの、増大する I/O のレイテンシーレスポンス

図30.2 ランダム書き込みの、増大する I/O のレイテンシーレスポンス

30.4.2. 第 2 段階: I/O リクエストサイズの影響

このテストの目標は、以前の手順で判別した最適な I/O デプスで、テスト下のシステムの最適なパフォーマンスを生成するブロックサイズを理解することです。
  1. 8 KB から 1  の範囲にわたる可変ブロックサイズ (2 のべき乗) で、MB固定 I/O デプスで 4 コーナーテストを実行します。テスト間に読み込む領域と、テスト間に再作成するボリュームの領域を事前に入力することを忘れないでください。
  2. 「第 1: I/O デプスの影響、固定 4 KB ブロック」 で判別した値に I/O デプスを設定します。
    サンプルシェルテスト入力 (書き込み):
    # z=[see previous step]
    # for iosize in 4 8 16 32 64 128 256 512 1024; do
      fio --rw=write --bs=$iosize\k --name=vdo --filename=/dev/mapper/vdo0 
          --ioengine=libaio --numjobs=1 --thread --norandommap --runtime=300 
          --direct=1 --iodepth=$z --scramble_buffers=1 --offset=0 --size=100g
      done
  3. 各データポイントでスループットとレイテンシーを記録して、グラフに示します。
  4. テストを繰り返し、4 コーナーテストを完了させます。--rw=randwrite--rw=read--rw=randread
この結果では、いくつか重要なことに気がつくことでしょう。この例では:
  • 連続書き込みが、リクエストサイズでピークのスループットに達します。この曲部は、設定可能なアプリケーション、または特定のリクエストサイズが大半を占めるアプリケーションがより多くのスループットを生成します。これは、4 KB I/Os がマージすることでメリットを得ることがあるためです。
  • 連続読み込みは、ポイント Z で同じようなピークスループットに達します。これらのピーグ後は、I/O が完了するまでの全体的なレイテンシーが、これ以上のスループットなしで上昇することを覚えておいてください。このサイズを超える I/O を受け入れないようにデバイスを調整することが最善です。
  • ランダム読み込みは、ポイント X でピークスループットに達します。一部のデバイスは、大きなリクエストサイズのランダムアクセスで、ほぼ連続のスループット率に達することがあります。一方、その他は、真の連続アクセスと異なる場合に、より多くのペナルティを受けることになります。
  • ランダム書き込みは、ポイント Y でピークスループットに達します。ランダム書き込みは、重複排除デバイスの多くの相互作用を伴います。また、VDO は、リクエストサイズや I/O デプスが大きい場合に特に高パフォーマンスを発揮します。
このテストの結果 図30.3「リクエストサイズ vs スループット分析とキー変曲点ポイント」 は、ストレージデバイスの特徴や特定のアプリケーションのユーザーエクスペリエンスを理解するのに役立ちます。さまざまなリクエストサイズでパフォーマンスを増大するために、さらなる調整が必要かどうかは、Red Hat セールスエンジニアまでご相談ください。
リクエストサイズ vs スループット分析とキー変曲点ポイント

図30.3 リクエストサイズ vs スループット分析とキー変曲点ポイント

30.4.3. 第 3 段階: 混合読み書き I/O の影響

このテストは、混合 I/O 負荷 (読み込み/書き込み) を示したとき VDO を持つアプリライアンスが動作する仕組みを理解することを目的としています。また、最適なランダムキューデプスと 4 KB から 1 MB リのクエストサイズで読み込み/書き込みの混合の影響を分析します。状況に合わせて適切な方を使用してください。
  1. 固定 I/O デプス、 8 KB から 256 KB の範囲の可変ブロックサイズ (2 のべき乗) で 4 コーナーテストを実行し、読み込み率を 10% インクリメントに設定します。これは 0 % から始まります。テスト間に読み込む領域や、再作成する領域を事前に入力するのを忘れないでください。
  2. 「第 1: I/O デプスの影響、固定 4 KB ブロック」 で判別した値に I/O デプスを設定します。
    サンプルテスト入力 (読み込み/書き込み混合):
    # z=[see previous step]
    # for readmix in 0 10 20 30 40 50 60 70 80 90 100; do
        for iosize in 4 8 16 32 64 128 256 512 1024; do
          fio --rw=rw --rwmixread=$readmix --bs=$iosize\k --name=vdo \
              --filename=/dev/mapper/vdo0 --ioengine=libaio --numjobs=1 --thread \
              --norandommap --runtime=300 --direct=0 --iodepth=$z --scramble_buffers=1 \
              --offset=0 --size=100g
        done
      done
  3. 各データポイントでスループットとレイテンシーを記録して、グラフに示します。
図30.4「パフォーマンスは、変化する読み込み/書き込み混合にわたり一貫性があります」 では、VDO がどのように I/O 負荷に応答する例を示しています。
パフォーマンスは、変化する読み込み/書き込み混合にわたり一貫性があります

図30.4 パフォーマンスは、変化する読み込み/書き込み混合にわたり一貫性があります

パフォーマンス (集約) とレイテンシー (集約) は、混合する読み込みと書き込みの範囲にわたり比較的に一貫しており、より低い最大書き込みスループットから、より高い最大読み込みスループットという傾向にあります。
この動作は、ストレージによって異なります。しかし、ここで重要なことは、パフォーマンスが、変換する負荷下で一環しており、特定の読み書き混合を示すアプリケーションに対して期待されるパフォーマンスを理解できることです。予期しない結果が出た場合、VOD またはストレージデバイス自体に変更が必要でれば、Red Hat セールスエンジニアがわかりやすくご説明させていただきます。
注意: 同等の一貫性を示すシステムは、準最適な設定を示します。このような場合は、Red Hat セールスエンジニアまでご連絡ください。

30.4.4. 第 4 段階: アプリケーション環境

これらの最終テストは、VOD を持つシステムが、実際のアプリケーション環境で展開されたときの動作の仕組みを理解することを目的としています。可能であれば、実際のアプリケーションを使用し、これまで学んだ知識を適用してください。アプライアンスでの許容範囲のキューデプスの制限を考慮します。可能であれば、VDO パフォーマンスにより優勢なブロックサイズでリクエストを発行してください。
リクエストサイズ、I/O 負荷、読み込み/書き込みパターンなどは、一般的に予測が難しくなっています。アプリケーションのユースケース (フィルター、仮想デスクトップ、データベース) によって異なり、アプリケーションは、特定の動作またはマルチテナントアクセスに基づいて I/O のタイプが異なることが多々あるためです。
この最終テストでは、混合環境における一般的な VDO パフォーマンスを示しています。想定している環境について、より詳細な情報がある場合は、これらの設定もテストしてください。
サンプルテスト入力 (読み込み/書き込み混合):
# for readmix in 20 50 80; do
    for iosize in 4 8 16 32 64 128 256 512 1024; do
      fio --rw=rw --rwmixread=$readmix --bsrange=4k-256k --name=vdo \
          --filename=/dev/mapper/vdo0 --ioengine=libaio --numjobs=1 --thread \
          --norandommap --runtime=300 --direct=0 --iodepth=$iosize \
          --scramble_buffers=1 --offset=0 --size=100g
    done
  done
各データポイントでスループットとレイテンシーを記録し、これをグラフで示します (図30.5「混合環境パフォーマンス」)。
混合環境パフォーマンス

図30.5 混合環境パフォーマンス