新闻

NEWS

VC君讲技术07 | cpu相关补丁引起cpu降速的恢复方法

发布时间:2020-09-02 发布者:瑞驰信息技术

《VC君讲技术》

技术分享第7期

作者:带鱼、乐枫


前言

cpu的内核代码存在一些漏洞,可能引起服务器跨程序数据访问的安全问题,在单纯的内网使用场景,或者无法登录的服务器使用场景,是不存在这个问题的,为了解决这些漏洞,主线内核里面合入了很多解决相关问题的patch,这些patch引起cpu较大幅度的降速,这个对于内网使用的存储系统来说是没有必要的,可以通过一些参数配置,来实现cpu速度的还原。


降速判断

关闭方法


对于性能的衰减,如果没有数据的比较,是很难判断影响程度的,所以需要有个横向对比数据来判断,本篇文章提供两个简单的比较方法,来判断CPU性能是否有改善,从内核5.2开始,提供了统一的开关,来控制这些补丁的影响centos主线内核3.10.x也做了相关功能的集成

        mitigations = off off - Disable all optional CPU mitigations. This 

        improves system performance, but it may also expose users to 

        several CPU vulnerabilities.

等同于

• nopti [X86,PPC]

• nospectre_v1 [X86,PPC]

• nospectre_v2 [X86,PPC,S390]

• specstore bypass_disable=off [X86,PPC]

• l1tf=off [X86]

• mds=off [X86]

• tsxasyncabort=off [X86]

• kvm.nxhugepages=off [X86]

这个是centos7.8的release_notes提到的相关漏洞对应关系,这个漏洞有很多,后续的关闭应该都是通过这个参数进行控制,本篇记录的测试是基于centos 7的

修改grub的配置文件

[root@lab101 phoronix-test-suite]# cat /etc/sysconfig/grub |grep CMDGRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet mitigations=off"

增加mitigations=off

grub2-mkconfig --output=/boot/grub2/grub.cfg

重新生成grub文件,然后重启服务器。


漏洞检查脚本


可以使用下面的脚本,进行相关的漏洞检查

wget https://meltdown.ovh -O spectre-meltdown-checker.sh

我们需要检查这些漏洞是否存在,是否把漏洞相关补丁屏蔽了,让它不要太影响CPU性能,这个脚本是通过内核相关参数去做检查的,这里只是提供一个检查参考,我们主要还是通过测试看是否有CPU性能改善。


提供两个方法进行cpu性能判断,一个是dd,一个是stress-ng,前面是直接的dd的命令,通过执行时间的长短进行判断,后面是phoronix-test-suite里面的一个插件,通过测试出来的分数来判断性能变化。


降速对比测试


dd测试


命令如下

time dd if=/dev/zero of=/dev/null bs=1 count=100000000

相当于执行 100000000x2 次系统调用

优化前

[root@lab101 ~]# time dd if=/dev/zero of=/dev/null bs=1 count=100000000

100000000+0 records in

100000000+0 records out

100000000 bytes (100 MB) copied, 158.539 s, 631 kB/s

real      2m38.541s

user     1m15.937s

sys       1m22.599s

优化后

[root@lab101 phoronix-test-suite]# time dd if=/dev/zero of=/dev/null bs=1 count=100000000

100000000+0 records in

100000000+0 records out

100000000 bytes (100 MB) copied, 44.8158 s, 2.2 MB/s

real      0m44.819s

user     0m8.747s

sys       0m36.070s


stress-ng测试


[root@lab101 testsuite]# wget https://phoronix-test-suite.com/releases/phoronix-test-suite-9.8.0.tar.gz

[root@lab101 testsuite]# tar -xvf phoronix-test-suite-9.8.0.tar.gz

[root@lab101 testsuite]# cd phoronix-test-suite

[root@lab101 testsuite]# ./phoronix-test-suite run pts/stress-ng

如果运行命令后,提示安装相关的包,选择Y进行安装即可,测试有很多项目,我们选择12: Context Switching这个就可以了,测试周期会短一些。

优化前测试结果

Stress-NG 0.11.07    

   Test: Context Switching    

   Bogo Ops/s > Higher Is Better    

   4773455.41

优化后测试结果如下

Test: Context Switching    

    Bogo Ops/s > Higher Is Better     

     6651314.67 |

可以看到调整前后差距还是很大的,上面的方法是需要重启才能调整,我们看下怎么在线调整

检查相关参数

[root@lab101 phoronix-test-suite]# cat /sys/kernel/debug/x86/pti_enabled1

[root@lab101 phoronix-test-suite]# cat /sys/kernel/debug/x86/retp_enabled1

[root@lab101 phoronix-test-suite]# cat /sys/kernel/debug/x86/ibrs_enabled0

临时关闭

[root@lab101 phoronix-test-suite]# echo 0 > /sys/kernel/debug/x86/pti_enabled

[root@lab101 phoronix-test-suite]# echo 0 > /sys/kernel/debug/x86/retp_enabled

通过上面的调整后到了540万,有一定的改善,但没有重启效果好

Stress-NG 0.11.07    

   Test: Context Switching    

   Bogo Ops/s > Higher Is Better    

   asd . 5407446.06

建议开始的时候就调整,在能重启的时候重启一遍服务器,不能重启的情况,也可以做一定的优化调整


总结


CPU漏洞相关patch对cpu效率有较大影响,对cpu有一定要求的操作,会受到比较大的影响,至少在cpu占用时间上面肯定是加长了,对于不需要相关补丁的场景,可以把相关补丁屏蔽掉,提供更好的性能的。