Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

31.3. データ効率テストの手順

VDO の正常な検証は、適切に構造化されたテスト手順にしたがってます。本セクションでは、評価に参加するときに考慮するテストの例を紹介します。

テスト環境

次のセクションでテストケースで、テスト環境について以下を前提とします。
  • 1 つ以上の Linux 物理ブロックデバイスが使用できる。
  • ターゲットブロックデバイス(例: /dev/sdb)が 512 GB を超える。
  • 柔軟な I/O テスター(fio)バージョン 2.1.1 以降がインストールされている。
  • VDO がインストールされている。
以下の情報は、テスト環境を完全に理解できるように、各テストの開始時に記録する必要があります。
  • 使用される Linux ビルド(カーネルビルド番号を含む)
  • rpm -qa コマンドから取得した、インストールされているパッケージの完全なリスト。
  • 完全なシステム仕様:
    • CPU の種類および数(/ proc/cpuinfo で利用可能
    • ベース OS の実行後に利用可能なメモリーと利用可能な量( /proc/meminfoで利用可能)。
    • 使用するドライブコントローラーのタイプ。
    • 使用されるディスクのタイプおよび数量。
  • (ps aux または同様の一覧)実行中のプロセスの完全な一覧。
  • VDO で使用するために作成した物理ボリュームおよびボリュームグループの名前(pvs および vgs 一覧 )。
  • VDO ボリュームをフォーマットする際に使用されるファイルシステム(存在する場合)。
  • マウントしたディレクトリーの権限。
  • /etc/vdoconf.yaml の内容
  • VDO ファイルの場所。
sosreport を実行すると、必要な多くの情報を取得できます。

ワークロード

VDO を効果的にテストするには、実際のワークロードをシミュレートするデータセットを使用する必要があります。データセットは、異なる条件下でパフォーマンスを示すために重複排除または圧縮できないデータの間でバランスを提供する必要があります。
反復可能な特性を持つデータを合成的に生成できるツールがいくつかあります。特に、VDbench と fio の 2 つのユーティリティーで、テスト中に使用することが推奨されます。
本ガイドでは fio を使用します。評価を成功させるには、引数を理解することが重要になります。

表31.1 fio オプション

引数説明
--size データ fio の数量は、ジョブごとにターゲットに送信されます(以下の numjobs を参照してください)。 100 GB
--bs fio が生成する各読み取り/書き込み要求のブロックサイズ。Red Hat は、VDO の 4 KB のデフォルトと一致するように、4 KB のブロックサイズを推奨します。 4k
--numjobs
fio がベンチマークを実行するために作成するジョブの数。
各ジョブは --size パラメーターで指定したデータ量を送信します。
最初のジョブは、--offset パラメーターで指定されたオフセットでデバイスにデータを送信します。後続のジョブは、--offset_increment パラメーターが指定されない限り、ディスクの同じリージョンを記述します。これは、以前のジョブがその値で開始された場所から各ジョブをオフセットします。少なくとも 2 つのジョブでフラッシュのパフォーマンスを実現するには、推奨されています。通常、1 つのジョブで、ローテーションを行うディスク (HDD) のスループットをいっぱいにできます。
1(HDD)
2(SSD)
--thread fio ジョブに対して、フォークではなくスレッドで実行されるように指示します。これにより、コンテキストスイッチを制限することでパフォーマンスが向上する可能性があります。 <N/A>
--ioengine
Linux で利用可能な I/O エンジンは、fio を使用してテストできます。Red Hat のテストは、非同期のバッファーなしエンジン(libaio)を使用します。別のエンジンに関心がある場合は、Red Hat のセールスエンジニアについて話し合います。
Linux の libaio エンジンは、1 つ以上のプロセスが無作為な要求を同時に実行するワークロードを評価するために使用されます。libaio データを取得する前に、単一のスレッドから複数の要求を非同期に作成できるようにします。これには、同期エンジンを介して多くのスレッドを提供していた場合に、必要なコンテキストスイッチの数を制限します。
libaio
--direct
これを設定すると、direct は Linux カーネルのページキャッシュをバイパスしたデバイスにリクエストを送信します。
libaio Engine: libaiodirect を有効にした状態で使用するか(=1)、カーネルがすべての I/O リクエストに対して sync API に分類することがあります。
1(libaio)
--iodepth
任意の時点での I/O バッファーの数。
高い iodepth は通常、特に無作為な読み取りと書き込みのパフォーマンスが向上します。深い深さにより、コントローラーに常にバッチ処理の要求があることを確認します。ただし、iodepth の設定に高さすぎる(通常は 1K まで)、望ましくないレイテンシーが発生する可能性があります。Red Hat は、128 から 512 までの iodepth を推奨しますが、最終的な値はトレードオフとなり、アプリケーションがレイテンシーを許容する方法によって異なります。
128(最小)
--iodepth_batch_submit iodepth バッファープールが空になり始めたときに作成する I/O の数。このパラメーターは、I/O からのタスク切り替えを、テスト中のバッファー作成に制限します。 16
--iodepth_batch_complete バッチの送信前に完了する I/O の数(iodepth_batch_complete)。このパラメーターは、I/O からのタスク切り替えを、テスト中のバッファー作成に制限します。 16
--gtod_reduce レイテンシーを計算する時刻の呼び出しを無効にします。この設定はスループットが低いため(=0)、レイテンシー測定が必要でない限り有効(=1)にする必要があります。 1

31.3.1. VDO テストボリュームの設定

1.512 GB の物理ボリュームに論理サイズ 1 TB の VDO ボリュームを作成します。

  1. VDO ボリュームを作成します。
    • 同期ストレージで VDO 非同期モード をテストするには 、--writePolicy=async オプションを使用して非同期ボリュームを作成します。
      # vdo create --name=vdo0 --device=/dev/sdb \
                   --vdoLogicalSize=1T --writePolicy=async --verbose
      
    • 同期 ストレージで VDO 同期モードをテストするには 、--writePolicy=sync オプションを使用して同期ボリュームを作成します。
      # vdo create --name=vdo0 --device=/dev/sdb \
                   --vdoLogicalSize=1T --writePolicy=sync --verbose
      
  2. XFS ファイルシステムまたは ext4 ファイルシステムで新しいデバイスをフォーマットします。
    • XFS の場合:
      # mkfs.xfs -K /dev/mapper/vdo0
      
    • ext4 の場合:
      # mkfs.ext4 -E nodiscard /dev/mapper/vdo0
      
  3. フォーマット済みのデバイスをマウントします。
    # mkdir /mnt/VDOVolume
    # mount /dev/mapper/vdo0 /mnt/VDOVolume && \
      chmod a+rwx /mnt/VDOVolume