我的笔记本电脑(三星 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