linux網卡驅動更新方法
kernel: eth0: igb_reset_task: Reset adapter解決方法
1、 LVS集群web項目,運行大概一個月左右出現訪問慢的情況,查詢mysql服務器時/var/log/message日誌文件,發現以下內容:
Dec 6 04:15:29 localhost kernel: igb 0000:01:00.1: eth1: Reset adapter
Dec 6 04:15:29 localhost kernel: igb 0000:01:00.0: eth0: Reset adapter
Dec 6 04:15:31 localhost kernel: igb: eth0 NIC Link is Up 100 Mbps Full Duplex, Flow Control: RX
Dec 6 04:15:31 localhost kernel: igb: eth1 NIC Link is Up 100 Mbps Full Duplex, Flow Control: RX
Dec 6 04:24:01 localhost kernel: igb 0000:01:00.1: eth1: Reset adapter
Dec 6 04:24:01 localhost kernel: igb 0000:01:00.0: eth0: Reset adapter
Dec 6 04:24:03 localhost kernel: igb: eth0 NIC Link is Up 100 Mbps Full Duplex, Flow Control: RX
Dec 6 04:24:03 localhost kernel: igb: eth1 NIC Link is Up 100 Mbps Full Duplex, Flow Control: RX
解決辦法:
根據各位同仁建議,是升級網卡驅動,根據各自服務器使用的網卡到官網下載。
http://www.intel.cn/content/www/cn/zh/homepage.html Intel官網,下載中心
wget https://downloadmirror.intel.com/13663/eng/igb-5.3.2.tar.gz
https://downloadcenter.intel.com/zh-cn/download/13663/-82575-6-82580-I350-I210-211-Linux-
2、 將當前內核(2.6.32-358.el6.x86_64)升級到目標內核(2.6.32-573.8.1.el6.x86_64),但是編譯的目標內核(2.6.32-573.8.1.el6.x86_64)的對應驅動程序並不一定支持當前系統的對應設備。本篇將詳細講述目標內核驅動無法支持當前網卡設備的處理步驟。
01、更新內核
CentOS release 6.4 (Final)對應的kernel默認為2.6.32-358.el6.x86_64
# uname -r
2.6.32-358.el6.x86_64
安裝增強功能需要kernel-devel包,必須保證kernel-devel和kernel版本的一致。查看軟件源中kernel-devel的版本:
# yum info kernel-devel
當前的kernel-devel版本是2.6.32-573.8.1.el6.x86_64。因此,必須升級kernel:
# yum update kernel
升級完後必須重啟系統,新的kernel才能被使用。
02、安裝kernel-devel和gcc
# yum install kernel-devel gcc gcc-c++
03、顯示所有網卡
由於一個系統可以支持多張網卡,可通過如下命顯示當前系統的所有網卡及其基本信息:
[[email protected]]# ifconfig -a
eth0 Link encap:EthernetHWaddr 0C:C4:7A:15:E3:58
inet addr:192.168.1.120 Bcast:192.168.1.255 Mask:255.255.255.0
inet6addr: fe80::ec4:7aff:fe15:e358/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:33988 errors:0 dropped:0 overruns:0 frame:0
TX packets:8164 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2939087 (2.8 MiB) TX bytes:1024040 (1000.0 KiB)
04、查看網卡所需驅動
使用ethtool命令可以查看指定網卡所以來的網卡驅動信息:
[[email protected]]# ethtool -i eth0
driver: igb - 網卡em3依賴igb驅動
version: 4.0.1-k
firmware-version: 3.29, 0x023b8000
bus-info: 0000:01:00.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: no
註:igb 驅動程序支持所有基於 82575 、 82576 、 82580 和 I350 的千兆位網絡連接。
錯誤信息:
[[email protected] ~]# lspci
-bash: lspci: command not found
問題原因:
這是因為沒有安裝pciutils包造成的。
解決辦法:
#yum install pciutils
05、查看網卡型號
通過③我們已經知道了網卡所依賴的驅動,但是還不知具體的網卡驅動型號,此時可通過如下命令查詢:
[[email protected] ~]# lspci -nn | grep "Eth"
01:00.0 Ethernet controller [0200]: Intel Corporation I350 Gigabit Network Connection [8086:1521] (rev 01)
01:00.1 Ethernet controller [0200]: Intel Corporation I350 Gigabit Network Connection [8086:1521] (rev 01)
註:Gigabit為千兆 10-Gigabit為萬兆
由④的操作可知當前內核(2.6.32-220.el6.x86_64)千兆網絡驅動igb支持網卡型號[8086:1521],因此必須要求目標內核(2.6.33-110.el6.x86_64)對該型號網卡[8086:1521]的支持。
06、查看目標內核的網卡驅動是否支持當前型號網卡
可以通過modinfo命令查看*.ko對哪種設備型號的支持,目標內核(2.6.33-110.el6.x86_64)的相關驅動可在/lib/modules/2.6.33-110.el6.x86_64的目錄想找到,如下所示:
#modinfo /lib/modules/2.6.32-358.el6.x86_64/kernel/drivers/net/igb/igb.ko
filename: /lib/modules/2.6.32-358.el6.x86_64/kernel/drivers/net/igb/igb.ko
version: 4.0.1-k
license: GPL
description: Intel(R) Gigabit Ethernet Network Driver
author: Intel Corporation, <[email protected]>
srcversion: 04D309663B138858B8AF619
alias: pci:v00008086d000010D6sv*sd*bc*sc*i*
alias: pci:v00008086d000010A9sv*sd*bc*sc*i*
alias: pci:v00008086d000010A7sv*sd*bc*sc*i*
alias: pci:v00008086d000010E8sv*sd*bc*sc*i*
alias: pci:v00008086d00001526sv*sd*bc*sc*i*
alias: pci:v00008086d0000150Dsv*sd*bc*sc*i*
alias: pci:v00008086d000010E7sv*sd*bc*sc*i*
alias: pci:v00008086d000010E6sv*sd*bc*sc*i*
alias: pci:v00008086d00001518sv*sd*bc*sc*i*
alias: pci:v00008086d0000150Asv*sd*bc*sc*i*
alias: pci:v00008086d000010C9sv*sd*bc*sc*i*
alias: pci:v00008086d00000440sv*sd*bc*sc*i*
alias: pci:v00008086d0000043Csv*sd*bc*sc*i*
alias: pci:v00008086d0000043Asv*sd*bc*sc*i*
alias: pci:v00008086d00000438sv*sd*bc*sc*i*
alias: pci:v00008086d00001516sv*sd*bc*sc*i*
alias: pci:v00008086d00001511sv*sd*bc*sc*i*
alias: pci:v00008086d00001510sv*sd*bc*sc*i*
alias: pci:v00008086d00001527sv*sd*bc*sc*i*
alias: pci:v00008086d0000150Fsv*sd*bc*sc*i*
alias: pci:v00008086d0000150Esv*sd*bc*sc*i*
alias: pci:v00008086d00001524sv*sd*bc*sc*i*
alias: pci:v00008086d00001523sv*sd*bc*sc*i*
alias: pci:v00008086d00001522sv*sd*bc*sc*i*
alias: pci:v00008086d00001521sv*sd*bc*sc*i*
alias: pci:v00008086d00001538sv*sd*bc*sc*i*
alias: pci:v00008086d00001537sv*sd*bc*sc*i*
alias: pci:v00008086d00001536sv*sd*bc*sc*i*
alias: pci:v00008086d00001533sv*sd*bc*sc*i*
alias: pci:v00008086d00001539sv*sd*bc*sc*i*
depends: ptp,dca
vermagic: 2.6.32-358.el6.x86_64 SMP mod_unload modversions
parm: max_vfs:Maximum number of virtual functions to allocate per physical function (uint)
parm: debug:Debug level (0=none,...,16=all) (int)
從以上信息中找不到[8086:1521]的信息,因此,目標內核(2.6.32-358.el6.x86_64)網卡驅動不支持當前網卡!
07、到官網下載網卡驅動
既然已經明確了目標內核的網卡驅動並不支持當前的網卡設備,也就是說一旦啟用新的內核,將導致系統無法正常使用網絡功能。如果是英特爾的網卡設備,則可到:http://www.intel.cn/content/www/cn/zh/homepage.html 下載所需的驅動源碼到本地。
08、編譯網卡驅動
解壓驅動源碼後,按照以下命令格式編譯驅動源碼:
#cd igb-5.3.2/src
#make BUILD_KERNEL=2.6.32-573.12.1.el6.x86_64
說明:2.6.32-573.12.1.el6.x86_64 為內核版本,請根據自己的服務器內核版本輸入;
以上命令將會生成網卡驅動igb.ko。其中BUILD_KERNEL指明需要為哪個內核編譯驅動,默認是給當前正在運行的內核編譯,在此我們設定為目標內核(2.6.32-573.12.1.el6.x86_64)。那麽又該如何查看新生成的網卡驅動igb.ko是否支持當前的網卡設備呢?
09、檢查網卡驅動是否支持當前網卡
步驟⑦將會生成網卡驅動igb.ko,這時可通過modinfo命令驗證該驅動是否支持網卡設備[8086:1521],如下所示:
[[email protected] src]# modinfo igb.ko
filename: igb.ko
version: 5.3.2
license: GPL
description: Intel(R) Gigabit Ethernet Network Driver
author: Intel Corporation, <[email protected]>
srcversion: B821C1F6B2F95B48EC6DFDA
alias: pci:v00008086d000010D6sv*sd*bc*sc*i*
alias: pci:v00008086d000010A9sv*sd*bc*sc*i*
alias: pci:v00008086d000010A7sv*sd*bc*sc*i*
alias: pci:v00008086d000010E8sv*sd*bc*sc*i*
alias: pci:v00008086d00001526sv*sd*bc*sc*i*
alias: pci:v00008086d0000150Dsv*sd*bc*sc*i*
alias: pci:v00008086d000010E7sv*sd*bc*sc*i*
alias: pci:v00008086d000010E6sv*sd*bc*sc*i*
alias: pci:v00008086d00001518sv*sd*bc*sc*i*
alias: pci:v00008086d0000150Asv*sd*bc*sc*i*
alias: pci:v00008086d000010C9sv*sd*bc*sc*i*
alias: pci:v00008086d00000440sv*sd*bc*sc*i*
alias: pci:v00008086d0000043Csv*sd*bc*sc*i*
alias: pci:v00008086d0000043Asv*sd*bc*sc*i*
alias: pci:v00008086d00000438sv*sd*bc*sc*i*
alias: pci:v00008086d00001516sv*sd*bc*sc*i*
alias: pci:v00008086d00001511sv*sd*bc*sc*i*
alias: pci:v00008086d00001510sv*sd*bc*sc*i*
alias: pci:v00008086d00001527sv*sd*bc*sc*i*
alias: pci:v00008086d0000150Fsv*sd*bc*sc*i*
alias: pci:v00008086d0000150Esv*sd*bc*sc*i*
alias: pci:v00008086d00001524sv*sd*bc*sc*i*
alias: pci:v00008086d00001523sv*sd*bc*sc*i*
alias: pci:v00008086d00001522sv*sd*bc*sc*i*
alias: pci:v00008086d00001521sv*sd*bc*sc*i*
alias: pci:v00008086d00001539sv*sd*bc*sc*i*
alias: pci:v00008086d0000157Csv*sd*bc*sc*i*
alias: pci:v00008086d0000157Bsv*sd*bc*sc*i*
alias: pci:v00008086d00001538sv*sd*bc*sc*i*
alias: pci:v00008086d00001537sv*sd*bc*sc*i*
alias: pci:v00008086d00001536sv*sd*bc*sc*i*
alias: pci:v00008086d00001533sv*sd*bc*sc*i*
alias: pci:v00008086d00001F45sv*sd*bc*sc*i*
alias: pci:v00008086d00001F41sv*sd*bc*sc*i*
alias: pci:v00008086d00001F40sv*sd*bc*sc*i*
depends: i2c-core,ptp,dca,i2c-algo-bit
vermagic: 2.6.32-573.8.1.el6.x86_64 SMP mod_unload modversions
終於在顯示的信息中找到了[8086:1521]信息,說明新生成的驅動文件能夠支持當前網卡型號。那麽如何讓目標內核(2.6.32-573.8.1.el6.x86_64)能夠載入新驅動呢?
09、更新目標內核驅動
# cd /usr/local/src/igb-5.3.2/src
# make install
# rmmod igb; modprobe igb
對於120秒超時問題在/etc/sysctl.conf文件裏面添加
vm.dirty_background_ratio=5
vm.dirty_ratio=10
10、以上工作完成後,可以重啟系統了!
[[email protected] src]# ethtool -i eth0
driver: igb
version: 5.3.2
firmware-version: 1.52, 0x800007ae
bus-info: 0000:01:00.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: no
linux網卡驅動更新方法