x86_64中断的成本是多少。例如,由于页面错误导致的中断?内核为中断服务然后返回用户空间需要多少周期?我感兴趣的是只知道由于中断导致的成本并调度中断的用户级线程,所以我们可以忽略中断处理程序内部的内容。
答案 0 :(得分:1)
对于odrinary中断(硬件IRQ或普通异常,如除零),可能会给出一个上限。
即使不涉及磁盘IO,因为CPU必须遍历页表(这会引入许多变量),因此处理页面错误的时间尤其难以评估。出现页面错误不仅是因为页面不存在,还因为访问冲突(例如,尝试写入只读页面)。在任何情况下,如果TLB中尚未存在页面映射(永远不会缓存丢失的映射),则在调用页面错误处理程序之前,CPU将首先必须遍历多个级别的页表。访问页表条目的时间(如果地址尚未缓存在TLB中)再次取决于某些条目是否已存在于数据缓存中。
因此,从访问线性地址到被调用的PF处理程序的时间可能是~200个周期(最好的情况;存在TLB条目,由于错误的访问类型引起的异常 - 只是环形切换)到~2000个周期(没有TLB)条目存在,数据缓存中没有页表条目)。这只是1)执行故障的用户模式指令和2)执行页面错误处理程序的第一条指令之间的时间。
[侧面评论:鉴于此,我想知道是否可以构建使用分页的硬实时系统。]
答案 1 :(得分:0)
这是一个复杂的问题,无法轻易回答。
您必须保存中断中使用的所有(已使用)寄存器(标量,sse,fpu-state,avx等)。
也许您必须更改虚拟地址空间上下文。
完成后,您必须重置已保存的上下文。
所有缓存/ RAM加载效果都会改变所需的循环次数。
(注意:中断不应该被分页,但不知道linux是否支持这个,或者它是否支持)