aes-ni 已启用但没有内核支持?

aes-ni 已启用但没有内核支持?

像 cpuid 和 之类的工具cat /proc/cpuinfo可以确认 aes 指令可用吗?但后来我检查/proc/crypto并没有看到 AES。我正在运行 CentOS 6。如果没有加载 aes 的内核模块,我就无法利用 AES-NI 指令,我的理解是否正确?

是否有工具会modprobe加载适当的内核模块? (不幸的是我没有管理员权限)

我正在运行一个使用 AES-NI 的测试程序,其性能比预期低一个数量级。

我也很好奇,禁用 AES-NI 后,CPU 运行什么指令? “软件模拟”?

编辑:当我运行 modinfo 时,我看到以下内容

$ /sbin/modinfo aesni_intel
filename:       /lib/modules/2.6.32-431.17.1.el6.x86_64/kernel/arch/x86/crypto/aesni-intel.ko
alias:          aes
license:        GPL
description:    Rijndael (AES) Cipher Algorithm, Intel AES-NI instructions optimized
srcversion:     E6C037FA50922CF84440A82
depends:        glue_helper,aes-x86_64,lrw,cryptd,aes_generic,ablk_helper
vermagic:       2.6.32-431.17.1.el6.x86_64 SMP mod_unload modversions 

EDIT2:上面的模块也适用于 AMD 处理器吗?

答案1

该文件/proc/crypto列出了内核本身执行加密操作时可用的算法,例如 IPsec 等网络协议和磁盘加密。该文件不传达有关用户态程序可以做什么的信息。

aesni_intel模块包含使用英特尔 AES-NI 加速器实现 AES 的代码。当内核代码需要运行AES时,需要使用AES-NI。

据我所知,使用AES-NI加速器不需要任何内核代码。程序只需要发出AESxxxCPU指令。如果处理器没有AES-NI,程序将触发无效指令处理器异常,该异常被翻译为SIGILL信号。内核可以通过模拟缺失指令的行为来处理异常,但据我所知,Linux 不会对 AES-NI 指令执行此操作。

AES-NI 指令在 Intel 和 AMD 处理器上兼容。

相关内容