一次网卡驱动BUG故障的排错历程

news2025/3/12 23:52:07

前言

在日常运维中,总会遇到一些棘手的故障或问题,尤其面临多系统融合的兼容性或一些融合节点可能存在未知bug等方面,排错难度都会增加。

本文将从一次小事件为入口进行延伸,将宿主机esxi基础系统的多融合节点故障的排错历程展开介绍,并结合排错过程介绍esxi基础系统稳定性所依赖的环境条件。

排错阶段一:故障初现,随机复现

一、故障初现

事件背景: 某职场一天下午现场反馈有几个人无线网络连接不上

事件原因: 无线连网认证的网络认证服务器到某台AD域控网络不通,用户无法获取ad状态拒绝连网

临时措施: 重启网络认证服务器的网络服务,恢复

问题现象:

网络认证服务器到部分目标ip不通(其中一台AD域控属于其中)

网络认证服务器到部分目标IP通(告警系统属于通的ip,未产生服务器告警)

esxi上部分虚拟机有类似问题,部分虚拟机正常

二、随机复现

疑问:为什么会出现这个问题,如何能够复现呢?

因为大部分核心业务系统都运行在esxi底层上,如何确认具体故障原因规避类似风险成为了重中之重。

1、抓包分析

与此同时,我们进行了该宿主机上的其他虚拟机详细检查,发现另一台虚拟机也存在部分ip不通的情况(本地服务无远程ip互通依赖,该虚拟机服务未受影响),根据该虚拟机进行了各链路节点抓包分析:

1、级联switch抓到了服务器发送的icmp reply包,但在上联核心switch未发现该reply

2、为了排除server发出的包构造异常,使用了tcpreplay工具(一种pcap包的重放工具,可以将用ethrealwireshark等工具捕获的网络数据包原样或经过任意修改后重放回去)在实验环境中进行了重写和重放,数据包正常发送接收证明了包构造正常(其实当时实验环境和故障环境有其他差异)

3、重启了交换机端口后,故障虚拟机恢复

当时结论:级联或上联switch有问题导致丢失数据包(该结论是误判)

2、复现尝试

虽有简单的结论,但需要复现故障才能确定具体问题环节!

Esix排查过程中发现了故障时间节点有一条异常日志可能有关联性

Ixgbenindrv_uplinkresetvmnic0 device reset started

查阅vmware相关论坛资料,发现了一条命令可以触发相同的日志出来(重要节点一)

VMkernel Sys Info Shellvsish -e set /net/pNics/vmnic0/reset 1

使用该命令在故障环境中成功的进行了复现,但在测试环境中无法复现

当时结论:vmnic0reset动作触发了故障,但满足故障发生的其他因素仍是未知

排错阶段二:环环相扣,错综复杂

疑问:到底是什么场景下,vmnicreset动作会触发这个故障呢?

为了测试满足故障触发的X因素有哪些,我们尝试枚举了至少十几种有可能关联的条件,排列组合了十多套测试场景,用于测试确认

枚举X因素: 物理机型号、网卡型号、esxi版本、NLB模式、端口组配置、VSwitch配置、交换机型号、交换机系统版本、虚拟机OS、虚拟机数量,虚拟机角色,网段、服务器跳线等

在进行了不下于50次的排列组合测试后,不同的X因素之间有矛盾又有重合,而且复现的规律和频率不固定,无法稳定复现,但最终确定并缩小了一定的条件范围

当时结论:基本确定以下为触发条件范围(非最终)

服务器:Dell R740xd

网卡:Intel(R) Ethernet Controller 10G X550

驱动:ixgben网卡驱动

交换机:35系列交换机

虚拟机linux

排错阶段三:稳定复现,找到关键

一、稳定复现

疑问:在这些条件范围中到底还有什么隐性因素可以决定故障能稳定复现呢?

在基本确定的触发条件范围中,有一项很特殊,为什么每次能复现故障的时候一定是linux虚拟机,而windows从未复现过。针对这一特殊性我们在排查过程中进行了重点关注,在多次组合测试后发现一个特征,出现问题的虚拟机在esxi底层显示虚拟机网络信息中SubType类型均为“6”重要节点二)

