LUKS加密分区中的数据访问速度


1

在Linux(Fedora 28)中,我的主目录LUKS已加密,当使用Gnome Disk(屏幕截图)时,我可以分别对基础LUKS分区(上部蓝色矩形)和解密的主分区(下部白色矩形)进行基准测试。

LUKS分区的访问时间为500MB / s,但解密的访问时间为350MB / s。要明确这是500GB SSD的同一分区。

是否公平地断定加密会使数据访问速度降低30%(= 150/500)?

是记录了这种类型的数字还是我做错了什么。这比我期待的要慢得多。

screenshotdisks


编辑:这是我的输出

$ cryptsetup benchmark
# Tests are approximate using memory only (no storage IO).
PBKDF2-sha1       384375 iterations per second for 256-bit key
PBKDF2-sha256     494611 iterations per second for 256-bit key
PBKDF2-sha512     323634 iterations per second for 256-bit key
PBKDF2-ripemd160  293225 iterations per second for 256-bit key
PBKDF2-whirlpool  185917 iterations per second for 256-bit key
argon2i       4 iterations, 748334 memory, 4 parallel threads (CPUs) for 256-bit key (requested 2000 ms time)
argon2id      4 iterations, 745443 memory, 4 parallel threads (CPUs) for 256-bit key (requested 2000 ms time)
#     Algorithm |       Key |      Encryption |      Decryption
        aes-cbc        128b       195.0 MiB/s       664.0 MiB/s
    serpent-cbc        128b        28.8 MiB/s        94.7 MiB/s
    twofish-cbc        128b        58.8 MiB/s       111.6 MiB/s
        aes-cbc        256b       146.5 MiB/s       507.3 MiB/s
    serpent-cbc        256b        33.3 MiB/s       110.2 MiB/s
    twofish-cbc        256b        59.3 MiB/s       123.6 MiB/s
        aes-xts        256b       433.7 MiB/s       416.8 MiB/s
    serpent-xts        256b       101.0 MiB/s        94.7 MiB/s
    twofish-xts        256b       111.8 MiB/s       110.3 MiB/s
        aes-xts        512b       349.5 MiB/s       356.6 MiB/s
    serpent-xts        512b       101.6 MiB/s        96.0 MiB/s
    twofish-xts        512b       111.2 MiB/s       108.1 MiB/s

$ lscpu | grep aes
Flags:               fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge 
mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall
 nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology
 nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est 
tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer
 aes xsave avx f16c rdrand lahf_lm cpuid_fault epb pti ssbd ibrs ibpb stibp
 tpr_shadow vnmi flexpriority ept vpid fsgsbase smep erms xsaveopt dtherm 
ida arat pln pts flush_l1d

注意:这个问题在这里交叉:https://ask.fedoraproject.org/en/question/130463/how-to-activate-the-aes-module-cpu-decryptor/


1
您的CPU是否支持AES-NI或同等产品?你能检查一下cryptsetup benchmark吗?
grawity

1
是的,这是一个公平的结论。
davidgo

@grawity,我不知道,怎么才能找出来?你认为有一种更好的方法来调整给定CPU的磁盘加密(我的是英特尔®酷睿™i7-3612QM CPU @ 2.10GHz×8英特尔®艾维克桥移动)。我用输出编辑了我的问题cryptsetup benchmark
alfC

1
lscpu | grep aes另外运行,lsmod | grep aes以防万一modinfo aesni_intel。根据英特尔ARK,它应该得到支持,但在您的基准测试中它没有显示。
grawity

1
lscpu | grep aes显示aes(请参阅我的问题中的编辑)。lsmod | grep aes没有显示。modinfo easni_intelmodinfo: ERROR: Module aesni_intel not found.
7

Answers:


1

加密会增加额外的CPU负载,因为每个磁盘块都需要在访问时由操作系统解密。对于i7上的通用AES处理,您的测试结果(~600 MB / s解密)相当平均。

为了避免这个问题,现代CPU通常内置基于硬件的AES支持。英特尔将此功能称为“AES-NI”(lscpu以“aes”表示),并允许达到2-3 GB / s的速率AES解密。

首先运行lscpu并检查它是否在功能标志中提到“aes”。在英特尔ARK显示它存在于你的CPU型号,但它可以通过固件(BIOS)设置被禁用。(ARK有一个脚注:“某些产品可以支持带有处理器配置更新的AES新指令......请联系OEM以获取包含最新处理器配置更新的BIOS。”

Linux使用“aesni_intel”模块来启用硬件加速。通过运行检查它是否在内核中启用zgrep AES_NI_INTEL /proc/config.gz。如果它显示“ =y”,它是主内核映像的一部分,应该可用。

如果输出显示“ =m”,则将其编译为模块 - 尝试通过运行手动加载模块sudo modprobe -v aesni_intel。如果该命令无法找到该模块,则可能需要重新启动。(重启后,确保uname -r显示与内核版本相同的内核版本ls /lib/modules。)


1
lscpu显示一个aes条目。zgrep AES_NI_INTEL /proc/config.gzgzip: /proc/config.gz: No such file or directorysudo modprobe -v aesni_intel(密码后)显示无输出,速度测试仍然给出相同的结果。lsmod | grep aes没有输出并 modinfo aesni_intel给出modinfo: ERROR: Module aesni_intel not found。现在我很好奇为什么我的Fedora似乎没有这个。
alfC
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.