转载自华为服务支持的Eth网卡故障定界详细设计方案
网卡功能及接口

在计算机系统内,网卡是CPU系统的外设,在服务器产品里面就是PCI外设,是CPU系统的网络IO接口,连接外部网络的通道。在交换网络里,网卡是个端节点(实际上端节点是计算机)。网卡实现报文收发功能,为CPU系统和OS提供服务。网卡有Firmware和Driver,可以看做是处理器小系统。
网卡系统侧端口是PCIe,与CPU系统连接;网络侧端口是网络协议接口,目前应用的是Eth、FC、FCoE、IB;边带通信接口NC-SI,与设备管理系统连接;SMBus接口,与设备管理系统或者CPU系统连接;I2C接口,用于光模块、线缆管理;MDIO接口,用于管理外PHY。
网卡故障分析
网卡特性多,应用场景复杂无边界,与周边领域配套及耦合关系复杂,造成了其生态的脆弱性,问题点多,出问题概率大。网卡应用一旦出问题,最直接呈现的就是网络中断,业务受损,甚至挂死OS、宕机,影响很大。虽然故障原因不一定是网卡自身,但网卡常被做为故障排查的首要对象。
目前应用的网卡,包括Eth网卡、FC HBA卡、FCoE CNA卡、IB HCA卡。
下文针对Eth网卡(下文简称为网卡)应用故障以及故障定界定位进行分析说明。
1. 网卡故障分类
按照不同维度,网卡卡故障分类不同。
按照故障位置进行分类,可以分为硬件问题、Firmware问题、Driver问题、OS及上层应用问题、接口器件问题、外部网络问题(例如交换机)。
按照故障现象及原因,也就是故障模式进行分类,可以分为连接中断问题、连接闪断问题、Firmware挂死问题、IO阻塞问题、OS挂死问题、丢帧问题等。
进行问题定界分析时,一般按照故障位置进行问题分类、定界。进行问题定位分析时,一般按照故障模式进行问题分类、定位。
2. 网卡应用的协议分层
网卡作为CPU的网络IO接口,其主要功能还是在Eth接口上。网卡的Eth接口特性,同样满足TCP/IP协议层次架构。结合网卡自身的硬件、Firmware、Driver的功能结构,可以得到网卡应用的协议分层结构,如图所示。

网卡主要是处理物理层(PHY)码流、处理链路层(MAC)报文(帧),网络层、传输层协议由OS协议栈处理。从上图可以看到,网卡的PHY层模块主要完成物理层的编解码、AN(Auto Negotiation)、training、FEC等的处理,一般由网卡硬件和Firmware完成。网卡的MAC层模块主要完成Eth收发帧和链路层协议的处理,例如Pause、PFC、ETS、LLDP等,一般由Firmware和Driver完成。MDI层主要是光模块、线缆,或者背板PCB连接,与网卡的PHY层模块直接对接。
网卡对报文的处理,实质上在发送端,是对OS下发的报文(通过PCIe接口),提取payload并封装成Eth帧,进行发送,在接收端,把Eth帧分发到相应的队列,并通知OS来接收(通过PCIe接口)。
网卡会支持卸载特性,对TCP/UDP/IP报文进行卸载,实质是完成checksum offload、TSO、LRO等操作,并不是处理IP层、TCP/UDP层的协议,网卡不会对报文进行解析。网卡对报文头进行识别、匹配,目的只是根据匹配规则进行队列分发。部分网卡支持对一些链路层协议,例如LLDP、DCBX等,进行处理,即支持协议卸载功能。
3. 网卡故障定界定位难点
网卡应用复杂,问题多,故障频繁,但它的故障定界定位是很困难的,主要体现为几个方面。
1) 网卡Firmware是黑盒子,代码不开源。遇到问题只能依靠收集Firmware日志协助分析,但收集Firmware日志依赖厂家工具,不是所有厂家多支持,能支持的也只有部分OS及版本,而且Firmware日志只能由厂家解读,华为对商用网卡的Firmware日志没有分析能力。
2) 网卡没有告警机制。由于网卡是在OS下运用,而OS是开放的,所有OS都没有标准的外设告警接口设计,没有标准的带内带外通信接口,所以难以实现告警功能。网卡的Firmware、Driver自身检测到问题,也只能以日志形式进行记录。
3) 抓包操作对于网卡作用有限。不像交换机的转发模型,通过抓包就能比较入口与出口的报文差异进而分析问题。网卡发送端可以在外部网络进行抓包,但报文源头在OS,在OS上通过工具(例如tcpdump)抓包,难以直接对比报文差异来进行问题分析。网卡接收端报文是上送OS的,在OS上抓包是不完整的,主要是经过协议卸载(例如LLDP、DCBX、FIP)的报文无法抓取。
4) 网卡内部寄存器对外公开很有限,也没有提供查询接口,遇到问题难以像LSW、PHY芯片那样通过读取寄存器方式进行定位,尤其是PHY层链路连接的问题,无日志,无抓包,无寄存器查询方法。
5) 网卡与业务层相关的问题难定界。网卡很多特性应用,例如DPDK、SR-IOV、OVS Offload,与业务层强耦合的,网卡提供数据收发通道,提供流表做队列分发,但网卡没有提供队列及buffer监控、查询,报文监控等机制,难以证明是否网卡自身丢了帧造成性能下降。
4. 网卡故障定界能力提升思路
网卡问题要实现定位,是高度依赖厂家的,因为芯片硬件内部逻辑、Firmware、Driver (Linux Driver能看到源码)对用户是透明的,只有厂家自己清楚。如果是涉及业务层、OS层的特性应用问题,也对业务软件、OS(Linux能看到源码)强依赖。因此,网卡问题根因定位、精确定位的能力基本无法具备。而重点要解决的是网卡问题准确定界,以收敛范围,聚焦方向,避免发散。因此,本文侧重点是按照问题定界的思路,以故障位置进行分类,分析和确定各类问题的定界方法,实现能力提升和问题定界率的提升。
MDI层问题、PHY层问题、Firmware问题、Driver问题、OS层问题、外部网络问题。
网卡故障定界方案
根据前述的网卡问题定界思路,下文按照具体的故障模式进行问题分类,详细分析每种问题类的故障定界方案。问题类主要来源于已知的网上问题、测试问题,以及部分通过FMEA分析理论推导的问题。方案分析重点是说明问题定界的方法,即通过什么关键信息对问题进行判定,并分析是否适合使用工具化辅助的手段。
网口链路故障问题、Tx hang问题、混杂模式设置丢失问题、VF参数设置问题、中断丢失问题、DPDK性能下降问题、Pause风暴问题
UEFI Driver版本不配套问题、Internal Error问题、CQE Error问题、Firmware not responding问题、Firmware recovery mode问题、NC-SI边带通信中断问题、PXE失败问题、DCBX失败问题、LLDP失败问题、Unrecoverable ECC问题、Unrecoverable Error问题、PCIe链路故障问题
工具化辅助定位定界方案
完
网友评论