引言
在一个企业的IT数据中心运行过程中,无论是服务器设备还是软件系统都有其自身的生命周期。在大型数据中心的运维过程中,设备、系统以及应用的滚动置换、软件迭代都是在日常维护中十分重要,却又极为常见的一个动作。在滚动置换中,会涌现出许许多多平时不被注意,但是一旦发生,影响面可能非常深远的技术问题。那么在这次的置换过程中,我们会遇到什么呢?
一、问题出现
8月10日我中心对核心系统数据库服务器进行了系统置换升级,操作系统版本由suse10sp4升级为suse12sp3,设备也由4年前的HP 680G7更新到了最新的华为RH2288H v3,期待性能有大幅提升。但是在投产置换后却发现批量作业耗时反而增加了30%(图1),对下游机构供数出现严重超时。
运维人员首先对批量作业进行了分析,仔细检查后发现批量中的拆分作业耗时相比投产前上升了超过100%。该作业的主要操作为将数据文件译码后,通过打包压缩向境外机构分发,但是批量逻辑及数据大小在投产前后均无明显变化(图2),机器性能更新换代后也应该有大幅提升,那么这个批量变慢又是怎么回事呢?
图1:


图2:

二、定位迷雾
经设断点检查,发现批量在执行过程中占用时间变长的主要为压缩文件的步骤。重新复盘投产变更,发现在此次变更中更换的部件有三个,1、操作系统版本2、存储盘机3、服务器设备,因此肯定是从这3个角度来进行排查。
1、操作系统版本
经测试,更换前的suse10sp4系统的压缩命令(zip)和更换后suse12sp3系统的压缩命令(zip)的效率并没有太大差异,测试结果显示在相同服务器条件下suse12sp3的zip命令压缩效率反而略高于suse10sp4。而在模拟批量测试过程中服务器整体的系统资源使用率:cpu使用率不到10%,实际内存使用率仅为20%,磁盘I/O平均仅1.4M每秒,资源方面完全不存在瓶颈。

2、存储盘机
对比投产前后,原服务器使用华为高端的OPEN31,新服务器使用华为中端盘机OPEN168,且分析当时批量时段的实时数据,发现盘机的确有周期性的响应时间,IOPS等指标有周期性的冲高,那么问题会不会就是出在盘机身上呢?于是将新服务器所连盘机全部置换为高端存储。

经过2天紧张的迁移工作,8月22日将新服务器盘机调整为高端盘机DCCS_D18K_146后,发现批量时段响应时间等各项指标仍然较高,对批量运行缓慢没有实质性帮助,问题原因仍不明朗。

3、服务器设备--突破性进展
在针对系统和盘机的排查碰壁以后,无奈之下只得转向最后一条,同时也是最不可能的一项--服务器设备。虽然老服务器是当年的顶配设备,但是此次更换的新老服务器有4年以上的代差。以CPU为例,老服务器采用的是Intel Xeon E7-4830 ,新服务器采用的是Intel Xeon E5-2658 v4,新服务器的cpu领先了老服务器整整4代。把两台服务器去对比性能,就好比去对比Iphone4去和IPhone X的性能差异。
1)然而事实令人大跌眼镜,8月27日测试发现,在新老服务器上分别运行相同的压缩命令对同样的数据进行压缩,虽然新老服务器在测试时整体CPU使用率都不到2%,但是新服务器耗时却是老服务器的2倍以上,同时可以观察到在命令执行时,仅一颗cpu在100%运作,其余cpu为空闲状态(新服务器56核,老服务器54核)。目光开始聚焦到CPU上。
老服务器耗时:20分40秒(见图1)
新服务器耗时:49分23秒(见图2)
图1

3)由于生产服务器不能随意用于测试,于是从库房中搬出了2台不同批次,同样型号的新老设备进行对比测试。发现即便均为新服务器,在使用ZIP命令压缩时也会表现出超过2倍性能差异:
新1服务器耗时:0分46秒
新2服务器耗时:0分20秒
其中新1服务器与生产置换升级后实际使用的新服务器一样,压缩效率较低,而另一台新2服务器明显性能较好,性能还要高于原生产上的老设备。

4)扩大测试样本后发现,同型号同系统服务器上,凡是在/proc/cpuinfo中带有spec_ctrl执行标志位的服务器效率都较低,无此标志位的设备运行效率都较高。而只有在microcode版本为 0xb00002a时,flags才含有 spec_ctrl。
机器性能情况 | BIOS版本 | 微码版本 | 内核版本 | 操作系统 |
慢 | V3.87 | 0xb00002a | 4.4.103-6.38 | Suse12sp3 |
慢 | V3.87 | 0xb00002a | 4.4.103-6.38 | Suse12sp3 |
慢 | V3.87 | 0xb00002a | 4.4.103-6.38 | Suse12sp3 |
快 | V3.79 | 0xb000021 | 4.4.103-6.38 | Suse12sp3 |
快 | V3.79 | 0xb000021 | 4.4.103-6.38 | Suse12sp3 |

