前几周我装了5台高性能PC机用来性能测试,网卡是板载的并没有太在意。这周开始做测试了,开始跑测试程序的时候总出问题,没跑一会儿服务器就卡死了。开始开发的同事以为是测试程序的问题,开始从头到尾找问题(多好的同事啊,先从自己身上挑毛病)^_^。可是后来发现不对啊,程序没问题。开始来找我让我看看是不是系统哪里出毛病了,于是我让他们重新执行测试程序不断的给服务器加压。果然没过一会儿5台机器里的一台就卡住了,如果用ping 检查发现还是能通的,不过延迟会上万……
奇怪的是我直接接上显示器登录机器的时候发现 机器负载并不高,而且各种资源都很闲,这是为什么?再ping 别的机器,延迟也是上万。第一反应是网卡有问题,重启了一下网络 /etc/init.d/network restart 再ping 一切正常,拷贝了一个大文件,10MB/s 的速度拷贝了5分钟,并没有发现问题。这是为什么呢?先看看网卡类型吧,
ethtool -i eth0
driver: r8169
哦,集成的r8169芯片啊,不过听说这个网卡在Linux下会出一些问题,从网上搜了下,果然好多人都说这个网卡CentOS自带的驱动不好,那就干脆换成官方的吧!
于是就上Realtek去搜索R8169的驱动,找到了,几十K很快就down下来,
解压缩,lsmod |grep r8169 然后 rmmod r8169 删除之后 再make clean modules
结果在这时候出错了
make clean modules
make -C src/ clean
make[1]: Entering directory `/soft/r8169-6.012.00/src’
rm -rf *.o *.ko *~ core* .dep* .*.d .*.cmd *.mod.c *.a *.s .*.flags .tmp_versions Module.symvers Modules.symvers rset modules.order Module.markers
make[1]: Leaving directory `/soft/r8169-6.012.00/src’
make -C src/ modules
make[1]: Entering directory `/soft/r8169-6.012.00/src’
make -C /lib/modules/2.6.18-128.el5/build SUBDIRS=/soft/r8169-6.012.00/src modules
make[2]: Entering directory `/usr/src/kernels/2.6.18-128.el5-x86_64′
CC [M] /soft/r8169-6.012.00/src/r8169_n.o
/soft/r8169-6.012.00/src/r8169_n.c: In function ‘rtl8169_alloc_rx_skb’:
/soft/r8169-6.012.00/src/r8169_n.c:3012: error: ‘uintptr_t’ undeclared (first use in this function)
/soft/r8169-6.012.00/src/r8169_n.c:3012: error: (Each undeclared identifier is reported only once
…………
后面省略。这是怎么回事?有很多未定义很多错误,有网友告诉我要装kernel-head还有kernel-devel ,可是我这两个都装了啊
rpm -qa |grep kernel
kernel-devel-2.6.18-164.15.1.el5
kernel-devel-2.6.18-128.el5
kernel-headers-2.6.18-164.15.1.el5
kernel-2.6.18-128.el5
这可怪了,有几个做开发的朋友告诉我让我修改驱动源代码一个个指定上面的那些缺少和找不到的变量,我晕还要改源代码….. 我又一想是不是因为驱动程序不对啊,于是 用 lspci 查看了一下 lspci |grep Ethernet
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 03)
咦这不是 R8168B吗!我说怎么不让我装驱动呢…可是为什么系统会认成了R8169呢?于是我把所有关于 R8169 的模块和驱动都删掉了,重新启动了一下,结果发现系统仍然把他认成 R8169,没办法重装 R8168驱动吧,在官网搜了下
下载最新的驱动 版本是r8168-8.018.00,解压缩一看,这个简单 直接给个执行权限 然后 ./autorun.sh 全自动执行了,呵呵
再看看现在用的是哪个驱动
ethtool -i eth0
driver: r8168
version: 8.018.00-NAPI
firmware-version:
bus-info: 0000:02:00.0
呵呵,已经OK了,新驱动加上了,不过还要改点东西让 r8169彻底消失
vim /etc/modprobe.conf
alias eth0 r8168 #这里原来是 r8169 把他改成r8168就好了
重启了一下网络 ,然后让开发的同事继续跑测试程序,ok跑了一个小时没有出现问题,在网上搜索的时候发现与我类似的问题还有很多,都是系统自带R8169网卡驱动造成的,建议大家如果拿到这样的网卡还是重装一下驱动吧!
看来有时候Linux系统自带的驱动虽然能用但也会带来一些麻烦,O(∩_∩)O~