具有 dm-integrity 的 Cryptsetup - 奇怪的基準測試結果
我正在對各種
cryptsetup
捲進行基準測試,並且在 Debian 上得到了意想不到的結果。我使用本次演講中的數字作為粗略參考。其中一張幻燈片顯示了各種配置的基準測試結果:
我的設置不完全相同,並且我在 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
。- 當設備已經
open
ed 時,發出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=journal
了format
命令。