服务器启动过程检测PCIe设备丢失及恢复的功能实现

2024-01-24 08:52郑媛康艳丽孙建英
电脑知识与技术 2023年34期
关键词:恢复服务器

郑媛 康艳丽 孙建英

摘要:在服务器系统中,PCIe设备已成为不可或缺的组成部分,由于各种原因,会遇到非常低概率的PCIe设备在启动过程丢失问题,对服务器的正常运行造成严重的影响。服务器启动过程的检测PCIe设备丢失及恢复的功能,通过检测PCIe设备在启动过程中的链路训练结果,实现对设备丢失情况的监测,并在发现设备丢失时采取相应的恢复措施,经实验验证,该方法可以有效提高服务器的运行稳定性和可靠性,避免因PCIe设备丢失而造成的损失。

关键词:服务器;启动过程;PCIe;丢失检测;恢复

中图分类号:TP306        文献标识码:A

文章编号:1009-3044(2023)34-0091-03

开放科学(资源服务)标识码(OSID)

0 引言

随着云计算和大数据的快速发展,数据中心服务器数量呈爆发式增长。PCIe设备是服务器中的重要组成部分,PCIe千兆万兆网卡设备支撑大型局域网;PCIe磁盘阵列卡提高了存储容量及存储性能;图形处理器GPU提供了更强大的图片处理能力;还有HBA[1]卡,HCA[2]卡,固态硬盘(NVMe) ,新兴的智能网卡[3](SmartNIC) 等。它们的稳定性对服务器的正常运行有着至关重要的影响。然而,由于各种原因,如硬件故障、驱动程序错误或兼容性问题等,PCIe设备可能会出现丢失情况,一旦发生将严重影响系统的稳定性和可靠性。

在服务器的硬件系统中,UEFI平台是一种新的固件接口标准,取代了传统的BIOS,实现开机启动过程对服务器主板上硬件以及各种输入输出设备的初始化、设备驱动程序和配置管理程序等,为计算机提供最底层的硬件设置和控制,可以为PCIe设备的故障检测提供最直接信息,为故障恢复提供最快速的修复方法。

1 启动过程中PCIe设备检测现状

目前,在服务器启动过程中,UEFI固件代码会检测PCIe设备降速降带宽故障和AER错误,使用封装的IPMI命令,通过服务器主板上带外管理固件BMC (Baseboard Management Controller,基板管理控制器)连接的KCS[4]接口,将PCIe故障上报给BMC,记录故障信息到BMC SEL[5]日志中。但是,启动过程没有及时预警或上报PCIe设备丢失情况,多数情况都是启动到系统下才能发现有PCIe设备丢失故障。启动过程中的低概率PCIe设备丢失问题由于发生概率比较低,分析验证耗时长,收效甚微,对服务器生产和用户运维都会有很大影响。因此,如何快速准确地检测低概率PCIe设备的丢失情况并采取相应的恢复措施成为一个重要的问题。

2 启动过程中PCIe设备丢失原因分析

在服务器启动过程,PCIe设备丢失问题多数跟PCIe链路训练[6](Link Training) 出现问题有关。PCIe设备的链路训练是由PCIe链路物理层[7]的链路训练状态机(LTSSM[8]) 自动完成,PCIe链路双方通过自动协商链路速率和带宽,调节发送和接收参数,从而使得PCIe链路达到最佳信号质量。

以英特尔X86服务器为例,最新X86服务器处理器集成IO(Integrated IO,以下简称IIO) 提供PCIe根端口,可以配置X2,X4,X8,X16等带宽,提供GEN1、GEN2、GEN3、GEN4、GEN5速率支持。UEFI固件中的英特尔参考代码IIO的初始化部分,分为IIO早期链路训练和IIO后期链路训练两个阶段。IIO早期链路训练阶段之前,UEFI固件先要根据主板硬件设计,主要配置IIO PCIe根端口的带宽,IIO早期链路训练阶段,为PCIe根端口在链接训练之前进行链路时钟,链路均衡值等相关寄存器设置,启动PCIe根端口的链接训练。IIO后期链路训练阶段开始时,所有PCIe的根端口链路训练已经完成,该阶段主要任务是为PCIe设备枚举、资源分配及加载驱动程序之前配置所有PCIe接口,初始化IIO DMI和PCIe根端口相关PCI配置空间寄存器。

在IIO后期链路训练阶段开始时,轮询所有IIO PCIe根端口,检查链路状态。读取PCIe根端口配置空间链路状态寄存器(Link Status Register) ,如果检查到bit[3:0]当前链路速值(Current Link Speed) 和 bit[9:4] 协商链路带宽值(Negotiated Link Width) 为非零值,而bit[13] 数据链路层链路激活值(Data Link Layer Link Active) 值(该位表示数据链路控制和管理状态机的状态,返回值为1表示设备正常工作的状态,否则返回0) 为零,表示该PCIe根端口链路训练没有完成,IIO参考代码当前操作是将该PCIe根端口隐藏,后续不再对该PCIe端口进行枚举及分配PCIe相关资源,从而出现服务器启动阶段PCIe设备丢失的情况。

3 PCIe设备丢失检测及恢复功能设计

为了解决启动过程中因链路训练导致PCIe设备低概率丢失问题,对英特尔IIO参考代码部分进行了改进。在IIO后期链路训练阶段开始时,读取PCIe链路训练相关寄存器信息,如果发现PCIE链路失败,在服务器启动阶段屏幕显示,并向BMC发送告警信息,记录到BMC SEL日志中。然后对PCIe设备发送热重置命令,重新进行PCIe链路训练,如果尝试多次热重置命令不能使PCIe链路恢復,再通过执行重启系统命令的方式来恢复。

