在Ubuntu 12.10中采用Luks加密的慢​​SSD + dm-crypt


10

我在Sata 3界面的笔记本电脑(三星840 Pro)中安装了128 GB的SSD。这款笔记本电脑还配备了i5 3210m Ivy Bridge Intel处理器和8 GB RAM。

我使用图形安装程序安装了Ubuntu 12.10,以进行全盘加密。我有点失望,因为我期望规格必须产生比我得到的更好的结果。

在查看此SSD Benchmarking页面时,它声称我的处理器能够执行以下操作:

  • 〜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个未使用的线程。确实,如果我开始dd从2个不同的文件读取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以查看是否存在差异?也许我应该以某种方式启用它,但是在搜索中没有找到任何提示。

谢谢,

Answers:


6

您的Samsung 840 Pro支持硬件AES加密。如果您的笔记本电脑BIOS支持ATA安全功能模式设置的主密码和用户密码,那么您很幸运。

通过在BIOS中设置ATA主密码,然后安全擦除驱动器,驱动器固件应生成新的随机AES密钥。安全擦除之后,请确保设置了正确的ATA主密码和用户密码。据我所能建立的(请在此处查看我的帖子http://vxlabs.com/2012/12/22/ssds-with-usable-built-in-hardware-based-full-disk-encryption/)三星还使用您的ATA密码对AES密钥进行加密。

这将为您提供全速AES加密,而无需软件。


5

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.