网卡是Linux服务器中比较重要的网络设备。据统计,网络故障通常发生在网络七层模型的下三层,即物理层、链路层和网络层。对应于实际网络也就是使用的网络线缆、网卡、交换机、路由器等设备故障。最近发现一台Dell 910的服务器在负载高的情况下或大压力测试中会出现无故中断,重启服务器就好了,经查服务器使用的网卡为Broadcom(博通)千兆网卡。在反复查证线缆、硬件、系统和网络方面确定没有问题后,决定升级网卡驱动。
首先从厂商或官网下载最新驱动。
1.下载网卡驱动安装文件,通常为tgz格式后缀的压缩文件,例如
BroadCom5709.tgz
2.将安装文件拷贝到服务器的Linux目录下,例如/tmp。用tar命令将文件解压缩
tar xvfz BroadCom5709.tgz
解压缩后在目录下可以看到Bcom_LAN_16.2.0_Linux_Source_A01目录,里面有Linux_Readme  NetXtreme  NetXtremeII三个目录

第二步:安装驱动
查看一下升级前的驱动
[root@localhost ~]# ethtool -i eth0
driver: bnx2
version: 1.9.3
firmware-version: 6.2.0 NCSI 2.0.11
bus-info: 0000:04:00.0
开始升级
[root@localhost ~]#cd Bcom_LAN_16.2.0_Linux_Source_A01/NetXtremeII
[root@localhost ~]#rpm -ivh netxtreme2-6.2.23-1.src.rpm
[root@localhost ~]#cd /usr/src/redhat/SPECS
[root@localhost ~]#rpmbuild -bb netxtreme2.spec
[root@localhost ~]#cd /usr/src/redhatRPMS/x86_64
[root@localhost ~]#rpm -ivh netxtreme2-6.2.23-1.x86_64.rpm
[root@localhost ~]#/tmp/5709.BIN

(备注:安装过程中可能会用到系统的内核源码,驱动升级过程中如果出现缺少GCC的话也需要安装GCC。)

第三.检查驱动是否安装成功
[root@localhost ~]# lsmod |grep bnx2
bnx2                  224140  0
如果找到相应的驱动模块,则说明网卡驱动安装成功了。如果没找到,还可以通过modprobe来加载网卡驱动模块.
[root@localhost ~]# modprobe bnx2
最后查看一下升级后的驱动,发现已更新.
[root@localhost ~]# ethtool -i eth0
driver: bnx2
version: 2.0.23b
firmware-version: bc 6.2.0 NCSI 2.0.11
bus-info: 0000:0b:00.0
如果你想看到更详细的信息,可以通过modinfo命令.
[root@localhost ~]# modinfo bnx2
filename:       /lib/modules/2.6.18-164.el5/updates/bnx2.ko
version:        2.0.23b
license:        GPL
description:    Broadcom NetXtreme II BCM5706/5708/5709/5716 Driver
author:         Michael Chan <mchan@broadcom.com>
srcversion:     6E0DD070AB24C11F50B2712
alias:          pci:v000014E4d0000163Csv*sd*bc*sc*i*
alias:          pci:v000014E4d0000163Bsv*sd*bc*sc*i*
alias:          pci:v000014E4d0000163Asv*sd*bc*sc*i*
alias:          pci:v000014E4d00001639sv*sd*bc*sc*i*
alias:          pci:v000014E4d000016ACsv*sd*bc*sc*i*
alias:          pci:v000014E4d000016AAsv*sd*bc*sc*i*
alias:          pci:v000014E4d000016AAsv0000103Csd00003102bc*sc*i*
alias:          pci:v000014E4d0000164Csv*sd*bc*sc*i*
alias:          pci:v000014E4d0000164Asv*sd*bc*sc*i*
alias:          pci:v000014E4d0000164Asv0000103Csd00003106bc*sc*i*
alias:          pci:v000014E4d0000164Asv0000103Csd00003101bc*sc*i*
depends:       
vermagic:       2.6.18-164.el5 SMP mod_unload gcc-4.1
parm:           disable_msi:Disable Message Signaled Interrupt (MSI) (int)
parm:           stop_on_tx_timeout:For debugging purposes, prevent a chip  reset when a tx timeout occurs (int)

第四.配置网络
Red Hat LINUX中执行命令system-config-network 进行网卡配置
在打开的图形界面中选中网卡后按Edit 进行配置。注意网卡必须是Activate(激活)状态下才能正常使用,如果是Inactive 状态需要使用Activate 按键进行激活。
  

网卡驱动升级成功后,问题得到了解决,不再复现.

补充:升级网卡驱动后,重启又恢复原状的问题,对应解决方案:

    在安装新驱动之前,首先要关闭kudzu服务,并在ntsysv中关闭默认服务。之后卸载原有驱动,安装新驱动,就不会反复了.

    kudzu的作用:如果安装完Linux系统后,又添加了新的硬件,那么系统必须载入正确的驱动程序才可以使用它。Kudzu服务默认每次启动时都要运行,如果需要缩短启动时间,使用下面命令可以停止系统启动时的kudzu服务: # chkconfig kudzu off 如果要安装新的硬件,可以手动运行kudzu程序。