Menu Close
Settings Close

Language and Page Formatting Options

Red Hat Training

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

31.3.2. VDO の効率のテスト

2.VDO ボリュームの読み取りと書き込みのテスト

  1. VDO ボリュームに 32GB のランダムデータを書き込みます。
    $ dd if=/dev/urandom of=/mnt/VDOVolume/testfile bs=4096 count=8388608
    
  2. VDO ボリュームからデータを読み込み、VDO ボリュームではない別の場所に書き込みます。
    $ dd if=/mnt/VDOVolume/testfile of=/home/user/testfile bs=4096
    
  3. diff を使用して、2 つのファイルを比較します。この場合、ファイルが同じであることが報告されます。
    $ diff -s /mnt/VDOVolume/testfile /home/user/testfile
    
  4. ファイルを VDO ボリュームの 2 番目の場所にコピーします。
    $ dd if=/home/user/testfile of=/mnt/VDOVolume/testfile2 bs=4096
    
  5. 3 番目のファイルと 2 番目のファイルを比較します。これは、ファイルが同じであることを報告するはずです。
    $ diff -s /mnt/VDOVolume/testfile2 /home/user/testfile
    

3.VDO ボリュームの削除

  1. VDO ボリュームに作成されたファイルシステムをアンマウントします。
    # umount /mnt/VDOVolume
  2. 次のコマンドを実行して、VDO ボリューム vdo0 をシステムから削除します。
    # vdo remove --name=vdo0
  3. ボリュームが削除されたことを確認します。VDO パーティションのvdo list には一覧表示がないはずです。
    # vdo list --all | grep vdo

4.重複排除の計測

  1. 「VDO テストボリュームの設定」に従って、VDO ボリュームを作成してマウントします。
  2. VDO ボリュームに、vdo1 から vdo10 までの名前の付いた 10 個のディレクトリーを作成し、テストデータセットのコピーを 10 個保持します。
    $ mkdir /mnt/VDOVolume/vdo{01..10}
  3. ファイルシステムに応じて使用されているディスク領域を調べます。
    $ df -h /mnt/VDOVolume
    
    Filesystem            Size  Used Avail Use% Mounted on
    /dev/mapper/vdo0      1.5T  198M  1.4T   1% /mnt/VDOVolume
    
    結果を一覧まとめることを検討してください。
    統計ベアファイルシステムシード後10 回コピーした後
    使用されるファイルシステムのサイズ198 MB  
    使用されている VDO データ   
    使用されている VDO 論理   
  4. 次のコマンドを実行して、値を記録します。"Data blocks used" は、VDO で実行している物理デバイスのユーザーデータが使用しているブロック数です。"Logical blocks used" は、最適化前に使用したブロック数になります。これは、計測の開始点として使用されます。
    # vdostats --verbose | grep "blocks used"
    
    data blocks used                : 1090
    overhead blocks used            : 538846
    logical blocks used             : 6059434
    
  5. VDO ボリュームのトップレベルに、データソースファイルを作成します。
    $ dd if=/dev/urandom of=/mnt/VDOVolume/sourcefile bs=4096 count=1048576
    
    4294967296 bytes (4.3 GB) copied, 540.538 s, 7.9 MB/s
    
  6. 使用中の物理ディスク領域の量を再度調べます。これは、ちょうど書き込まれたファイルのサイズに応じて、使用されているブロック数の増加を示しているはずです。
    $ df -h /mnt/VDOVolume
    
    Filesystem            Size  Used Avail Use% Mounted on
    /dev/mapper/vdo0      1.5T  4.2G  1.4T   1% /mnt/VDOVolume
    
    # vdostats --verbose | grep "blocks used"
    
    data blocks used                : 1050093 (increased by 4GB)
    overhead blocks used            : 538846 (Did not change)
    logical blocks used             : 7108036 (increased by 4GB)
    
  7. 10 個のサブディレクトリーのそれぞれにファイルをコピーします。
    $ for i in {01..10}; do
      cp /mnt/VDOVolume/sourcefile /mnt/VDOVolume/vdo$i
      done
    
  8. 再度、使用されている物理ディスク領域 (使用されているデータブロック) の量を確認します。この数は、ファイルシステムのジャーナリングとメタデータによるわずかな増加を除いて、上記手順 6 の結果と類似している必要があります。
    $ df -h /mnt/VDOVolume
    
    Filesystem            Size  Used Avail Use% Mounted on
    /dev/mapper/vdo0      1.5T   45G  1.3T   4% /mnt/VDOVolume
    
    # vdostats --verbose | grep "blocks used"
    
    data blocks used                : 1050836 (increased by 3M)
    overhead blocks used            : 538846
    logical blocks used             : 17594127 (increased by 41G)
    
  9. テストデータを書き込む前に見つかった値から、ファイルシステムが使用する領域の値を減算します。これは、ファイルシステムの観点から、このテストで使用される領域の量です。
  10. 記録された統計で節約する容量を確認します。
    注記:次の表では、値は MB/GB に変換されています。vdostats の "blocks" は 4,096 B です。
    統計ベアファイルシステムシード後10 回コピーした後
    使用されるファイルシステムのサイズ198 MB4.2 GB45 GB
    使用されている VDO データ4 MB4.1 GB4.1 GB
    使用されている VDO 論理23.6 GB*27.8 GB68.7 GB
    1.6TB フォーマットドライブ用のファイルシステムのオーバーヘッド

