dm-integrityを使用したCryptsetup - 奇妙なベンチマーク結果

dm-integrityを使用したCryptsetup - 奇妙なベンチマーク結果

私はさまざまなcryptsetupボリュームをベンチマークしていますが、Debianで予期しない結果を得ました。

私が使用した電話番号はこの言葉おおよその注意です。スライドの1つは、さまざまな構成のベンチマーク結果を示しています。

cryptsetupのさまざまな構成ベンチマークを示すスライド、ログはすべての構成でR / Wスループットを約40%削減します。

私の設定は同じではなく、すべてのテストを仮想マシンで実行するので、結果がまったく同じであるとは思わないが、スライドの内容を大まかに反映する必要があると思います。特に、認証された整合性モードのパフォーマンスは約35(AES-XTS、HMAC-SHA256)認証されていない製品(AES-XTS)、日記完成度と日記ではなく完成度の場合は35%です。

しかし、Ubuntu Server 20.04およびDebian 10.4と同様の結果は次のとおりです。

LUKS2 container:
    Capacity    1056964608 B
    Read        26.5MB/s
    Write       8855kB/s

LUKS2 with hmac-sha256, no journal:
    Capacity    1040322560 B
    Read        19.0MB/s
    Write       6352kB/s

LUKS2 with hmac-sha256, journaled:
    Capacity    1040322560 B
    Read        18.9MB/s
    Write       6311kB/s

整合性を有効にすると、パフォーマンスが約30%低下することが予想されます。しかし、日記と日記ではない完全性の違いはわずかです。つまり、これは元のベンチマークよりはるかに優れているのでうれしいです。しかし、ジャーナルが実際に私の役割を果たしているかどうかはどうすればわかりますが、それではどうやってオプトアウトできますか?

これは私のcryptsetupフォーマットコマンドです。

cryptsetup luksFormat --type luks2 /dev/sdb --sector-size 4096
cryptsetup luksFormat --type luks2 /dev/sdb --sector-size 4096 --integrity hmac-sha256
cryptsetup luksFormat --type luks2 /dev/sdb --sector-size 4096 --integrity hmac-sha256 --integrity-no-journal

ベンチマークコマンド:

fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=/dev/mapper/sdb --bs=4k --iodepth=64 --readwrite=randrw --rwmixread=75

VMは、それぞれDebianまたはUbuntuのデフォルト設定を使用してVirtualBox 6.1で構成されました。ディスクは 1 GB VDI で、サイズが固定され、ゼロで事前入力され、ホストバッファリングが無効になっています。デフォルトのSSDは4kセクタを使用するので--sector-size 4096

興味深いことに、デフォルト--integrityのバリアントとバリアント--integrity-no-journalの両方がsdb_difログを含む中間マッピングデバイスを作成し、両方のデバイスはsdb同じサイズです。

$ sudo integritysetup status /dev/mapper/sdb_dif
/dev/mapper/sdb_dif is active and is in use.
  type:    INTEGRITY
  tag size: 32
  integrity: (none)
  device:  /dev/sdb
  sector size:  4096 bytes
  interleave sectors: 32768
  size:    2031880 sectors
  mode:    read/write
  failures: 0
  journal size: 8380416 bytes
  journal watermark: 50%
  journal commit time: 10000 ms

$ sudo blockdev --getsize64 /dev/mapper/sdb
1040322560

答え1

答えの要約:

cryptsetup format 無視するバナー--integrity-no-journal

代わりに、オプションは次のとおりです。

  • 毎回open常に配信されます--integrity-no-journal
  • 初めて開くとき(つまり、内部デバイスをファイルシステムにフォーマットする場合、または内部デバイスをMD RAIDに追加する場合)に、--persistent --integrity-no-journal保存--integrity-no-journal設定を提供します。これにより、open今後はフラグが不要になります。このオプションはcryptsetupdirectを使用している場合にのみ適用され、効果はありませんintegritysetup
  • openデバイスが編集されたときに発生しますrefresh --persistent --integrity-no-journal。このオプションはcryptsetup直接使用する場合にのみ適用され、効果はありませんintegritysetup

前のテキスト:

--integrity-no-journalにロゴを提供しましたintegritysetup openか?dm-integrityそうだと思います。いいえフォーマットするときは、スーパーブロックに既存のログを保存します(いいえ)。

私は使用しますintegritysetup format /dev/sdb1 --no-wipe

次に、integritysetup open /dev/sdb1 int-sdb1を使って開きますsync; echo 1 > /proc/sys/vm/drop_caches; dd count=16384 bs=4096 if=/dev/zero of=/dev/mapper/int-sdb1。これは常に2.1 Mb / sから2.4 Mb / sの間の結果を提供します。

閉じてから再度開き、integritysetup open /dev/sdb1 int-sdb1 --integrity-no-journal同じddコマンドを実行しました。今回は4.0Mb/sから7.0Mb/sに速度が向上しましたが、これはかなりの改善です。大きな違いは、おそらくフラッシュ変換レイヤーによるものです。それは不都合な使い捨て安価なディスクです。

私はそれを繰り返したintegritysetup format /dev/sdb1 --no-wipe --integrity-no-journal。繰り返しますが、重要なのは寄付かどうかです--integrity-no-journalopen注文する、いいえ到着format注文する。

したがって、これは不明確な質問かもしれませんintegritysetup。コマンド--integrity-no=journalによるとformat

関連情報