经过资料查询确认了subtype=6代表虚拟网卡类型为vlance ”[AMD] 79c970 [PCnet32]” ),出现vlance类型的原因是早期创建linux虚拟机向导中选择了其他linux系统esxi就会自动创建虚拟机网卡为vlance类型网卡

在实验环境中准备vlance类型网卡的虚拟机进行测试,最终“DELL机型+基于IP哈希+vlance”reset vmnic动作触发下可以稳定复现,并且复现的虚拟机到多个目标网络的测试是一半通一半不通,其中非基于IP哈希NLB模式无法复现

二、找到关键

疑问:稳定复现后,如何确定是哪一环节导致部分通部分不通呢?

与此同时,网络组在升级cisco厂家售后工单等级后,在资深售后的协助下,通过EPCEmbedded Packet Capture,一种嵌入式的抓包工具,有更强的灵活针对性,特别适用于网络排障和在线抓包的情况)多次抓包分析得到一个重要信息,当虚拟机出现问题的目标ip到达switch接收包vlan tag0,当虚拟机的正常目标ip到达时vlan tag则为正常的id号(重要节点三)

当时结论:出现故障时因接收到的是没有正确标注VLAN ID的数据包导致三层交换无法转发

排错阶段四:拨云见日,水落石出

一、拨云见日

1、确认故障因素:

疑问:是什么因素导致了vlan tag异常?

有了vlan tag丢失这个关键因素,我们对比了vmware官网中各个esxi版本的更新介绍,其中在6系列相关版本中均提到了有vlan tag相关的bug描述,并给出了临时处理方案,另在7.0版本中说明修复了该bug

在实验环境中复现故障后,根据vmware的临时方案如愿恢复了故障

针对该方案命令的一些参数进行分析研究,命令效果是在esxi的底层网络部分将vlan相关的功能重启了一下(类似我们重启了网卡或交换机端口等操作)

另外我们将实验环节中的esxi升级为7.0后,该故障也无法复现了

当时结论:验证了vlan tag丢失导致问题,但该bug暂无详细说明

2、确认故障环节:

疑问:问题好像找到原因了,但是到底哪个环节导致vlan tag丢失了呢?

从虚拟机到switch还要经过Esxi层多个网络环节:f拟机,端口组,vswitch,物理网卡

通过esxi底层的pktcap-uw抓包工具(高级版的抓包及分析工具,主要应用在ESXi 5.5以后的版本中)对esxi底层三段网络链路进行了同时抓包

测试场景结果虚拟机到端口组数据包正常,vlan tag正常端口到vswitch数据包正常,vlan tag正常vswitch到物理网卡数据包正常,vlan tag正常物理网卡到交换机数据包正常,vlan tag异常

当时结论:物理网卡导致了vlan tag丢失

二、水落石出

1、确认故障原因:

疑问:物理网卡为什么会导致vlan tag丢失?

根据DELL机器所搭配的万兆网卡X550的特性进行资料搜索,我们在lenovo的官方论坛中找到了一篇关于10G ixgben网卡在1.8.7驱动版本中修复了vlan tag相关bug的说明,我们的版本是:1.7.10(重要节点四)

于是我们将故障宿主机的网卡驱动升级到了高版本进行测试,故障场景无法再复现

为了进一步确认关联性,又进行了多次组合测试

测试场景结果将故障宿主机的绑定线路换到千兆网卡无法复现esxi6.*升级到8.0(此时网卡驱动自动升为1.13.10)无法复现将esxi8.0的网卡驱动降级为1.7.10故障复现将万兆X5501.7.10)网卡安装在HP服务器中故障复现

至此,在整个排错过程中不同环节的疑问都得到了合理的解释

疑问1 为什么同样的DELL宿主机型号和vmware配置和网络配置,有的复现,有的不能复现?

此类故障影响的是网卡为vlance类型的虚拟机

疑问2 为什么同一台宿主机linux出故障,windows不出故障

故障linux属于vlance类型网卡(当安装操作系统时选择版本其他引起),windows属于E1000网卡

疑问3 为什么将负载均衡模式调整为其他非基于ip哈希+trunk”模式,就不能复现

