なぜ RTL8111D ドライバの自動判別に失敗するのか

Intel D510MO に搭載されている NIC, Realtek RTL8111D 用 Linux ドライバは,本来 r8168 を使うべきところ,自動判別では r8169 が使われてしまう.

その理由は,ドライバ r8169 に RTL8111D で使えると間違って書いてあるからだ,という話.

ドライバの alias が不正確

PnP の昔ではあるまいし,品種ごとにシリアル番号 (PCIバイス ID) が付与されているのに,ドライバを間違えるとはどういうことなのだろうか?

ドライバには,対応デバイスPCIバイス ID 一覧表が含まれている.r8168 に RTL8111D のデバイス ID が含まれているのは正しい.

$ modinfo r8168
filename:       /lib/modules/2.6.31-19-server/updates/dkms/r8168.ko
version:        8.016.00-NAPI
...
description:    RealTek RTL-8168 Gigabit Ethernet driver
...
alias:          pci:v000010ECd00008168sv*sd*bc*sc*i* <- これ

しかし r8169 は RTL8111D に対応していないのに,RTL8111D のデバイス ID がデバイス alias に含まれている.

$ modinfo r8169
filename:       /lib/modules/2.6.31-19-server/kernel/drivers/net/r8169.ko
version:        2.3LK-NAPI
...
description:    RealTek RTL-8169 Gigabit Ethernet driver
...
alias:          pci:v000010ECd00008169sv*sd*bc*sc*i*
alias:          pci:v000010ECd00008168sv*sd*bc*sc*i* <- 重複
alias:          pci:v000010ECd00008167sv*sd*bc*sc*i*

さらに,一応は通信できてしまうので,問題が認識されない

間違って r8169 がロードされて,全然通信できないのなら問題がすぐ認識されるが,一応は使えてしまうので問題が認識されず,対処もされない.結果,微妙な問題が起きる,ということではないだろうか.

小さなファイルなら問題は無いが、大きなファイルになると、転送途中に必ずといって良いほど接続が途切れてしまう。
http://tokcs.com/blog/2010/01/10/server-lan/

3GB 程度のファイルをコピーしてみると、コピーが途中で止まってしまう現象が発生した。http://www.natzworks.com/digital/entries/2009/000222.html

ドライバ誤認識の理由は

RTL8111D の device ID が r8169 の device alias に間違って含まれているから.でもそれで一見使えてしまうのでなかなか直らない,というお話でした.

キーワード

  • D510, D510MO, BOXD510MO, Mount Olive
  • D945GCLF, D945GCLF2, D945GCLF2D, D945GSEJT
  • Ubuntu, Debian, Linux, リナックス
  • RTL8111, RTL8111B, RTL8111C, RTL8111CP, RTL8111D(L), RTL8111DP, RTL8111E
  • RTL8168, RTL8168B, RTL8168C, RTL8105E