かみぽわーる

kamipo's blog

オンボードのRTL8111CのRX droppedがすさまじい件

最近のオンボードNICの蟹チップはRTL8111Cが多いかと思うんだけども、これ、普通にdebian入れてifconfigしてみたら、インストール直後にも関わらずものごっつい勢いで受信パケットのドロップが増えていってる。

# ifconfig 
eth0      Link encap:Ethernet  HWaddr 00:24:1d:2b:39:83  
          inet addr:192.168.0.30  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::224:1dff:fe2b:3983/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:10335 errors:0 dropped:5165038648 overruns:0 frame:0
          TX packets:5251 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:10953092 (10.4 MiB)  TX bytes:525748 (513.4 KiB)
          Interrupt:254 Base address:0x6000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:4 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:340 (340.0 B)  TX bytes:340 (340.0 B)

これ最初、こんなにパケットドロップして蟹チップ糞だと思ってたんだけど、そもそも受信パケット以上にドロップしまくってるとか意味わからんので調べてみたら、RTL8111CはPCI Express用のチップらしいのにもかかわらず、r8169はPCI用のドライバで、なんか知らないけどこのドライバで上がってるのが原因ぽいような気がした。

# lsmod | grep r8169
r8169                  31492  0 

なのでオフィシャル(Realtek)からRTL8111C用のドライバを落としてきて入れることにする。

# cd /usr/local/src/
# wget ftp://WebUser:DAx7h9V@202.65.194.212/cn/nic/r8168-8.012.00.tar.bz2

# aptitude install bzip2 build-essential linux-headers-`uname -r` -y

# tar jxvf r8168-8.012.00.tar.bz2
# cd r8168-8.012.00
# make clean modules
# make install

# rmmod r8169; depmod -a; modprobe r8168

これでパケットドロップしなくなる。

# ifconfig  
eth0      Link encap:Ethernet  HWaddr 00:24:1d:2b:39:83  
          inet addr:192.168.0.30  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::224:1dff:fe2b:3983/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:28 errors:0 dropped:0 overruns:0 frame:0
          TX packets:26 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:2274 (2.2 KiB)  TX bytes:3692 (3.6 KiB)
          Interrupt:254 Base address:0x6000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:18 errors:0 dropped:0 overruns:0 frame:0
          TX packets:18 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1680 (1.6 KiB)  TX bytes:1680 (1.6 KiB)

このままだと、リブートしたときにまたr8169が先に認識しちゃうので、initramfsを再構築しとく。

# echo r8168 >> /etc/initramfs-tools/modules
# update-initramfs -u

これでリブートしても安心。