Обнаружение инструкций процессора AES-NI

Последние процессоры Intel и AMD поддерживают специальные инструкции AES, которые повышают производительность шифрования и дешифрования.

Можно ли определить, когда эти инструкции вызываются? Например, написав модуль ядра, который отслеживает инструкции, которые отправляются на процессор? Или ядро ​​все еще на высоком уровне?

2 ответа

Решение

Насколько я понимаю, такие инструкции, как AESENC, не требуют специальных привилегий, поэтому вы не сможете перехватить их с помощью одного из обычных обработчиков ошибок даже в ядре. Возможно, вы сможете сделать это с модифицированной версией QEMU или VirtualBox, но это будет немного болезненно.

Я предполагаю, что вы пытаетесь увидеть, поддерживает ли программный пакет AES-NI?

В настоящее время принятый ответ является в некотором смысле технически правильным. Это, однако, не отвечает на ваш вопрос.

Теоретически было бы возможно контролировать, когда эти инструкции используются любым процессом. Это, однако, создало бы неоправданное количество накладных расходов. В основном вам придется выполнять условную ветвь каждый раз, когда выполняется любая инструкция (!). Это может быть достигнуто, например, с использованием зонда в мишени, однако это очень дорогое и не масштабируемое решение.

Более реалистичным, но менее точным решением является выборка счетчика программ. Вы можете проверить, какая инструкция выполняется в данный момент, посмотрев на счетчик программы процессов. Программный счетчик процесса действительно доступен из модуля ядра. Если вы производите выборку с достаточно высоким разрешением, вы можете получить приличный показатель того, используются ли инструкции AES-NI.

Другие вопросы по тегам