像 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加速器不需要任何内核代码。程序只需要发出AESxxx
CPU指令。如果处理器没有AES-NI,程序将触发无效指令处理器异常,该异常被翻译为SIGILL信号。内核可以通过模拟缺失指令的行为来处理异常,但据我所知,Linux 不会对 AES-NI 指令执行此操作。
AES-NI 指令在 Intel 和 AMD 处理器上兼容。