在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