检测AES-NI CPU指令

时间:2017-04-29 21:53:21

标签: linux-kernel aes cpu kernel-module instructions

最近的Intel和AMD CPU支持提高加密和解密性能的特定AES instructions

是否可以检测何时调用这些指令?例如,通过编写监视发送到CPU的指令的内核模块?或者内核仍处于高级别?

2 个答案:

答案 0 :(得分:1)

我的理解是AESENC之类的指令不需要特殊权限,因此即使在内核中也无法使用常用的错误处理程序捕获它们。您可以使用QEMU或VirtualBox的修改版本来完成它,但这会有点痛苦。

我猜你在试图看看软件包是否支持AES-NI?

答案 1 :(得分:0)

目前接受的答案在某种意义上在技术上是正确的。但它没有回答你的问题。

理论上,可以监视任何进程何时使用这些指令。然而,这会产生不可估量的开销。每次执行任何指令时,您基本上都必须执行条件分支(!)。例如,可以通过使用in-target probe来实现,但这是一种非常昂贵且不可扩展的解决方案。

更现实但不太精确的解决方案是进行程序计数器采样。您可以通过查看进程程序计数器来检查在给定时刻正在执行的指令。确实可以从内核模块访问进程的程序计数器。如果你以足够高的分辨率进行采样,你可以得到一个关于是否正在使用AES-NI指令的合适指标。