尽管Meltdown和Spectre两大CPU漏洞发生在2018年年初,但近半年的时间并没有让其带来的影响完全消除。一是因为这两个漏洞本身带来的影响足够大,甚至可以用掀起IT界的“地震”来形容;二是自从1月份以来,新的CPU漏洞不断被曝出,不论是英特尔、AMD、ARM、Power等无一幸免,“下一代Spectre”、“Meltdown-Spectre变种”等字眼不断出现在各大科技媒体头条。
如此形势下,如何降低甚至消除Meltdown和Spectre带来的影响,成为广大用户尤其是企业级IT用户讨论的热点。在芯片供应商、OS厂商、应用提供商已经纷纷发布针对漏洞补丁的今天,为什么Meltdown和Spectre还能引发讨论?实际上,这里存在一个不可消除的矛盾点,也就是在安全性和性能之间如何选择。
修补漏洞对应用性能造成的影响
为了不对安全带来影响,解决Meltdown和Spectre漏洞最直接的方法就是打补丁。然而这一方法却导致应用性能显著下降,这也是英特尔等公司备受诟病与压力的原因。
这里有必要再提下Meltdown和Spectre漏洞产生的原因,其中乱序执行(Out-of-order Execution)、推测执行(Speculative Execution)和分支预测(Branch Prediction)三大CPU采用的技术是造成漏洞产生的根本原因。简单理解,Meltdown破坏了位于用户应用和操作系统之间的基本隔离,导致程序可能访问其他程序和操作系统内存,从而产生敏感信息会被窃取的可能性。Spectre则是破坏了不同应用程序之间的隔离, 处理器会推测在未来有用的数据并执行计算,当这些数据被需要时可立即使用。但是处理器没有很好地将低权限的应用程序与访问内核内存分开,这意味着攻击者可以使用恶意应用程序来获取应该被隔离的私有数据。
然而为了应对这一问题,目前的补丁技术只能是使用软件来降低黑客利用预测执行来入侵内核内存,主要的补丁是将每个进程的内核地址和用户地址共享映射表改为内核地址和用户地址各有自己独立的映射表PGD(Page Global Directory),这样一来在用户空间根本没有内核空间的映射表,即使漏洞存在,黑客也不会从内核获得数据。但是这样的代价就是每次系统调用或者中断发生时都需要切换映射表,这无疑会影响应用的性能。
因为Meltdown和Spectre主要是产生于用户态和内核态交互之间,黑客利用用户态和内核态之间的短暂未保护状态的瞬间窃取信息。所以从应用角度来看,如果应用有很多用户态和内核态之间的交互,显然受漏洞影响就比较大。如果应用在内核态和用户态之间的操作比较少,它受漏洞的影响也就比较小。
从对于业界应用的影响来看,英特尔确认性能损失取决于工作负载。比如常见的OLTP应用,为了提升效率,往往需要将资料缓存到内存中,所有的OLTP操作都是由内核来完成,如果不使用Meltdown和Spectre的补丁,应用很容易被黑客攻击;如果使用补丁,根据第三方测试数据,应用性能可能会有8% 到19%的损失。对于一些内核层和用户层很少通讯的应用来讲,性能影响就会小些甚至不受影响。
根据业内分析发现,应用修复所产生的系统性能影响如下所示:
• 模拟常见企业和云工作负载的基准测试显示, 性能降低 2% 至 5%。
• 数据库分析和Java VM 基准测试显示,性能降低 3% 至 7%。
• 在线交易类的 OLTP 基准测试显示,性能降低 8% 至 19%。
• 使用了支持加速器技术(包括 DPDK、RDMA 等) 网卡的应用性能退化微乎其微,甚至完全不受影响。
(图)修复后的不同类型应用的平均性能损失
所以,总体看来,使用牺牲性能的方式来解决问题,无疑不是一个好的方案。
如何不在安全与性能之间二选一
由于Meltdown和Spectre问题来源于CPU,最根本的解决办法就是改变CPU从内存和磁盘读取数据的方式,实现既不损失性能又有安全保障。但是这是一个很艰巨的任务,很难在短期内实现。
Mellanox公司亚太及中国区市场开发高级总监宋庆春在接受至顶网采访时表示,“当前的最佳解决方案就是尽量做到CPU Offload,减少内核层和用户层之间的沟通, 比如使用RDMA技术来Bypass CPU,使用NVMe over Fabric Offload来将CPU操作的内核拷贝跳过,使用GPU Direct RDMA技术跳过GPU内存和CPU内存的拷贝等。另外使用网卡硬件来做应用和应用之间的安全隔离来避免使用CPU来做软件隔离,也是预防漏洞的有效方法之一。”
所以,解决Meltdown和Spectre问题的关键就是减少CPU和应用的沟通,RDMA和智能网卡做的就是让CPU尽量只做计算,所有通讯和安全的操作由网络来做,从而切断黑客访问应用的途径。此外,还包括DPDK技术,“它们实际是把原来由内核操作的很多工作放到用户态去做,这样很多操作就跟内核态没有关系了。通过在用户态之间建立应用和应用之间隔离,避免和内核态之间的交互,来降低这些漏洞带来的风险。现在RDMA技术已经被广泛应用到了各种各样的应用当中,从很多采用RDMA的应用来看,可以看到它被Meltdown和Spectre这两个漏洞影响的机会非常小,而且对性能的影响非常低,甚至做到没有影响。” 宋庆春说。
所以,这在另一个层面又回到了卸载技术与加载技术的争论。卸载技术寻求克服CPU的性能瓶颈,主要方式是对在集群内移动的数据执行各种网络功能以及复杂的通信操作,如协同操作和数据聚集操作。以Mellanox为代表的网络厂商推出了卸载技术(如 RDMA 和 DPDK), 将处理TCP/IP和存储堆栈的重任转移至网络适配器,缓解主要系统处理器的压力。这样可以提升性能,并缓解了修补Spectre 和Meltdown 后通常造成的性能损失。
主流应用享受RDMA带来的安全与性能提升
现在包括计算、存储、大数据、虚拟化等诸多市场上的主流应用已经应用RDMA、DPDK等Kernel Bypass的技术来规避和降低Spectre 和Meltdown带来的影响,并提升性能。
宋庆春指出,在存储方面,无论是对象存储的CEPH、块存储的iSCSI、文件存储的Cluster File System以及NVMe over Fabric等等,都已经有RDMA的版本。此外,在各种人工智能的主流框架中,包括TensorFlow、CNTK、Caffe2、MXNet、PaddlePaddle,以及商汤科技、Face++等公司的私有框架,也都有了基于RDMA的实现。还包括大数据处理的主流框架Spark以及虚拟化方面,都诸多应用到了RDMA或者DPDK的技术,以CPU Offload减少内核层和用户层之间的沟通,预防漏洞的同时,同时性能得到显著提升。
小结
所以,以CPU Offload如RDMA 和 DPDK的方案带来的明显价值是让用户不用在安全性和在应用性能之间做权衡。以往来说,在面对Spectre 和Meltdown时,如果选择性能不打补丁,就可能带来安全隐患的影响。如果选择打补丁,则导致应用性能受到影响。
其实,可以不必在性能与安全之间二选一,你有一个更好的选择!
好文章,需要你的鼓励
AMD CIO的职能角色早已超越典型的CIO职务,他积极支持内部产品开发,一切交付其他部门的方案都要先经过他的体验和评判。
医学生在选择专业时,应当考虑到AI将如何改变医生的岗位形态(以及获得的薪酬待遇)。再结合专业培训所对应的大量时间投入和跨专业的高门槛,这一点就更显得至关重要。
我们拥有大量数据,有很多事情要做,然后出现了一种有趣的技术——生成式AI,给他们所有人带来的影响。这种影响是巨大的,我们在这个领域正在做着惊人的工作。