5.圧縮の測定

  1. 物理サイズおよび論理サイズが 10GB 以上の VDO ボリュームを作成します。重複排除を無効にし、圧縮を有効にするオプションを追加します。
    # vdo create --name=vdo0 --device=/dev/sdb \
                 --vdoLogicalSize=10G --verbose \
                 --deduplication=disabled --compression=enabled
    
  2. 転送前に VDO 統計を確認します。使用されているデータブロックと論理ブロックを書き留めておきます (両方ともゼロにする必要があります)。
    # vdostats --verbose | grep "blocks used"
  3. 新しいデバイスを XFS または ext4 ファイルシステムでフォーマットします。
    • XFS の場合:
      # mkfs.xfs -K /dev/mapper/vdo0
      
    • ext4 の場合:
      # mkfs.ext4 -E nodiscard /dev/mapper/vdo0
      
  4. フォーマットしたデバイスをマウントします。
    # mkdir /mnt/VDOVolume
    # mount /dev/mapper/vdo0 /mnt/VDOVolume && \
      chmod a+rwx /mnt/VDOVolume
    
  5. VDO ボリュームを同期して、未完了の圧縮を完了します。
    # sync && dmsetup message vdo0 0 sync-dedupe
  6. VDO 統計を再検証します。使用されている論理ブロック - 使用されているデータブロックは、ファイルシステム単体の圧縮により保存されている 4KB ブロックの数になります。VDO は、ファイルシステムのオーバーヘッドと、実際のユーザーデータを最適化します。
    # vdostats --verbose | grep "blocks used"
  7. /lib のコンテンツを VDO ボリュームにコピーします。合計サイズを記録します。
    # cp -vR /lib /mnt/VDOVolume
    
    ...
    sent 152508960 bytes  received 60448 bytes  61027763.20 bytes/sec
    total size is 152293104  speedup is 1.00
    
  8. Linux キャッシュと VDO ボリュームを同期します。
    # sync && dmsetup message vdo0 0 sync-dedupe
  9. VDO 統計を再検証します。使用されている論理ブロックおよびデータブロックを確認します。
    # vdostats --verbose | grep "blocks used"
    • 使用される論理ブロック - 使用されるデータブロックは、/libファイルのコピーに使用されるスペースの量 (4 KB ブロック単位) を表します。
    • 合計サイズ (「4.重複排除の計測」 の表から) - (使用される論理-使用されるデータブロック * 4096) = 圧縮により節約されたバイト数
  10. VDO ボリュームを削除します。
    # umount /mnt/VDOVolume && vdo remove --name=vdo0

6.VDO 圧縮の効率のテスト

  1. 「VDO テストボリュームの設定」に従って、VDO ボリュームを作成してマウントします。
  2. ボリュームを削除せずに、「4.重複排除の計測」「5.圧縮の測定」 で実験を繰り返します。vdostats のスペース節約への変更を監視します。
  3. 用意したデータセットを試します。

