Solaris 11 中的 AES-NI 加速 ZFS v31 加密

oha*_*aal 2 zfs solaris encryption x86

我不太确定这是否是提出此问题的正确位置,如果不是,请随时将其迁移到适合它的任何地方。

我正在我的实验室机器上的 ESXi 5.0 下的 Solaris 11.11.11 VM 中测试 ZFS v31 中的加密功能。dd在 11 磁盘 RAIDZ3 上放置我的加密文件夹时,我得到了糟糕的结果。

dd 基准:

# time dd if=/dev/zero of=/mypool/storage/dd.tst bs=1024000 count=10000
10000+0 records in
10000+0 records out

real    1m52.604s
user    0m0.010s
sys     0m2.715s
# time dd if=/mypool/storage/dd.tst of=/dev/null bs=1024000
10000+0 records in
10000+0 records out

real    3m15.547s
user    0m0.015s
sys     0m4.768s
Run Code Online (Sandbox Code Playgroud)

翻译成:

Write: 90.94 MB/s
Read: 52.366 MB/s
Run Code Online (Sandbox Code Playgroud)

使用 100% CPU 时。

相比之下,在没有加密的情况下,我的写入速度接近 700 MB/s,读取速度约为 900 MB/s。

如图isainfo -v所示,aes 被传递到 VM。

# isainfo -v
64-bit amd64 applications
        xsave pclmulqdq aes sse4.2 sse4.1 ssse3 popcnt tscp cx16 sse3 sse2 sse
        fxsr mmx cmov amd_sysc cx8 tsc fpu
32-bit i386 applications
        xsave pclmulqdq aes sse4.2 sse4.1 ssse3 popcnt tscp ahf cx16 sse3 sse2
        sse fxsr mmx cmov sep cx8 tsc fpu
Run Code Online (Sandbox Code Playgroud)

是的,我知道你在想什么。我应该尝试裸机 - 实际上我已经尝试过了。我在裸机上得到相同的结果。我什至提到它在 VM 中的原因是因为 AES-NI 实际上可以工作,并且在 ESXi 5.0 下的 Windows 7 64 位 VM 中使用 TrueCrypt 使我几乎全速使用虚拟机的完全相同的规范。

虚拟机规格:

  • CPU:2核(Intel Xeon E3-1235 @ 3.2GHz)
  • 内存:8GB
  • SAS 控制器(通过 Vt-d 和 PCI 直通):2x IBM M1015(使用 IT 固件闪存)
  • 硬盘:11x 2TB 三星 F4EG(通过 IBM M1015)

我应该从哪里开始故障排除?有没有人在 Solaris 11 中成功使用了 AES-NI 加速加密 - 如果是这样,您的设置如何,您是否需要做任何特别的事情?

小智 5

默认使用 AES-NI,无需配置。ZFS 使用 Solaris 内核加密框架接口。因此,一个非常简单的 DTrace 将告诉您是否调用了使用 Intel aesenc 指令的函数:

#!/usr/sbin/dtrace -Fs
fbt::aes_encrypt_intel:entry
{
}

fbt::aes_encrypt_intel:return
{
}
Run Code Online (Sandbox Code Playgroud)

请注意,当我们为 ZFS 启用加密时,我们还会自动将校验和切换为 sha256-mac。因此,更公平的比较将针对具有 checksum=sha256 而不是 checksum=on(即 fletcher4)的 ZFS 数据集。