服务器宕机可能是很多运维工程师最可怕的噩梦。谷歌的一项钻研表明:大多数死机故障是由内存问题而引起的,而且每年有1/3的谷歌服务器都会呈现可纠正的内存故障,而有1/100的谷歌服务器会呈现不可纠正的内存故障,后者是造成零碎宕机的典型状况之一。

如果有人说,用软件的形式,能够解决硬件的内存问题,还能缩小30%的服务器宕机故障,你感觉牢靠吗?

以后的数据中心曾经走向软件定义的时代,从最后的软件定义网络SDN到软件定义数据核心SDDC。为了避免服务器宕机的意外产生,越来越多的企业开始思考软件定义的解决方案,并通过软件定义的可靠性屏蔽服务器、内存等硬件故障带来的影响。

那么软件是如何实现对内存以及服务器可用性的晋升呢?

基于MCA的内存ECC技术

内存故障十分多,就看零碎能不能辨认进去,有些故障是内存单个或多个bit字节故障,有些是内存颗粒故障,有些是内存颗粒上的单行或单列的存储单元呈现故障,还有firmware故障、内存控制器故障,还有一些是内存金手指焊接点老化、主板上的内存插槽松动或有灰尘等等。

器件品质类的故障只能通过工艺的改良来解决,而服气云要解决的是软件层面能够管制的bit级故障。往往大故障来自于所谓bit级小故障的继续积攒,这时要做的就是“防微杜渐” ,在小故障产生的时候就抓住它、,隔离它,防止影响扩充。 

Intel有一种机制叫做MCA(Machine Check Architecture),能够监测这种类型谬误。这个机制的运行形式是:首先需定义出这些谬误模型,把能够主动纠正的谬误叫做CE(Correctable Error),这些往往是任意单比特谬误、局部单颗粒多比特的谬误。然而一些谬误无奈主动纠正复原,会导致系统宕机,这些谬误被定义为UCE(Uncorrectable Error)。依据统计,CE/UCE类的问题类型占内存所有类型问题的59%。所以,如果可能设计一种故障检查和纠正的机制,其价值会十分大!

这个全套的谬误检查和纠正的机制就是ECC(Error Checking and Correcting)。ECC在遇到故障时首先会进行问题辨认,通过设计内存被动扫描机制,能够设置一天24小时不休(也能够调整)扫描和发现故障;辨认后判断故障地位(这里其实用到了一些非凡的bit计算和校验算法),认定故障地位后,就尝试隔离该有问题的内存空间,防止后续业务再次应用该内存空间。

服气云的内存ECC加强技术

业界支流的IT服务商都会利用Intel的MCA机制进行内存错误处理,然而其软件实现的精细化水平不一,比方有些服务商只是把CE谬误屏蔽掉,或者只是简略的告警,没有做进一步解决;还有一些服务商即便有告警然而无奈精确定位到产生问题的插槽。而服气云则提出了一个危险区机制,一旦产生内存谬误,就将问题单元置于一个“缓冲区”进行察看,当CE谬误达到肯定阈值则立即主动隔离有危险的内存区域,防止谬误持续扩充引起重大的宕机。

近年来,服气云在内存隔离复原机制上一直优化,在2022年1月推出的超交融HCI6.7.0中还对ECC机制进行了加强。

该加强机制的运行形式是:首先通过CPU的BIOS设置CE Record选项,使得硬件辨认出内存谬误,一旦发现CE/UCE谬误,硬件就会把这个谬误上报给服气云的软件。而后轮到软件机制上场,OS零碎先是判断这个内存是否被软件(包含应用软件和操作系统)应用,如果没有应用就间接隔离,不容许再调配给软件应用。

如果被软件应用了,就获取软件的上下文,判断辨别其是被操作系统内核(in_kernel)或者被用户应用软件(in_user)应用。

■ 如果是被应用软件(in_user)应用,对于CE可纠正错误,服气云的内存ECC加强机制就用一块好的内存区域替换掉有谬误的内存区域,这个过程中业务齐全不受影响。如果是UCE不可纠正的谬误,该机制就重新启动该过程,把谬误的内存区域释放出来并隔离进来不再应用。过程重启后就能够应用齐全失常的内存了。
 

■ 如果是被操作系统内核(in_kernel)应用,服气云的内存ECC加强机制就把有谬误的内存区域的信息记录下来,在零碎再次启动的时候,该机制会隔离这些有谬误的内存,以保障其不会被再次应用。


↑ 服气云ECC主动纠错机制原理

推出上述机制后,服气云在1000台主机环境中进行了验证。后果证实,通过软件管制的ECC机制,服气云可能提前发现内存异样,并且100%主动隔离胜利,能够提前处理以躲避更大的故障影响,总体上绝对原有形式可能缩小30%的服务器宕机故障

回到结尾的问题,用软件能够解决硬件层面带来的问题吗?毫无疑问,当然能够!服气云的ECC机制就通过创新性的软件技术更加精确、智能地管制了服务器的内存故障问题,无效地进步了IT零碎的可靠性。

以上就是本期《服气云黑板报》关于软件定义可靠性和ECC机制的分享,欢送关注我,继续看到更多技术干货内容哦!