7.TRIM および DISCARD について

シンプロビジョニングにより、論理ストレージまたは仮想ストレージ領域を基盤の物理ストレージよりも大きくすることができます。ファイルシステムなどのアプリケーションは、ストレージのより大きな仮想層で実行すると利点があります。データの重複排除などのデータ効率化技術は、すべてのデータを保存するために必要な物理データブロックの数を減らします。このストレージ削減効果を活用するには、物理ストレージ層が、アプリケーションデータが削除されたタイミングを把握する必要があります。
従来のファイルシステムでは、データが削除されたときに基礎となるストレージに通知する必要はありませんでした。シンプロビジョニングされたストレージと連携するファイルシステムは、論理ブロックが不要になったときにストレージシステムに通知するために、TRIM コマンドまたは DISCARD コマンドを送信します。これらのコマンドは、破棄マウントオプションを使用してブロックが削除されるたびに送信できます。または、fstrim などのユーティリティーを実行して、どの論理ブロックが使用されていないかを検出し、TRIM または DISCARD コマンドの形式でストレージシステムに情報を送信するようにファイルシステムに指示することで、制御された方法でこれらのコマンドを送信することができます。
重要
シンプロビジョニングの仕組みに関する詳細は、『Red Hat Enterprise Linux 7 Logical Volume Manager Administration Guide』のThinly-Provisioned Logical Volumes (Thin Volumes)を参照してください。
これがどのように機能するかを確認するには、以下を実行します。
  1. 「VDO テストボリュームの設定」 に従って、新しい VDO 論理ボリュームを作成してマウントします。
  2. ファイルシステムをトリミングして、不要なブロックを削除します (これには長い時間がかかる場合があります)。
    # fstrim /mnt/VDOVolume
  3. 以下を入力して、以下の表に初期状態を記録します。
    $ df -m /mnt/VDOVolume
    ファイルシステムで使用されている容量を確認し、vdostats を実行して、使用されている物理データブロックと論理データブロックの数を確認します。
  4. VDO 上で実行中のファイルシステムに、重複しないデータを含む 1 GB ファイルを作成します。
    $ dd if=/dev/urandom of=/mnt/VDOVolume/file bs=1M count=1K
    
    次に、同じデータを収集します。ファイルシステムはさらに 1GB を使用する必要があり、使用されるデータブロックと使用される論理ブロックも同様に増加しました。
  5. fstrim /mnt/VDOVolume を実行し、新しいファイルの作成後に、これが影響を与えないことを確認します。
  6. 1 GB ファイルを削除します。
    $ rm /mnt/VDOVolume/file
    パラメーターを確認し、記録します。ファイルシステムは、ファイルが削除されたことを認識していますが、ファイルの削除が基礎となるストレージに通知されていないため、物理ブロックまたは論理ブロックの数に変更がありませんでした。
  7. fstrim /mnt/VDOVolume を実行し、同じパラメーターを記録します。fstrim は、ファイルシステムの空きブロックを検索し、未使用のアドレスの VDO ボリュームに TRIM コマンドを送信します。これにより関連する論理ブロックが解放され、VDO が TRIM を処理して基本となる物理ブロックを解放します。
    Step使用されているファイル領域 (MB)使用されているデータブロック使用されている論理ブロック
    初期   
    1 GB ファイルを追加   
    fstrim を実行   
    1 GB ファイルを削除   
    fstrim を実行   
この演習では、TRIM プロセスが必要で、基礎となるストレージが容量の使用率について正確な知識を持つことができます。fstrim は、多くのブロックを一度に分析して効率を向上させるコマンドラインツールです。別の方法として、マウント時に file system discard オプションを使用する方法があります。discard オプションは、各ファイルシステムブロックの削除後に基礎となるストレージを更新します。これによりスループットは遅くなりますが、使用率認識度は高くなります。未使用のブロックを TRIM または DISCARD する必要性は、VDO に固有のものではないことを理解することも重要です。シンプロビジョニングされたストレージシステムにも同じ課題があります。