SYSCALL
и SYSRET
(и их 32-разрядные экземпляры Intel SYSENTER
и SYSEXIT
) обычно описываются как "обычно более быстрый" способ входа и выхода из режима супервизора в процессорах x86, чем шлюзы вызовов или программных прерываний, но точные данные, лежащие в основе этого утверждения, остаются в основном недокументированными. В частности, все руководства по оптимизации Intel или AMD, которые я смог найти, вообще не упоминают эти инструкции. Итак:
- Сколько циклов (по оценкам)
SYSCALL
иSYSRET
используют новейшие микроархитектуры Intel 64? Это, вероятно, можно измерить с помощью прямых экспериментов, но для тестирования достаточно нескольких разных процессоров.
В зависимости от порядка величины этого числа могут быть более подробными вопросы:
- Неужели они несут полный конвейер или любой другой ларь?
- Как, если они вообще взаимодействуют с предсказанием ветвления (например, буфера возвратного стека) и логикой выборки?
- Что относительно задержек, зависимостей данных, сериализации?
- &. Дц
Предположим, что 64-разрядный код на стороне пользователя, никаких дополнительных адресных пространств (запись на CR3) и даже совпадение с парами SYSCALL
и SYSRET
, если это имеет значение.