Ubuntu 12.10 中 SSD + dm-crypt 与 Luks 加密速度缓慢

Ubuntu 12.10 中 SSD + dm-crypt 与 Luks 加密速度缓慢

我的笔记本电脑(三星 840 Pro)上安装了 128 GB 的 SSD,接口为 Sata 3。这台笔记本电脑还配备了 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 处理器乙炔。使用我上面所做的相同测试,未加密数据的读取速度超过 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 以查看是否有任何差异?也许我应该以某种方式启用它,但在搜索中没有找到任何提示。

谢谢,

答案1

您的三星 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 加密,无需任何软件。

答案2

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

相关内容