SYSCALL
和SYSRET
(以及它们的仅 32 位英特尔对应物SYSENTER
和SYSEXIT
)通常被描述为在 x86 处理器中进入和退出管理模式的“通常更快”的方式,而不是调用门或软件中断,但这种说法背后的确切数字在很大程度上仍然没有记录。特别是,我能找到的所有 Intel 或 AMD 优化指南都没有提到这些指令。所以:
- 最近的 Intel 64 微架构执行
SYSCALL
和执行多少个周期(估计) ?SYSRET
这可能可以通过直接实验来测量,但是有很多不同的 CPU 需要测试。
根据这个数字的数量级,更详细的问题可能是相关的:
- 它们是否会导致完整的管道停顿或任何其他类型的停顿?
- 如果有的话,它们如何与分支预测(例如返回堆栈缓冲区)和获取逻辑进行交互?
- 延迟、数据依赖、序列化呢?
- 等等。
假设用户空间端使用 64 位代码,没有额外的地址空间切换(写入 CR3),甚至匹配SYSCALL
和SYSRET
配对(如果重要)。