4.5. VDO パフォーマンスにおける I/O リクエストサイズの影響のテスト
このテストを使用して、最適な I/O 深度で VDO のパフォーマンスを最適化するブロックサイズを指定できます。
テストでは、8 KiB から 1 MiB の範囲でさまざまなブロックサイズを使用して、固定 I/O 深度で全領域テストを実行します。
前提条件
最適な I/O 深度値を特定している。詳細は、「VDO パフォーマンスに対する I/O 深度の影響のテスト」 を参照してください。
以下のテストでは、optimal-depth を、最適な I/O 深度値に置き換えます。
4.5.1. VDO での連続書き込みに対する I/O 要求サイズの影響のテスト
このテストは、異なる I/O 要求サイズで VDO ボリュームへの連続書き込み操作を実行する方法を決定します。
手順
新しい VDO ボリュームを作成します。
詳細は、「パフォーマンステスト用の VDO ボリュームの作成」 を参照してください。
テストボリュームで書き込み
fio
ジョブを実行して、テストがアクセスする領域を事前に入力します。# fio --rw=write \ --bs=8M \ --name=vdo \ --filename=/dev/mapper/vdo-test \ --ioengine=libaio \ --thread \ --direct=1 \ --scramble_buffers=1
連続書き込みテストについて報告されたスループットとレイテンシーを記録します。
# for iosize in 4 8 16 32 64 128 256 512 1024; do fio --rw=write \ --bs=${iosize}k \ --name=vdo \ --filename=/dev/mapper/vdo-test \ --ioengine=libaio \ --numjobs=1 \ --thread \ --norandommap \ --runtime=300 \ --direct=1 \ --iodepth=optimal-depth \ --scramble_buffers=1 \ --offset=0 \ --size=100g done
VDO テストボリュームを削除します。
詳細は、「VDO パフォーマンステストボリュームのクリーンアップ」 を参照してください。
4.5.2. VDO での無作為な書き込みに対する I/O 要求サイズの影響のテスト
このテストは、異なる I/O 要求サイズで VDO ボリュームへの無作為な書き込み操作を実行する方法を決定します。
各 I/O 要求サイズのテスト実行の間に VDO ボリュームを再作成する必要があります。
手順
I/O 要求サイズが 4k
、8k
、16k
、32k
、64k
、128k
、256k
、512k
、および 1024k
の場合は、以下の手順を個別に実行します。
新しい VDO ボリュームを作成します。
詳細は、「パフォーマンステスト用の VDO ボリュームの作成」 を参照してください。
テストボリュームで書き込み
fio
ジョブを実行して、テストがアクセスする領域を事前に入力します。# fio --rw=write \ --bs=8M \ --name=vdo \ --filename=/dev/mapper/vdo-test \ --ioengine=libaio \ --thread \ --direct=1 \ --scramble_buffers=1
無作為な書き込みテストについて報告されたスループットとレイテンシーを記録します。
# fio --rw=randwrite \ --bs=request-size \ --name=vdo \ --filename=/dev/mapper/vdo-test \ --ioengine=libaio \ --numjobs=1 \ --thread \ --norandommap \ --runtime=300 \ --direct=1 \ --iodepth=optimal-depth \ --scramble_buffers=1 \ --offset=0 \ --size=100g done
VDO テストボリュームを削除します。
詳細は、「VDO パフォーマンステストボリュームのクリーンアップ」 を参照してください。
4.5.3. VDO での連続読み込みに対する I/O 要求サイズの影響のテスト
このテストは、異なる I/O 要求サイズで VDO ボリュームへの連続読み取り操作を実行する方法を決定します。
手順
新しい VDO ボリュームを作成します。
詳細は、「パフォーマンステスト用の VDO ボリュームの作成」 を参照してください。
テストボリュームで書き込み
fio
ジョブを実行して、テストがアクセスする領域を事前に入力します。# fio --rw=write \ --bs=8M \ --name=vdo \ --filename=/dev/mapper/vdo-test \ --ioengine=libaio \ --thread \ --direct=1 \ --scramble_buffers=1
連続読み取りテストについて報告されたスループットとレイテンシーを記録します。
# for iosize in 4 8 16 32 64 128 256 512 1024; do fio --rw=read \ --bs=${iosize}k \ --name=vdo \ --filename=/dev/mapper/vdo-test \ --ioengine=libaio \ --numjobs=1 \ --thread \ --norandommap \ --runtime=300 \ --direct=1 \ --iodepth=optimal-depth \ --scramble_buffers=1 \ --offset=0 \ --size=100g done
VDO テストボリュームを削除します。
詳細は、「VDO パフォーマンステストボリュームのクリーンアップ」 を参照してください。
4.5.4. VDO での無作為な読み込みに対する I/O 要求サイズの影響のテスト
このテストは、異なる I/O 要求サイズで VDO ボリュームへの無作為な読み取り操作を実行する方法を決定します。
手順
新しい VDO ボリュームを作成します。
詳細は、「パフォーマンステスト用の VDO ボリュームの作成」 を参照してください。
テストボリュームで書き込み
fio
ジョブを実行して、テストがアクセスする領域を事前に入力します。# fio --rw=write \ --bs=8M \ --name=vdo \ --filename=/dev/mapper/vdo-test \ --ioengine=libaio \ --thread \ --direct=1 \ --scramble_buffers=1
無作為な読み取りテストで報告されたスループットとレイテンシーを記録します。
# for iosize in 4 8 16 32 64 128 256 512 1024; do fio --rw=read \ --bs=${iosize}k \ --name=vdo \ --filename=/dev/mapper/vdo-test \ --ioengine=libaio \ --numjobs=1 \ --thread \ --norandommap \ --runtime=300 \ --direct=1 \ --iodepth=optimal-depth \ --scramble_buffers=1 \ --offset=0 \ --size=100g done
VDO テストボリュームを削除します。
詳細は、「VDO パフォーマンステストボリュームのクリーンアップ」 を参照してください。
4.5.5. 異なる I/O 要求サイズでの VDO パフォーマンスの分析
以下の例は、異なる I/O 要求サイズで記録された VDO スループットとレイテンシーを示しています。
例4.2 I/O リクエストサイズ分析
図4.3 要求サイズ対スループットの分析と重要な変曲点
サンプルの結果を分析します。
連続書き込みは、要求サイズ Y でピークスループットに達します。
この曲線は、設定可能なアプリケーション、特定の要求サイズによって自然に支配されるアプリケーションが、パフォーマンスをどのように認識できるかを示しています。多くの場合、4 KiB の I/O 操作では結合が有効になるため、要求サイズが大きいほどスループットが向上します。
連続読み込みは、Z 地点で同様のピークスループットに達します。
これらのピーク後、I/O 操作が完了するまでの全体的なレイテンシーは、スループットを追加することなく増加します。このサイズを超える I/O 操作を受け入れないようにデバイスを調整する必要があります。
無作為な読み込みは、X 地点でピークスループットに達します。
特定のデバイスは、要求サイズの無作為アクセスで、ほぼ連続的なスループット率を実現する場合がありますが、純粋な連続アクセスと異なる場合は、より多くのペナルティーを受けることになります。
無作為な書き込みは、Y 地点でピークスループットに達します。
無作為な書き込みは、重複排除デバイスの相互作用が最も多く、VDO は、特に要求サイズまたは I/O 深度が大きい場合に高いパフォーマンスを実現します。