Last Update: 2011-12-18
ifconfig发现机器有很多错误包,如下:
eth1      Link encap:Ethernet  HWaddr 00:1e:67:07:ef:25  
         inet addr:192.168.0.146  Bcast:192.168.255.255  Mask:255.255.255.0
         inet6 addr: fe80::21e:67ff:fe07:ef25/64 Scope:Link
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:1370106046 errors:5336 dropped:0 overruns:0 frame:5336
         TX packets:1168372497 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000
         RX bytes:1468098380312 (1.3 TiB)  TX bytes:1199235165999 (1.0 TiB)
         Memory:b1a00000-b1a20000
相同配置,相同应用的机器都有这错误,所以抽空排查一下原因。
网线和交换机都是新的,网卡是 Intel千M,82574L 模块。
在sf.net上下载intel对应驱动e1000e,make install编译出错:
 
  
  1. root@d1-197:~/e1000e-1.6.3/src# make install

  2. make -C /lib/modules/2.6.32-5-amd64/build SUBDIRS=/root/e1000e-1.6.3/src modules

  3. make[1]: Entering directory `/usr/src/linux-headers-2.6.32-5-amd64'

  4.  CC [M]  /root/e1000e-1.6.3/src/netdev.o

  5. /root/e1000e-1.6.3/src/netdev.c: In function ‘e1000_runtime_resume’:

  6. /root/e1000e-1.6.3/src/netdev.c:6612: error: ‘struct dev_pm_info’ has no member named ‘runtime_auto’

  7. /root/e1000e-1.6.3/src/netdev.c: At top level:

  8. /root/e1000e-1.6.3/src/netdev.c:7466: error: implicit declaration of function ‘SET_RUNTIME_PM_OPS’

  9. /root/e1000e-1.6.3/src/netdev.c:7468: error: initializer element is not constant

  10. /root/e1000e-1.6.3/src/netdev.c:7468: error: (near initialization for ‘e1000_pm_ops.suspend_noirq’)

  11. make[4]: *** [/root/e1000e-1.6.3/src/netdev.o] 错误 1

  12. make[3]: *** [_module_/root/e1000e-1.6.3/src] 错误 2

  13. make[2]: *** [sub-make] 错误 2

  14. make[1]: *** [all] 错误 2

  15. make[1]: Leaving directory `/usr/src/linux-headers-2.6.32-5-amd64'

  16. make: *** [default] 错误 2

  17. root@d1-197:~/e1000e-1.6.3/src# ll /root/e1000e-1.6.3/src/netdev.o

最后,make CFLAGS_EXTRA=-DDISABLE_PM install ,才正常编译出来。
不过,更换了驱动,错误包仍存在。
尝试将交换机端口设置为强制1000M,系统里面也设置好强制千M,全双工,关自协商,但错误包反而更多了,看来使用默认设置一般更好些。google一下这问题,别人都建议检查交换机和系统设置两边是不是匹配,看来有时候会是因为两边设置不一致导致错误包的产生,但这种原因导致的错误包,在交换机端口里面也能显示。
测试

1. 交换机上强制百M,系统里面使用默认,不会出现错误包;

2. 编译更新了最新版本的驱动仍不正常;
# ethtool -i eth1
driver: e1000e
version: 1.9.5-NAPI
firmware-version: 2.1-0
bus-info: 0000:01:00.0

测试方法

1. 在一台机器上发送数据,执行命令:cat /dev/zero |nc -l -p 6666

2. 在被测试机器上执行命令:nc 192.168.200.145 6666

直接使用 ifconfig 观察是否产生错误包(errors 数目)