分支预测器——使用高级分支预测降低分支成本 局部2位预测器:仅使用单个分支的最近行为来预测该分支的未来行为 相关预测器/两级预测器:利用其他分支来进行预测的分支预测器 竞赛预测器 采用多个预测器,通常是一个基于全局信息的预测器+一个基于局部信息的预测器,用选择器将他们结合起来 局部预测器和全局预测器的自适...
Spectre攻击利用了CPU的预测执行对系统进行攻击。预测执行是另外一种CPU优化特性。在分支指令执行时,由于分支指令执行可能需要内存读取(上百个CPU周期),在分支指令执行结束之前,CPU会预测哪一个分支会被运行,提取相应的指令代码并执行,以提高CPU指令流水线的性能。CPU的预测执行是通过分支预测单元(BPU)进行的。简单的理...
Spectre攻击利用了CPU的预测执行对系统进行攻击。预测执行是另外一种CPU优化特性。在分支指令执行时,由于分支指令执行可能需要内存读取(上百个CPU周期),在分支指令执行结束之前,CPU会预测哪一个分支会被运行,提取相应的指令代码并执行,以提高CPU指令流水线的性能。CPU的预测执行是通过分支预测单元(BPU)进行的。简单的理...
对写指令的访存乱序有可能造成的错误后果,所以处理器通常有专门的机制(通常是做了个缓冲)保证在出现异常或者 错误的时候,可以丢弃异常点后面的写指令的结果不做写入。 处理器的分支预测功能也能引起并发执行。处理器的分支预测单元有可能直接把两条分支的指令都预取来一块并发执行掉。等到分支判断的结果出来以后,再丢...
分支预测 分支预测是一种提高流水线执行效率的手段。在遇到if..else..这种程序执行的分支时,可以通过以往的历史记录判断哪一分支是最可能被执行的分支,并在分支判断条件真正返回判断结果之前提前执行分支的代码。详情可以在上面提到的连载文章中阅读。 需要强调的是,提前执行的分支代码,即便事后证明不是正确的分支,其执...
Spectre 漏洞则是利用分支预测与乱序执行的结合来泄露数据。分支预测是 CPU 提高执行效率的另一项技术,当遇到条件跳转时,CPU 会猜测哪个分支更有可能被执行,并提前执行指令。如果预测错误,CPU 会回滚这些操作。然而,乱序执行的特性使得即使错误分支的结果被回滚,其副作用仍然可能被攻击者探测到,从而泄露敏感数据。
分支预测单元预测到JNZ跳转到XOR处执行,乱序执行让XOR指令在ADD前面执行,不过天有不测风云,处理器执行到JNZ时,发现分支预测单元预测错了,实际上应该执行的是MOV这个分支,使用顺序提交策略,JNz后面指令的结果都没有提交,可以直接抛弃,重新开始执行MOV这条路径即可。
分支预测单元预测到JNZ跳转到XOR处执行,乱序执行让XOR指令在ADD前面执行,不过天有不测风云,处理器执行到JNZ时,发现分支预测单元预测错了,实际上应该执行的是MOV这个分支,使用顺序提交策略,JNz后面指令的结果都没有提交,可以直接抛弃,重新开始执行MOV这条路径即可。
cpu层次的东西,不会对上层产生结果性的影响,但乱序执行与分支预测,会对程序的效率产生影响,因为每一次分支判错,都会丢弃计算的结果。在一个使用投机执行的处理器中,处理器会开始执行预测的分支目标处的指令。它这样做的方式是,避免修改任何实际的寄存器或存储器位置,直到确定了实际的结果。如果预测是正确的,处理器就...