四、厂商确认
1)发现此问题后立刻与厂商取得联系,SUSE novell公司9月7日答复,cpuinfo中的spec_ctrl标志位是2018年1月爆发的intel CPU幽灵漏洞补丁被修复的特有标志位。即当intel CPU上的幽灵漏洞补丁被修复后,该旗帜位才会显现。
当前该银行使用的suse12sp3内核"kernel-default-4.4.103-6.38.1"确实含有2018年1月发布的第一版intel漏洞修复程序,而这一版补丁对特定的CPU性能确实影响较大,且该版本不包含幽灵漏洞的开关开启与关闭选项,开启与否取决于硬件设备。即由CPU和设备微码决定是否开启。这与之前测试的现象相符,即同型号CPU,不同微码版本有不同的性能表现。
注:幽灵漏洞为x86架构下intel CPU的高危漏洞,它可以用来绕过虚拟机隔离,从云主机中窃取密码和数字秘钥等敏感信息。
·新内核版本4.4.103.6.38含有intel漏洞补丁内容:
https://hk.saowen.com/a/35a9bea89a091e4271037ed3986b8e2143f9a33ace2035e0c1ab8a899face93d

2)进一步与华为厂商确认得到如下结论:新内核4.4.103.6.38,配合Intel版本0xb00002a 时(此版本已合入华为服务器BIOS的3.87版本),intel 漏洞补丁就会被enable,补丁生效,而服务器性能较差与补丁生效有密切的关系。
·相关华为安全公告:
https://www.huawei.com/cn/psirt/security-advisories/huawei-sa-20180106-01-cpu-cn
·相关RH2288H V3 V387发布时间为2月28日:
https://support.huawei.com/enterprise/zh/servers/rh2288h-v3-pid-9901881/software/22885555?idAbsPath=fixnode01%7C7919749%7C9856522%7C21782478%7C21782482%7C9901881
·相关问题版本列表如下(涉及服务器型号):
产品名称 | 版本号 | 修复版本号 | 最早发布时间 |
CH121 V3 | Earlier than V100R001C00SPC255 (BIOS V387) versions | V100R001C00SPC255 (BIOS V387) | 2018-2-26 |
CH242 V3 | Earlier than V100R001C00SPC325 (BIOS V810 for CH242 V3 DDR4, BIOS V355 for CH242 V3) versions | V100R001C00SPC325 (BIOS V810 for CH242 V3 DDR4, BIOS V355 for CH242 V3) | 2018-3-13 |
RH2288 V3 | Earlier than V100R003C00SPC646 (BIOS V387) versions | V100R003C00SPC646 (BIOS V387) | 2018-2-28 |
RH2288H V3 | Earlier than V100R003C00SPC552 (BIOS V387) versions | V100R003C00SPC552 (BIOS V387) | 2018-2-28 |
RH5885 V3 | Earlier than V100R003C01SPC126(BIOS V355)V100R003C10SPC120(BIOS V810) versions | V100R003C01SPC126 (BIOS V355) | 2018-3-20 |
RH5885H V3 | Earlier than V100R003C00SPC217 (E7V2: BIOS V355, E7V3: BIOS V657) | V100R003C00SPC217 (E7V2: BIOS V355, E7V3: BIOS V657) | 2018-3-20 |
RH8100 V3 | Earlier than V100R003C00SPC226(E7V2&E7V3: BIOS V697 E7V4:BIOS V810) versions | V100R003C00SPC226 (E7V2&E7V3: BIOS V697 E7V4:BIOS V810) | 2018-3-24 |
五、问题解决
至此,核心数据库置换升级后批量运行缓慢问题原因已得到了确认:升级后服务器采用suse12sp3新内核4.4.103.6.38,配合华为服务器BIOS版本3.87(及以上)时,内核中附带的intelCPU的幽灵漏洞补丁就会被生效,进而在一定程度上会降低CPU性能,在特定场景下的性能降幅远超厂商评估的8%-20%,而达到了50%以上,造成此次批量运行缓慢。
考虑到新内核发布需要大量的研发、测试,临时解决方案确采取对硬件微码(BIOS)降级来关闭幽灵漏洞补丁。
六、小结
实际业务中批量运行缓慢问题成因多半较为复杂,可能性也较多。此次在问题初期的排查过程中也走了大量的弯路,耗费了大量的时间。完全是经验主义在作祟,被“新设备总是比老设备好”这样一个常规认知蒙蔽了双眼,捆住了双手。没有大胆去思考,大胆去尝试。直到逐步排查了多个可能项,把问题往最不可能发生的地方去考虑才发现了事情的真相。因此在问题分析过程中,需要善于思考,一旦出现与常规认知相悖的现象,此时可能就是问题解决的关节点,扩展思路、增加测试范围,有助于问题解决。




