4.4. VDO パフォーマンスに対する I/O 深度の影響のテスト
これらのテストは、VDO 設定の最適なスループットと最小のレイテンシーを生成する I/O 深度を決定します。I/O 深度は、fio
ツールが一度に送信する I/O 要求の数を表します。
VDO は 4 KiB セクターサイズを使用するため、このテストは 4 KiB I/O 操作および 1、8、16、32、64、128、256、512、および 1024 の I/0 深度で全領域テストを実行します。
4.4.1. VDO での連続の 100% 読み込みに対する I/O 深度効果のテスト
このテストは、異なる I/O 深度の値で VDO ボリュームで連続の 100% 読み込み操作を実行する方法を決定します。
手順
新しい VDO ボリュームを作成します。
詳細は、「パフォーマンステスト用の VDO ボリュームの作成」 を参照してください。
テストボリュームで書き込み
fio
ジョブを実行して、テストがアクセスする領域を事前に入力します。# fio --rw=write \ --bs=8M \ --name=vdo \ --filename=/dev/mapper/vdo-test \ --ioengine=libaio \ --thread \ --direct=1 \ --scramble_buffers=1
連続の 100% 読み込みについて報告されたスループットおよびレイテンシーを記録します。
# for depth in 1 2 4 8 16 32 64 128 256 512 1024 2048; do fio --rw=read \ --bs=4096 \ --name=vdo \ --filename=/dev/mapper/vdo-test \ --ioengine=libaio \ --numjobs=1 \ --thread \ --norandommap \ --runtime=300 \ --direct=1 \ --iodepth=$depth \ --scramble_buffers=1 \ --offset=0 \ --size=100g done
VDO テストボリュームを削除します。
詳細は、「VDO パフォーマンステストボリュームのクリーンアップ」 を参照してください。
4.4.2. VDO での連続の 100% 書き込みに対する I/O 深度効果のテスト
このテストは、異なる I/O 深度値で、VDO ボリュームに対して連続した 100% 書き込み操作を実行する方法を決定します。
手順
新しい VDO テストボリュームを作成します。
詳細は、「パフォーマンステスト用の VDO ボリュームの作成」 を参照してください。
書き込み
fio
ジョブを実行して、テストがアクセスする可能性のある領域を事前に入力します。# fio --rw=write \ --bs=8M \ --name=vdo \ --filename=/dev/mapper/vdo-test \ --ioengine=libaio \ --thread \ --direct=1 \ --scramble_buffers=1
連続した 100% 書き込みについて報告されたスループットとレイテンシーを記録します。
# 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/vdo-test \ --ioengine=libaio \ --numjobs=1 \ --thread \ --norandommap \ --runtime=300 \ --direct=1 \ --iodepth=$depth \ --scramble_buffers=1 \ --offset=0 \ --size=100g done
VDO テストボリュームを削除します。
詳細は、「VDO パフォーマンステストボリュームのクリーンアップ」 を参照してください。
4.4.3. VDO での無作為の 100% 読み込みに対する I/O 深度効果のテスト
このテストは、異なる I/O 深度値の VDO ボリュームで無作為の 100% 読み込み操作を実行する方法を決定します。
手順
新しい VDO テストボリュームを作成します。
詳細は、「パフォーマンステスト用の VDO ボリュームの作成」 を参照してください。
書き込み
fio
ジョブを実行して、テストがアクセスする可能性のある領域を事前に入力します。# fio --rw=write \ --bs=8M \ --name=vdo \ --filename=/dev/mapper/vdo-test \ --ioengine=libaio \ --thread \ --direct=1 \ --scramble_buffers=1
無作為の 100% 読み込みについて報告されたスループットとレイテンシーを記録します。
# for depth in 1 2 4 8 16 32 64 128 256 512 1024 2048; do fio --rw=randread \ --bs=4096 \ --name=vdo \ --filename=/dev/mapper/vdo-test \ --ioengine=libaio \ --numjobs=1 \ --thread \ --norandommap \ --runtime=300 \ --direct=1 \ --iodepth=$depth \ --scramble_buffers=1 \ --offset=0 \ --size=100g done
VDO テストボリュームを削除します。
詳細は、「VDO パフォーマンステストボリュームのクリーンアップ」 を参照してください。
4.4.4. VDO での無作為の 100% 書き込みに対する I/O 深度効果のテスト
このテストは、異なる I/O 深度値で VDO ボリュームに対して無作為な 100% 書き込み操作を実行する方法を決定します。
各 I/O 深度テストの実行間で VDO ボリュームを再作成する必要があります。
手順
以下の手順を、I/O 深度値 1、2、4、8、16、32、64、128、256、512、1024、および 2048 に対して個別に実行します。
新しい VDO テストボリュームを作成します。
詳細は、「パフォーマンステスト用の VDO ボリュームの作成」 を参照してください。
書き込み
fio
ジョブを実行して、テストがアクセスする可能性のある領域を事前に入力します。# fio --rw=write \ --bs=8M \ --name=vdo \ --filename=/dev/mapper/vdo-test \ --ioengine=libaio \ --thread \ --direct=1 \ --scramble_buffers=1
無作為な 100% 書き込みについて報告されたスループットとレイテンシーを記録します。
# fio --rw=randwrite \ --bs=4096 \ --name=vdo \ --filename=/dev/mapper/vdo-test \ --ioengine=libaio \ --numjobs=1 \ --thread \ --norandommap \ --runtime=300 \ --direct=1 \ --iodepth=depth-value --scramble_buffers=1 \ --offset=0 \ --size=100g done
VDO テストボリュームを削除します。
詳細は、「VDO パフォーマンステストボリュームのクリーンアップ」 を参照してください。
4.4.5. 異なる I/O 深度での VDO パフォーマンス分析
以下の例は、異なる I/O 深度値で記録された VDO スループットとレイテンシーを示しています。
I/O 深度が増えるとスループットの向上が低下する範囲と変曲点全体の動作を観察します。順次アクセスと無作為なアクセスのピークはおそらく異なる値になりますが、ピークはすべてのタイプのストレージ設定で異なる場合があります。
例4.1 I/O 深度分析
図4.1 VDO スループット分析
各パフォーマンス曲線の急な折れ曲がりに注意してください。
- マーカー 1 は、X 地点でピークシーケンススループットを識別します。この設定には、X よりも連続的な 4 KiB の I/O 深度による利点がありません。
- マーカー 2 は、Z 地点でピークの無作為な 4 KiB スループットを識別します。この設定には、Z よりも無作為な 4 KiB の I/O 深度による利点がありません。
X 地点および Z 地点の I/O 深度を超えると、帯域幅の上昇が減少し、平均要求のレイテンシーは、追加の I/O 要求ごとに 1:1 に増加します。
以下の図は、直前のグラフで曲線が急に折れ曲がった後の無作為な書き込みレイテンシーの例を示しています。このような地点でテストして、応答時間のペナルティが最小になる最大スループットを確認する必要があります。
図4.2 VDO レイテンシー分析
最適な I/O 深度
Z 地点は、最適な I/O 深度を示します。テスト計画は、Z と同等の I/O 深度で追加のデータを収集します。