Luks

具有 dm-integrity 的 Cryptsetup - 奇怪的基準測試結果

  • January 2, 2021

我正在對各種cryptsetup捲進行基準測試,並且在 Debian 上得到了意想不到的結果。

我使用本次演講中的數字作為粗略參考。其中一張幻燈片顯示了各種配置的基準測試結果:

一張幻燈片顯示了 cryptsetup 的各種配置的基準,日誌在所有配置中將 R/W 吞吐量降低了約 40%。

我的設置不完全相同,並且我在 VM 中執行所有測試,所以我不希望結果完全相同,但我認為它們應該大致反映幻燈片上的內容。特別是,我希望看到經過身份驗證的完整性模式(AES-XTS,HMAC-SHA256)與未經過身份驗證的對應模式(AES- XTS )相比性能下降約 35 %,然後在日誌完整性與非日誌完整性方面再下降 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

虛擬機在 VirtualBox 6.1 上配置,預設設置分別為 Debian 或 Ubuntu。磁碟為 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

答案摘要:

cryptsetup format 忽略--integrity-no-journal標誌。

相反,您的選擇是:

  • 在每一個open,總是提供--integrity-no-journal
  • 在您第一次打開時(即使用文件系統格式化內部設備,或將內部設備添加到 MD RAID 時),提供--persistent --integrity-no-journal以保留--integrity-no-journal設置。那麼未來open將不需要旗幟。此選項僅適用於cryptsetup,而不適用於直接使用integritysetup
  • 當設備已經opened 時,發出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.1Mb/s 到 2.4Mb/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-journal命令**open而不是format**命令。

所以它可能是一個不明確的integritysetup。如果你給--integrity-no=journalformat命令。

引用自:https://unix.stackexchange.com/questions/591540