3.1 PCIe设备丢失检测及恢复功能原理

在IIO后期链路训练阶段开始,轮询读取PCIe根端口链路状态寄存器值时:

1) 判断当前IIO PCIe根端口链路PCI配置空间链路状态寄存器的当前链路速率值和协商链路带宽值是否为0。如果为0,说明该根端口没有接入PCIe设备,继续轮询下一个;如果不为0,判断数据链路层链路激活值是否为0,如果不为0,说明IIO PCIe根端口和PCIe设备链路训练完成,继续轮询下一个;如果为0,PCIE链路训练没有完成,该PCIe根端口没有激活。

2) 在这种数据链路层链路激活值为0情况下:

①首先通过编写代码将链路失败PCIe根端口的BDF(Bus,Device,Function,总线号,设备号,功能号)信息,红色字体显示到屏幕进行预警。用户通过查看屏幕显示及时了解到具体的PCIe设备有出现链路训练失败情况。

②其次将对应当前PCIe根端口的BDF信息通过跟BMC约定自定义命令格式,通过IPMI命令发送给BMC,记录具体PCIe根端口链路训练失败情况到BMC SEL日志,便于后面用户检查SEL告警日志。

③然后增加功能代码对链路训练失败PCIe根端口进行恢复操作,尝试对当前PCIe根端口的桥控制寄存器(Bridge Control Register) 的bit[6]二次总线复位值(Secondary Bus Reset) 去写1,通过软件方式让该PCIe根端口触发热重置,重新进行链路训练。

④PCIe链路训练是PCIe根端口和PCIe设备之间物理层的硬件行为,UEFI固件设置等待时间,待PCIe链路训练完成,再去判断当前PCIe根端口的链路状态寄存器中数据链路层链路激活值是否为1,同时读取当前链路速率值和协商链路带宽值是否达到该设备的预期值,即该PCIe设备是否达到支持的标称速率和带宽。如果条件不满足,则尝试再次对该PCIe根端口热重置,再次进行链路训练。

⑤对该PCIe根端口热重置3次后,如果其数据链路层链路激活值仍为0, 或读取当前链路速率值和协商链路带宽值一直没有达到预期设置,再次记录PCIe设备链路训练失败情况到BMC SEL日志,UEFI固件通过执行ResetSystem命令让系统重启,重新跑IIO初始化阶段,恢复PCIe设备重新识别。

⑥如果热重置后,PCIe根端口的数据链路层链路激活值为1,当读取当前链路速率值和协商链路带宽值也达到预期设置,继续轮询其他 PCIe根端口。

3) 所有IIO PCIe根端口轮询结束,服务器启动过程继续执行。服务器启动过程中,对PCIe设备丢失检测和恢复,具体流程图如图1所示。

3.2 PCIe设备丢失检测及恢复功能验证

针对PCIe设备丢失问题验证,设计两个实验来验证功能的有效性。

首先在研发实验室搭建服务器验证机台,将导入PCIe设备丢失检测及恢复功能的UEFI固件版本更新到待验证服务器上。通过对服务器启动过程中PCIe设备注错测试,验证该功能是否可以有效解决PCIe设备丢失后再恢复的问题。

然后对实际故障服务器机器进行验证,将复现过启动过程中PCIe设备丢失问题的PCIe设备和主板等设备搭建服务器测试机器一共3台,进行稳定性测试验证。先用测试机器跑稳定性验证跑出PCIe设备丢失问题,再将导入PCIe设备丢失检测及恢复功能的UEFI固件版本更新到待测服务器机器上,然后再进行稳定性验证。BMC SEL解析日志记录到的PCIe根端口链路失败的日志如图2所示。

4 结论

历时数月,通过模拟注错和实际搭建PCIe丢卡服务器测试机器长达数十万次稳定性验证,实验结果表明,该PCIe设备丢失检测及恢复功能设计能够有效检测上报PCIe设备的丢失情况,并对PCIe设备进行恢复链路训练,让PCIe设备重新被识别,保证了服务器系统的稳定性和可靠性,对工厂服务器生产测试和用户运维管理具有一定的应用价值。

参考文献:

[1] 俞则人,柴小丽,陆伟.基于FPGA的光纤通道HBA卡设计与实现[J].信息技术,2015,39(10):206-209.

[2] 谢林甫.面向InfiniBand控制器的PCI Express接口设计实现[D].成都:电子科技大学,2016.

[3] 王祎晨.一种ARM架构SOC智能网卡设计及路由优化方法[J].中国科技信息,2023(5):85-87.

[4] 汪涛.服务器基本输入输出系统和基板管理控制器之间红鱼接口的设计实现[J].信息记录材料,2022,23(3):154-156.

[5] 杨金颖,高文炜,罗雪,等.基于VPX平台的国产BMC设计與实现[J].微电子学与计算机,2021,38(8):80-86.

[6] 王齐.PCI Express 体系结构导读[M].北京:机械工业出版社,2010.

[7] 张亮.PCIe总线物理层的设计与验证[D].西安:西安电子科技大学,2013.

[8] 布达科.PCI Express系统体系结构标准教材[M].田玉敏,译.北京:电子工业出版社,2005.

【通联编辑:代影】

猜你喜欢
恢复服务器
通信控制服务器(CCS)维护终端的设计与实现
中国服务器市场份额出炉
得形忘意的服务器标准
计算机网络安全服务器入侵与防御
服务器操作系统可信加固技术研究
关于Linux的视频服务器开发与实现分析