Linux 内核如何处理仅针对 Spectre 变体 1 而不针对变体 2 进行修补的较新芯片?

Linux 内核如何处理仅针对 Spectre 变体 1 而不针对变体 2 进行修补的较新芯片?

芯片如何打补丁幽灵变体 1 和崩溃与 Whiskey Lake 和 Amber Lake 一样,可以处理 Spectre Variant 2 吗?我正在寻找一台新笔记本电脑的规格。目前正在评估联想x390。它与 Whiskey Lake 一起发布,后者声称已针对 Meltdown 和 Spectre Variant 1 进行了硬件修复

据A Nand Tech报道

最大的性能指标是解决 Spectre Variant 2。在软件中修复后,英特尔预计性能会下降 3-10%取决于工作负载——当在硬件中修复时,英特尔表示性能下降要少得多,但预计新平台(如 Cascade Lake)无论如何都能提供更好的整体性能。 Whiskey Lake 和 Amber Lake 都没有针对 v2 的缓解措施,但 Whiskey Lake 无疑正在顺利修复一些更危险的攻击,例如 v3 和 L1TF。 Whiskey Lake 还提供了新的性能选项,因为该平台也在 14++ 上,这将有助于提高性能和功耗。

所以我的问题是,在新芯片(Whiskey Lake 和 Amber Lake)中,仅修复 Spectre Variant 1 和 Meltdown 对性能有何提升?他们仅针对 2/3 CPU 漏洞提供了硬件补丁,这一事实是否能为内核提供任何硬件优势?或者 Linux 内核是否会应用相同的严重软件缓解措施来防御 Spectre 变体 2?

答案1

这将是一个以英特尔为中心的答案。

请注意,在内核级别,Spectre/Meltdown 缓解措施不是一个整体,但每个 Spectre/Meltdown 变体都有自己的一组缓解措施。

崩溃

Meltdown 的内核级缓解措施称为页表隔离。内核可以自行完成此操作,这会对性能产生重大影响。

如果处理器+微代码提供进程上下文标识符 (PCID),如果处理器中提供 INVPCID 指令,则效果会更好:根据微代码可以执行的操作,熔断修复微代码更新添加了其中一项或两项功能每个特定的处理器型号。如果可用的话,Linux 当然可以使用它们,并且它们可以显着降低 Meltdown 缓解措施对性能的影响。

当然,最好的情况是根本不需要页表隔离,这显然就是 Meltdown 的“硬件”修复的含义。

如果您认为您的系统足够安全并且性能对您来说更重要,则可以选择关闭 Meltdown 修复。

幽灵变体 1

通过修补可以缓解这种情况编译器在特定情况下更仔细地处理指针,然后使用修补的编译器重建内核(和虚拟机管理程序,如果有)和任何安全关键的二进制文件。这已经完成了。它在编译后的代码中的关键位置添加了一些额外的指令,这使得程序稍微变大并且执行速度变慢,但幸运的是差异通常很小。

据我了解,微代码和处理器设计在这里起不了多大作用:即使 Cascade Lake 也仅表示对此进行了操作系统/VMM 级别的修复。

幽灵变体 2

这是一个棘手的问题,而且可能是最难解决的问题,因为真正的解决方案需要在以下层面进行一些创新:CPU设计理论

即使没有CPU硬件+微码的任何帮助,内核也可以实现雷波林, IERETURN指令蹦床。这是一种汇编级编程技术。与 Meltdown 缓解措施一样,由于实施此措施会降低系统性能,因此您可以选择禁用此缓解措施,因为您需要的性能比安全性更重要。

CPU+微码可以再次提供一些新功能,使内核更容易缓解 Spectre V2:

  • 间接分支限制推测 (IBRS),基本上是 CPU 分支预测器中的一种可切换模式,可防止用户空间代码在用户->内核模式转换过程中影响内核空间中的分支预测。
  • 间接分支预测屏障 (IBPB):基本上是一种新的 CPU 指令,可在影响 IBPB 指令之后代码中的分支预测之前停止任何代码。
  • 单线程间接分支预测器 (STIBP):一种阻止同一核心上的超线程共享分支预测信息的方法。

Linux 内核可以在适当的情况下使用这些功能,以帮助最大限度地减少 retpoline 技术造成的性能损失。

请参阅此英特尔 PDF 了解更多详细信息。

相关内容