我有一台 Dell r710(运行 Debian GNU/Linux 6.0),目前位于数百英里外的数据中心,以太网卡卡在 10baseT 半双工。10baseT 没问题,但我希望它是全双工的。
有问题的卡是 Broadcom BCM5709:
areion:~# lspci |grep Ethernet
01:00.0 Ethernet controller: Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet (rev 20)
01:00.1 Ethernet controller: Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet (rev 20)
02:00.0 Ethernet controller: Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet (rev 20)
02:00.1 Ethernet controller: Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet (rev 20)
使用 bnx2 驱动程序/固件:
areion:~# apt-cache policy firmware-bnx2
firmware-bnx2:
Installed: 0.28
Candidate: 0.28
Version table:
*** 0.28 0
500 http://ftp.us.debian.org/debian/ squeeze/non-free amd64 Packages
100 /var/lib/dpkg/status
并运行 squeeze 的原始内核:
areion:~# uname -a
Linux areion 2.6.32-5-amd64 #1 SMP Wed Jan 12 03:40:32 UTC 2011 x86_64 GNU/Linux
我尝试更改以太网设置:
ethtool -s eth0 speed 10 duplex full autoneg off
但随后我失去了所有连接,必须重新启动服务器才能再次连接。为了避免不断重新启动服务器,并找出 ethtool 命令是否挂起,我改用此脚本:
#!/bin/bash
ethtool -s eth0 speed 10 duplex full autoneg off 2>&1 > ethtool.log &
sleep 10
if [ $(jobs -r |wc -l) -gt 0 ]; then
kill %1 || kill -9 %1
else
echo '-----------' >> ethtool.log
ethtool eth0 >> ethtool.log
fi
dmesg |tail > dmesg-recent.log
ethtool -s eth0 autoneg on
这使我能够在运行命令后看到接口的状态:
Settings for eth0:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: Not reported
Advertised pause frame use: No
Advertised auto-negotiation: No
Speed: Unknown!
Duplex: Unknown! (255)
Port: Twisted Pair
PHYAD: 1
Transceiver: internal
Auto-negotiation: off
MDI-X: Unknown
Supports Wake-on: g
Wake-on: d
Link detected: no
来自 dmesg:
[ 442.865157] bnx2: eth0 NIC Copper Link is Down
看起来要么是自动协商失败了,要么是我插入的交换机正在通告 10Mbit/半双工。我被告知交换机正在以 10M 全双工运行。
这可能是驱动程序问题、硬件问题、电缆问题还是交换机问题?我是否可以远程执行任何操作来识别问题根源,或者至少排除一些可能性?
更新:
关闭自动协商,并将选项设置为 10/HD、10/FD、100/HD、100/FD 等(除自动协商的 10/HD 之外的任何选项)会导致NO-CARRIER
,如 所报告的ip link show dev eth0
。保持自动协商开启并通告除 10/HD 之外的任何选项也是如此。除了交换机问题之外,还有其他原因吗?
答案1
最好在两端都启用自动协商。这是网络供应商(包括 Cisco)的当前建议。请参阅:http://www.cisco.com/en/US/tech/tk389/tk214/technologies_tech_note09186a0080094781.shtml
对于您的问题,您必须找出它在远程端是如何配置的。如果它是自动协商的,那么您也应该在服务器上使用自动协商。如果它设置为特定的速度和双工,您应该匹配远程端。
请记住,可以保持协商状态,并且只允许协商特定的速度和双工。此外,功能的广告也可以配置。
如果网卡已协商为 10/HD,这通常意味着远端已禁用协商并将其设置为 10/FD。您的糟糕性能是由双工不匹配引起的。
您还应该尝试使用不同的网卡。更改驱动程序不会有帮助,因为链路检测(检测载波和速度)是由 NIC 的 PHY 部分完成的。
答案2
你能在你和服务器之间放置另一个设备,比如一个可以物理更改设置的交换机吗?那可能会有帮助。
答案3
不建议禁用自动协商,但如果您仍决定禁用,则必须在两端禁用它,并将两端设置为使用完全相同的速度和双工。如果您仅在一端禁用自动协商,则另一端将被迫采用 10MB/HD。如果您无法访问以太网电缆另一端的交换机,或者该交换机不支持此类自定义,则禁用自动协商不是一种选择。在某些情况下,您可以保持自动协商处于启用状态,但告诉卡或交换机以较低的速度或半双工通告。