CPU可以选择执行其中一项,即决定相对于原始指令流何时处理中断。 在AMD和Intel的当前实现中,已经发出但尚未分派到执行单元的指令被取消。When an interrupt occurs, what happens to instructions in the pipeline? 在无序执行的情况下,通常有几十条指令在运行,并且一次在ALU中执行的指令实际上可能不止一条。 但一个有趣的问题是,是否允许add或imul等已开始执行但尚未失效的低延迟指令完成并更新中断处理程序看到的体系结构状态。 如果没有,可能是因为难以构建逻辑来检测在当前的引退状态之后还有多少连续指令将准备好"很快"引退。(最坏情况下每千个指令一个,或者具有低I/O负载的每百万个指令一个),因此,在中断处理时压缩更多的周围代码吞吐量的好处是很小的。2任何潜在的中断延迟代价都是不利的。
1条答案
按热度按时间4szc88ey1#
CPU可以选择执行其中一项,即决定相对于原始指令流何时处理中断。
在AMD和Intel的当前实现中,已经发出但尚未分派到执行单元的指令被取消。When an interrupt occurs, what happens to instructions in the pipeline?
在无序执行的情况下,通常有几十条指令在运行,并且一次在ALU中执行的指令实际上可能不止一条。
但一个有趣的问题是,是否允许
add
或imul
等已开始执行但尚未失效的低延迟指令完成并更新中断处理程序看到的体系结构状态。如果没有,可能是因为难以构建逻辑来检测在当前的引退状态之后还有多少连续指令将准备好"很快"引退。(最坏情况下每千个指令一个,或者具有低I/O负载的每百万个指令一个),因此,在中断处理时压缩更多的周围代码吞吐量的好处是很小的。2任何潜在的中断延迟代价都是不利的。
rep movsb
可以使RSI、RDI和RCX在复制过程中保持更新状态(因此它将在重新启动时完成复制)。其他REP字符串指令也可以类似地被中断。只有操作的单个计数相对于中断是原子的。即使在调试器中单步执行(通过设置TF),CPU也会在每次计数后中断,因此从中断PoV来看,它实际上是在重复单独的
movsb
指令RCX次。vpgatherdd
)有一个输入掩码向量,显示哪些元素要收集,哪些元素要忽略。它在成功收集相应索引后清除掩码元素。出现异常时(如缺页),出错元素是最右边的元素,其掩码仍然设置(不保证收集顺序,但保证出错顺序,请参阅英特尔的手册条目)。这使得一次收集可以成功,而不需要同时Map所有相关的页面。在分页到另一个元素的同时收回一个已经收集的元素不会导致无限循环,即使在内存压力很大的情况下也是如此。向前的进度是有保证的。
在异步中断时,硬件可以类似地使收集部分完成,使用掩码记录进度。IDK(如果任何硬件实际上这样做的话),但ISA设计使该选项保持开放。
无论如何,这就是为什么您需要在循环中为每次聚集创建一个新的全1遮罩。
AVX512聚集和散射具有相同的机制,但使用掩码寄存器而不是矢量寄存器。http://felixcloutier.com/x86/VPSCATTERDD:VPSCATTERDQ:VPSCATTERQD:VPSCATTERQQ.html
wbinvd
。(将所有缓存同步到主内存并使其无效)。英特尔手册提到wbinvd
确实会延迟中断。因此,使用WBINVD指令可能会影响逻辑处理器中断/事件响应时间.
这可能就是为什么它是一个特权指令,用户空间可以做很多事情来使系统变慢(例如耗尽大量存储器带宽),但是它不能太显著地增加中断延迟。(已经从ROB退出但尚未提交到L1d的存储可能会增加中断延迟,因为它们必须发生并且不能被中止。但是,创建大量分散的高速缓存未命中存储的病态情况是很困难的,而且存储缓冲区的大小也很小。)
相关: