在Ubuntu 12.10中使用Luks加密缓慢的SSD + dm-crypt
我的笔记本电脑(Samsung 840 Pro)在Sata 3界面上安装了128 GB SSD。 这款笔记本电脑还配备了i5 3210m Ivy Bridge Intel处理器和8 GB RAM。
我安装了Ubuntu 12.10,使用图形安装程序来获得全盘加密。 我有点失望,因为我期待的规格我得到的结果比我得到的更好。
在查看此SSD基准测试页面时,它声称我的处理器能够执行以下操作:
- ~500 MB / s:使用AES-NI
- ~200 MB / s:没有AES-NI
看看我得到的数字,我想我可能没有启用AES-NI。 但首先 …
读取未加密的数据很快:
# hdparm -Tt /dev/sda1 /dev/sda1: Timing cached reads: 14814 MB in 2.00 seconds = 7411.70 MB/sec Timing buffered disk reads: 242 MB in 0.48 seconds = 502.75 MB/sec
这实际上接近我的SSD的“高达530 MB / s”的规格,并进行dd
测试产生与上述相似的结果。
使用dm-crypt写入加密数据的速度也很快(否则使用eCryptfs时,写入时的性能很差,低于100 MB / s),数字接近SSD规范(我猜写是缓冲的还是其他):
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc 1024+0 records in 1024+0 records out 1073741824 bytes (1.1 GB) copied, 2.93896 s, 365 MB/s
然而,读取加密数据是另一个故事:
# echo 3 > /proc/sys/vm/drop_caches # dd if=tempfile of=/dev/null bs=1M count=1024 1024+0 records in 1024+0 records out 1073741824 bytes (1.1 GB) copied, 5.85956 s, 183 MB/s
在写这条消息时,我实际上很幸运得到183 MB / s,因为这个数字不一样。 通常它大约150 MB / s,但我在新的启动时也接近300 MB / s,但是当我没有启动任何应用程序时性能逐渐下降到200 MB / s以下。 请注意,在进行此测试时,我没有其他正在进行I / O的进程(如iotop
)。
此外,这是使用hdparm
的测试,结果更糟:
# hdparm -Tt /dev/mapper/sda2_crypt /dev/mapper/sda2_crypt: Timing cached reads: 14816 MB in 2.00 seconds = 7412.86 MB/sec Timing buffered disk reads: 422 MB in 3.01 seconds = 140.11 MB/sec
我也通过查看htop
尝试实验…不确定如何解释我看到的内容,因为i5处理器执行超线程,但是4个中的2个线程在测试期间占用了大约73%,而其他2个未使用的线程。 实际上,如果我从2个不同的文件开始使用dd
读取2个进程(以防止缓冲),那么iotop
报告总共大约400 MB / s。 所以这肯定感觉它是受CPU限制的。
我的失望来自于我的i5处理器能够使用AES-NI 。 使用与上面相同的测试,以超过500 MB / s的速度读取未加密的数据。 所以我们谈论的加密分区至少要慢3倍。
我真的不知道我的dm-crypt安装是否使用AES-NI。 这是lsmod
的输出:
# lsmod | grep aes aesni_intel 51038 35 cryptd 20404 10 ghash_clmulni_intel,aesni_intel aes_x86_64 17256 1 aesni_intel
这是cryptsetup
的输出:
# cryptsetup status sda2_crypt /dev/mapper/sda2_crypt is active and is in use. type: LUKS1 cipher: aes-xts-plain64 keysize: 512 bits device: /dev/sda2 offset: 4096 sectors size: 249565184 sectors mode: read/write flags: discards
那么,这是预期的吗? AES-NI不应该比这更好地改进吗?
另外,如何禁用AES-NI以查看是否存在任何差异? 也许我应该以某种方式启用它,但在我的搜索中没有找到任何提示。
谢谢,
您的Samsung 840 Pro支持硬件AES加密。 如果您的笔记本电脑BIOS支持ATA安全function模式设置主密码和用户密码,那么您很幸运。
通过在BIOS中设置ATA主密码,然后安全擦除驱动器,驱动器固件应生成新的随机AES密钥。 安全擦除后,请确保您已设置好的ATA主密码和用户密码。 据我所知(参见我的posthttp://vxlabs.com/2012/12/22/ssds-with-usable-built-in-hardware-based-full-disk-encryption/ )三星还使用您的ATA密码加密其AES密钥。
这将为您提供全速AES加密,无需软件。
Ubuntu中的配置错误导致aesni_intel模块没有及早加载以处理启动解锁设备的加密。 我能够通过以下方式在我的机器上修复此问题:
sudo vim /etc/initramfs-tools/modules
在最后一行下方添加
# enable h/w accelerated encryption cryptd aes_x86_64 aesni_intel
然后跑
sudo update-initramfs -u -k all
重启,享受。 在此之后,在类似的SSD上,我看到500MB / s的读写速度,CPU使用率可以忽略不计。
有关此错误的详细信息,请访问https://bugs.launchpad.net/ubuntu/+source/cryptsetup/+bug/908387/comments/7