因为基于ip哈希+trunk”工作模式涉及网络层打vlan tag,触发ixgben1.7.10版本驱动bug问题,其他的搭配如:基于ip哈希+access,基于源虚拟端口,基于源mac等负载均衡模式均不涉及网络层vlan tag

疑问4 为什么虚拟机出现故障时到目标ip是一半通一半不通

基于ip哈希的算法会对源及目标ip进行哈希计算分配不同的物理链路,当reset其中一块网卡时,一半目标受影响

疑问5 为什么hp的宿主机不能复现

hp宿主机没有搭配x550的万兆网卡(ixgben1.7.10

疑问6 为什么将esxitagging设置为开启不作为根本解决方案

因为开启后,类似于开启混杂模式。将会暴露更多的安全风险

疑问7 为什么本次遇到的vlan tag丢失不属于esxi6.7的版本bug(官方有说7.0修复类似bug

因为采用esxi高版本搭配ixgben1.7.10依然可以复现

总结:

通过完整的排错下来,最终确定了引起该事件的根本原因,以下四个条件同时满足会触发该类故障

条件一: 使用驱动ixgben 1.7.10X550网卡

条件二: 采用基于IP哈希的负载均衡模式

条件三: 虚拟机虚拟网卡型号为“vlance”

条件四: ESXIvmnic发生reset动作

眼见不一定为实,在复杂的故障场景分析中,会有很多的干扰因素影响着我们的判断,通过不断的排列组合去在差异中找共性、在共性中找差异是一种剔除干扰信息的方法之一;抱着去伪存真精神找到问题背后的根源,才能提供更有效的解决方案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1598867.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[linux]进程控制——进程终止

一、main函数的返回值 我们在编写C语言的程序时,通常会这样写: int main() {return 0; } 那么我们为什么要返回(return)0 呢? 其实,main函数也是一个函数,它也会被调用,所以谁调…

go限流、计数器固定窗口算法/计数器滑动窗口算法

go限流、计数器固定窗口算法/计数器滑动窗口算法 一、问题 问题1:后端接口只能支撑每10秒1w个请求,要怎么来保护它呢? 问题2:发短信的接口,不超过100次/时,1000次/24小时,要怎么实现&#xff…

RN向上向下滑动组件封装(带有渐变色)

这段组件代码逻辑是出事有一个View和下面的块,下面的块也就是红色区域可以按住向上向下滑动,当滑动到屏幕最上面则停止滑动,再向上滑动的过程中,上方的View的背景色也会有个渐变效果,大概逻辑就是这样 代码如下 import React, {useEffect, useRef, useState} from react; impo…

这样的看板你喜欢吗?

看板这个功能很多项目管理软件都有这个功能。基本上都是分类列表,大致分为 已完成、开发中、规划中 分类也是可以自己添加的 每个分类就是一个列表。 但是我个人觉得相对于文字来说人对图像更敏感,项目管理中一个重要的因数时间在上面看板并没与体现出来…

HBase2.x学习笔记

文章目录 一、HBase 简介1、HBase 定义1.1 概述1.2 HBase 与 Hadoop 的关系1.3 RDBMS 与 HBase 的对比1.4 HBase 特征简要 2、HBase 数据模型2.1 HBase 逻辑结构2.2 HBase 物理存储结构2.3 HBase的表数据模型 3、HBase 基本架构3.1 Master3.2 Region Server3.3 Zookeeper3.4 HD…

yolov8目标检测 部署瑞芯微rk3588记录

1. 前置条件 本地电脑系统,ubuntu20.04 训练代码: 训练代码下载的ultralytics官方代码 SHA:6a2fddfb46aea45dd26cb060157d22cf14cd8c64 训练代码仅做数据修改,类别修改,代码结构未做任何修改 需要准备的代码&#…

Spring GA、PRE、SNAPSHOT 版本含义及区别

GA:General Availability: 正式发布的版本,推荐使用(主要是稳定),与maven的releases类似; PRE: 预览版,内部测试版。主要是给开发人员和测试人员测试和找BUG用的,不建议使用; SNAPSHOT: 快照…

智能装箱机:打造高效物流新时代的革命性工具

在快节奏的现代生活中,物流行业的效率与智能化水平直接关系到消费者的购物体验和企业的市场竞争力。装箱机作为物流包装中重要的一个环节,其智能化升级已成为行业发展的必然趋势。星派将与大家探讨装箱机为什么说是智能化装箱解决方案? 一、装箱机的智能…

C# 超高速高性能写日志

1、需求 需求很简单,就是在C#开发中高速写日志。比如在高并发,高流量的地方需要写日志。我们知道程序在操作磁盘时是比较耗时的,所以我们把日志写到磁盘上会有一定的时间耗在上面,这些并不是我们想看到的。 2、解决方案 2.1、简单原理说明 使用列队先缓存到内存,然后我…

WARNING: No swap limit support——查看docker状态时提示警告

环境:Ubuntu 20.04 1、警告详情 执行命令 service docker status如下图 2、解决办法 2.1 修改文件 执行命令 vim /etc/default/grub在GRUB_CMDLINE_LINUX中追加cgroup_enablememory swapaccount1,如下: # If you change this file…

2024年工程师职称水平能力测试考试难吗?

大家现在都知道,现在湖北中级和高级职称评审,都必须要先报名一个水平能力测试考试,水测考过了之后才能参加评审,那么很多人都不知道水测到底难不难?能不能考过?水测主要是考什么呢? 职称水平能力…

IP地址是随着网络变化的吗?

IP地址,即互联网协议地址,是分配给每个联网设备或网络接口的数字标签。它在网络通信中起着至关重要的作用,是设备之间互相识别和通信的基础。然而,关于IP地址是否随着网络变化,这是一个值得深入探讨的问题,…

高效办公-电脑驱动管理

一、计算机硬件与驱动程序的关系 之前讲电脑的组成时候说了一嘴电脑由硬件和软件组成。软件运行在操作系统上,硬件则需要驱动来匹配运行。在计算机系统中,硬件设备的操作和控制需要通过驱动程序来实现,驱动程序在操作系统和硬件设备之间起到桥…

ABAP CONVERSION_EXIT_ATINN_INPUT

CONVERSION_EXIT_ATINN_INPUT 因为在直接使用ZMM015这个特性值会报错 点击执行之后: 然而这个是N类型的,我们的筛选条件是C类型的,数据类型是不匹配的。 这个是经过转换的

安卓官方例程

https://learn.microsoft.com/zh-cn/shows/connecton-demand/202?sourcerecommendations https://learn.microsoft.com/zh-cn/visualstudio/cross-platform/cross-platform-mobile-development-in-visual-studio?viewvs-2022 https://learn.microsoft.com/zh-cn/shows/xamari…

temux安装debian自用记录

http://ip:9001/ user/123 http://ip:5705/index admin/drpy 一、安装Ubuntu1804 1.首先安装termux.app 2.启动该app,输入命令 curl -Lo l l.tmoe.me; sh l 3.运行过程中连续选“Y”&…

记录一次内存溢出

1、查看catalina相关日志,确定关键字相关行号 文件:catalina.out命令1:cat -n catalina.out |grep -a OutOfMemoryError与内存溢出相关的如上,每一个行号其实都对应到具体时间点。可以发现,这个范围相符合&#xff1…

如何用ServBay快速构建下一代GraphQL应用

在本指南中,我们将深入探讨如何利用ServBay一站式环境和Docker,构建可扩展的GraphQL微服务。我们将从微服务架构和GraphQL的基础知识入手,逐步深入到如何利用现代工具和技术构建、容器化并部署我们的微服务。 理解微服务架构 微服务架构是一…

【算法】删除链表中重复元素

本题来源---《删除链表中重复元素》。 题目描述 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回已排序的链表 。 示例 1: 输入:head [1,1,2] 输出:[1,2]示例 2: 输入…

java-生产者消费者

目录 1.生产者消费者1.1生产者和消费者模式概述【应用】1.2生产者和消费者案例【应用】1.3生产者和消费者案例优化【应用】1.4阻塞队列基本使用【理解】1.5阻塞队列实现等待唤醒机制【理解】 1.生产者消费者 1.1生产者和消费者模式概述【应用】 概述 生产者消费者模式是一个十…