gpt4 book ai didi

performance - Spectre 修复对排序性能的影响

转载 作者:行者123 更新时间:2023-12-04 01:59:35 24 4
gpt4 key购买 nike

famous stackoverflow questions之一这就是为什么对已排序的数组进行排序如此之快的原因;答案是因为分支预测。

Intel 和 Microsoft 幽灵修复程序的应用是否会有效地抵消此问题中对受影响处理器(老一代 Intel 处理器、AMD Ryzen 和 ARM)给出的答案?

最佳答案

不,Spectre 的关键是强制错误预测间接 分支,因为它们可以跳转到任何地址。找到加载所需 secret 数据的指令序列,然后使用 secret 作为数组索引进行另一个数据相关加载,这并非易事。

要攻击常规的采用/不采用条件分支(就像您在排序函数中找到的,或者在排序或未排序数组的循环中的条件分支),您需要找到一个案例执行分支的“错误”一侧(可能是源代码中 if/else 的错误一侧)在使用寄存器中的“错误”值运行时会做一些有用的事情。这似乎有道理1,但不太可能,因此大多数针对 Spectre 的防御只会担心间接分支。


Spectre 的硬件修复必须比“关闭分支预测”(即在每个条件分支处停止管道)更微妙。这可能会使性能降低一个数量级很多代码,并且对于防止本地信息泄露(这可能导致特权升级)来说,它的防御级别太高了。

即使只关闭间接分支的预测(但不是常规条件分支)对于大多数用户空间代码来说可能代价太高,因为每个共享库/DLL 函数调用通过主流操作系统(Linux、OS X、Windows)上正常软件生态系统中的间接分支。

Linux 内核正在试验 a retpoline击败内核中间接分支的间接分支预测。不过,我不确定它是否默认启用,即使在启用 Meltdown 解决方法 (KPTI) 的内核中也是如此。


脚注:

  1. 有时 switch 的错误 case 可能会做一些完全不合适的事情(例如在解释器中),如果 switch 是用嵌套分支而不是单个间接分支,那么您就可以攻击它。 (编译器经常使用 switch 的分支目标表,但是当 case 稀疏时,它并不总是可行的。例如 case 10/case 100/case 1000/default 需要一个只有 3 个使用值的 990 条目数组。)

关于performance - Spectre 修复对排序性能的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48215071/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com