文章目录
背景
Mellanox网卡在服务器上CPU与网卡通过PCIe连接,软件上HOST是内核态驱动,NIC上是Firmware(FW)程序。HOST上通过类似“心跳机制”来确保FW还在正常工作,这个机制就是poll_health。本文以一个FW报错为例子介绍这个机制
health机制
为了确认固件(FW)的健康状态,iseg(初始化段)中暴露了一个健康计数器、综合症(syndrome)以及一个包含高级调试信息的相关缓冲区。iseg分析参考:Mellanox驱动中的iseg是什么?如何指定哪些PCIe设备绑定到驱动?
健康计数器每10毫秒由固件(FW)递增一次,并由软件(SW)进行监控。它应该由一个独立的线程进行监控,该线程不会因等待命令完成而阻塞。如果计数器未能递增,则表明系统健康状态不佳,
报错
报错:poll_health:834:(pid 0): device’s health compromised - reached miss count
详细报错信息:

可以看到这个错误是由于网卡温度过高。实际情况是服务器的风扇开启不足,造成BF2 DPU温度过高从而触发这个机制。触发机制是:health模块每隔2秒检查一次FW的状态,如果有异常通过print_health_info打印信息。打印的信息内容是硬件寄存器中的信息。详细参考health buffer章节
检查机制
网卡驱动在初始化的时候会启动一个定时器timer,每个2秒调用poll_health函数。该函数被回调后检查固件的信息。然后根据情况做出响应动作。
内核定时器机制触发定期检查
u64 poll_interval_ms = mlx5_tout_ms(dev, HEALTH_POLL_INTERVAL); #这里定义下次到期时间的定义 最终是2000ms
struct mlx5_core_health *health =

最低0.47元/天 解锁文章
5328

被折叠的 条评论
为什么被折叠?



