2010年11月15日星期一

CentOS 5 Linux 使用 Realtek RTL8111B/8111C/8168 網絡晶片 1000Mbps 連線環境下超緩慢

在不斷演進的科技大世界中, 老舊的 10Mbps 和普及的 100Mbps 乙太網絡及裝置設備, 到現代 1000Mbps 網絡多媒體速度的追求, 平民百姓也可以組架自家的高速網絡; 近日在不經意的發現組建部分聯網電腦的 1000Mbps 連線龜速的緩慢, 無論瀏覽網頁或電郵及遠端連線, 甚至連接到 gateway 及 dns resolver 都失常的緩慢及反應遲頓, 感覺傳輸的資料封包(packet)有非同步的不斷重試傳輸現像, 最奇怪的連接到 Router 的管理網頁內也超緩慢(busy)。

在腦惱發作下終於無法忍受要尋找解決方法, 在實機環境發現相同問題的都是主機板配置 Realtek 網路晶片的電腦, 及使用 CentOS(RHEL) 5.5 Linux 系統, 在 1000Mbps switch 網絡交換機連線使用。

實機測試 CentOS 5.5 Linux 32bit, Kernel 2.6.18-194.17.4.el5PAE
主機板 P5QL-EM Realtek RTL8111C(支援 Jumbo Frame 6Kbyte)
D-Link DGS-1005D 5-port Gigabit Switch 交換機, 1000Mbps 連線
D-Link DI-524 2.4GHz (802.11g) Wireless Router 路由器, 100Mbps 連線
Linksys WRT54G 2.4GHz (802.11g) Wireless Router 路由器, 100Mbps 連線

在實機測試時, 不作任何調校及改動, 使用 Kernel 2.6.18-194.17.4.el5PAE 內建的 r8169.ko driver module 驅動程式, 網絡連線起動正常, DHCP 取 IP 及配置成功, 但是瀏覽網頁每頁都要等待超過五至十秒, 任何連線到 gateway router 都反應緩慢, Windows 系統的 Remote Desktop 連線(rdesktop)亦會一連線即失效(好像等待 timeout...)

更新使用 Realtek 網站的 Linux 驅動程式 8.019.00 2010/8/31 後
配置 1000Mbps Full Duplex 指令
# ethtool -s eth0 speed 1000 duplex full autoneg on

測試後發現問題仍然出現連線遲緩, 直至強迫使用 100Mbps 連線才回復連線品質, 十分奇怪的現像
# ethtool -s eth0 speed 100 duplex full autoneg on

在不斷重覆測試後, 發現此連線遲緩主要是 Linux 內的網絡連接觸發時間(亦可能是協同及 switch 紀錄不協調吧), 最神奇的是只要將配置指令執行多次, 網絡連線速度竟然會回復正常, 真是超怪異啊! 不過在實測時最奇怪的是 Jumbo Frame (MTU), 如果改動 Jumbo Frame 的話亦會即時連線遲緩, 又要多次執行配置指令才會回復正常, 真是莫明奇妙。

暫時無解下的解決辦法是唯有執行配置指令, 強迫系統回復 1000Mbps 正常連線
# ifdown eth0
# ethtool -s eth0 speed 1000 duplex full autoneg on
# ifup eth0


備註:
另外 mii-tool 指令已經不支援 1000Mbps 的裝置
要檢查網絡配接卡資料的話, 執行指令:
# ethtool eth0

補充:
在測試時偶然地發現近日(其實已經多個月了)有超極大量的殭屍網絡 botnet 刺探出現, 全部不同的 IP 地址都是源自大陸, 差不多每十個有九個會刺探 TCP port 9415 及其他標準的 proxy port 1080 3128 8080 3389 4899 等等, 來源 port 99% 都是 6000, 要多注意防火牆設定, 避免路由器萬一使用 DMZ 時暴露到網軍手中。
DI-524 紀錄 botnet 刺探
DI-524 防火牆配置

補充更新:
近日(三月時) Realtek 釋出了網絡晶片組的 Linux/Unix 驅動程式更新 8.022.00 版本, 實測使用此版本的驅動程式後發現在 1000M 網絡遲緩頓頓的問題消失, 似乎已解決其 1000M 網絡下混插 100M 的 packet lost 問題, 比較 8.020.00 版本(Linux RHEL 5/6 下根本不能 compile 編譯安裝)的問題好多了, 不過留意安裝後要手動編輯修改 /etc/modprobe.confalias eth0 r8169 改為 alias eth0 r8168
Realtek 網絡晶片 Linux/Unix 驅動程式更新 8.022.00 版本下載位置

沒有留言:

發佈留言