我正在对各种cryptsetup
卷进行基准测试,并且在 Debian 上得到了意想不到的结果。
我使用的数字来自这次演讲作为粗略的参考。其中一张幻灯片显示了各种配置的基准测试结果:
我的设置并不相同,并且我在虚拟机中运行所有测试,因此我不希望结果完全相同,但我认为它们应该大致反映幻灯片上的内容。特别是,我预计经过身份验证的完整性模式的性能会下降约 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 在 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
答案1
回答摘要:
cryptsetup format
忽略旗帜--integrity-no-journal
。
相反,您的选择是:
- 每次
open
,总是提供--integrity-no-journal
。 - 首次打开时(即使用文件系统格式化内部设备或将内部设备添加到 MD RAID 时),请提供
--persistent --integrity-no-journal
保留--integrity-no-journal
设置。那么未来open
就不需要flag了。此选项仅适用于cryptsetup
,如果您使用 direct 则无效integritysetup
。 - 当设备已经
open
编辑完毕时,发出refresh --persistent --integrity-no-journal
.此选项仅适用于cryptsetup
,如果您使用 direct 则无效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
命令的话。