自从 1 月 Google Project Zero 团队揭露 Intel CPU 的 Meltdown 缺陷,以及所有现代 CPU 都有的 Spectre 缺陷以后,影响面之广人人自危。由于是硬件缺陷,各大厂商也只能努力推出修补更新加以弥补。几个月过去了,相关资讯似乎不再常见,然而真的没问题了吗?解决方案都很理想吗?该如何精准评量效能的降低程度呢?
目前各系统的安全更新主要是从系统软件面去做处理,理论上会让程式有 2% 到 30% 不等的降速状况。那实际影响到底有多大?知名网络串流影片公司 Netflix 表示,针对 Meltdown 的 Linux 安全修补预估让串流效能降低了 0.1%~6% 之间,而这还只是做了 4 个 Meltdown patch 修补的其中之一而已。
Netflix 的经验与评估
布伦丹·格雷格(Brendan Gregg)是 Netflix 工程师,同时也是 dTrace 专家、硬盘领域知名人士,他制定了一个“微标竿”(microbenchmark)来评估针对 Meltdown CPU 设计缺陷的 Linux 核心分页表隔离(KPTI)修补,并提出精准可管理的执行效能下降预测,格雷格表示他的工作以下列 5 个因素来评估修补所产生的开销(overhead):
- 系统呼叫率(Syscall rate):数量多到某种程度才会有可观的明显影响,一颗 CPU 每秒有 5 万个系统呼叫的情况下,额外开销可能有 2%,伴随着系统呼叫率的增加而这个数字又会再上升。在 Netflix,除了数据库以外,高系统呼叫率在云端中不常见。
- 前后文切换(Context switches):这个增加的额外开销类似系统呼叫率的部分,格雷格认为前后文切换率可以简单地添加到系统呼叫率里用于后续的评估。
- 分页错误率(Page fault rate):错误率高时,还会增加一点额外开销。
- 内存工作集大小(热资料):Working set size(hot data),超过 10MB 资料量存取,会因为 TLB(CPU 的页表快取)冲洗,导致额外开销。这可以将 1% 的开销(系统呼叫循环)变成 7%。这个很重的额外开销可以透过两个方法降低:1. Linux 4.14 开始的 pcid;2. 使用巨大的分页。
- 快取存取类型(Cache access pattern):有些存取类型从快取良好到快取不良转变时,会让额外开销遽增,最糟糕可能会额外增加 10% 的额外开销,例如 7% 的开销增加到 17%。
格雷格的结论是,在某些情况下,软件修补所增加的开销,高达 800%,但如果对系统做精细的调校,对效能的影响不至于让人那么无法接受。Gregg 大幅降低修补带来的新程式码带给 Linux 的额外开销,Netflix 使用的是 AWS 基础设施 ,格雷格的结论是:基于系统呼叫率,KPTI 的开销在 0.1%到 6% 之间,他有自信把开销降到 2%。
他还考虑到他的雇主 Netflix 使用的 AWS 基础设施的影响,并得出结论“由于我们的系统调用率,KPTI 的开销在 0.1% 到 6% 之间,我预计我们会把它降低到低于 2% 调整”,这个成绩虽然不错,格雷格还没有估计进修补对 hypervisors 跟 microcode 对效能损失的影响。
使用 Linux 服务器的业者(包含一般使用者)可以针对电脑的使用情境重编核心自行调整,降低修补所带来的效能下降问题,但对于广大一般 Windows、MacOS X 的电脑使用者而言,就没这么幸运了,没有漏洞的 CPU 才是釜底抽薪的方案 。
Intel 提出分区系统的缓解修补
Intel 在这次的 CPU 漏洞风暴可以说是跌个满头包,不断被动的应付。终于在 3 月 15 日上午,Intel 宣布针对 Meltdown 和 Specter v2 漏洞,提出分区系统的硬件缓解(mitigations)修补,将会实做在 Xeon server/HEDT platform 下一代的 Cascade Lake,以及第 8 代酷睿(Core)处理器里。
要特别注意的是,Intel 在硬件做出来的改变只能缓解 Meltdown(Intel 称为“variant 3”)和 Specter v2,是透过新的分区系统减轻了漏洞,同时改善了行程(process)和特权级别(privilege-level)分离,类似“防护墙”的做法。
Intel 2018 的 Meltdown 与 Spectre 缓解计划如下:
- Meltdown:以硬件解决
- Spectre variant 1:绕过边界检查(bounds check bypass)的漏洞,目前只能以软件解决
- Spectre variant 2:分支目标注入(branch target injection)漏洞,以硬件解决
很不幸的是 Spectre variant 1 目前还只能靠各软件开发人员来解决,而 Spectre 最被大家担心的其实一直都是 v1,整个产业的研究人员对 v1 还没有深度的理解,不知如何处理,好在 Specter v1 只能用于攻击同级的行程而无法攻击管理级的行程,也就是说骇客能透过程式穿透进一般使用者等级的程式与资料,而无法穿透进更安全的系统管理层级。
虽然是不全面的缓解,但有总比没有好。此外,Intel 已经针对过去 5 年发表的所有 CPU 产品提供 microcode 更新,甚至 Core 架构系列,第二代的 Sandy Bridge 以后都有提供,Intel 还计划继续处理最久达 2007 的 cpu 产品的 microcode 更新,包含第一代酷睿处理器(Nehalem / Gulftown / Westmere / Lynnfield / Clarksfield / Bloomfield / Arrandale / Clarkdale)和 45nm Core 2 处理器(Penryn / 的 Yorkfield / Wolfdale 处理器 / Hapertown) ,但是 65 奈米 Core 2(Conroe 等)不在内,然而最大的课题应该是:主板业者愿不愿意提供采用旧 CPU 的机板 BIOS 更新?品牌电脑业者针对过保固的产品是否愿意提供更新呢?
毕竟是硬件有缺陷,总是要修补,但追根究底还是要改良硬件设计来彻底解决 Meltdown 与 Spectre 的漏洞。Intel 最终可能在 2018 末、2019 初发表的第九代酷睿处理器架构 Ice Lake,透过改变设计解决上述问题。在此之前,终端消费者还是要关注好自身的权益,请原购买产品的公司提出解决方案。
- Meltdown’s Linux patches alone add big load to CPUs, and that’s just one of four fixes
- Intel Publishes Spectre & Meltdown Hardware Plans: Fixed Gear Later This Year
- Intel’s 9th-generation ‘Ice Lake’ CPUs will have fixes for Meltdown, Spectre
(首图来源:Flickr/Yuri Samoilov CC BY 2.0)
延伸阅读:
- 关于 Intel 处理器的“Meltdown”与“Spectre”漏洞,我们该知道些什么?