У меня есть Dell r710 (под управлением Debian GNU / Linux 6.0), который в настоящее время находится в центре обработки данных за сотни миль, а карта Ethernet застряла на полудуплексе 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
И запускаем стоковое ядро на сжатие:
areion:~# uname -a
Linux areion 2.6.32-5-amd64 #1 SMP Wed Jan 12 03:40:32 UTC 2011 x86_64 GNU/Linux
Я пробовал изменить настройки Ethernet:
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
Похоже, либо автонеготация не работает, либо коммутатор, к которому я подключен, рекламирует 10 Мбит / полудуплекс. Мне сказали, что коммутатор работает в полнодуплексном режиме 10M.
Может быть, это проблема с драйвером, проблема с оборудованием, проблема с кабелем, проблема с переключателем? Могу ли я что-нибудь сделать удаленно, чтобы определить источник проблемы или хотя бы устранить возможности?
Обновить:
Отключение автосогласования и установка параметров на 10 / HD, 10 / FD, 100 / HD, 100 / FD и т. Д. (Все, кроме 10 / HD с автосогласованием) приводит к NO-CARRIER
, как сообщает ip link show dev eth0
. То же самое верно для оставления автосогласования и рекламы чего-либо, кроме 10 / HD. Может ли это быть чем-то другим, кроме проблемы с переключателем?
Лучше включить автосогласование на обоих концах. Это текущая рекомендация сетевых поставщиков (включая Cisco). Видеть: http://www.cisco.com/en/US/tech/tk389/tk214/technologies_tech_note09186a0080094781.shtml
Для вашей проблемы вы должны выяснить, как она настроена на удаленном конце. Если это автосогласование, вам также следует использовать автосогласование на своем сервере. Если он установлен на определенную скорость и дуплекс, вы должны согласовать удаленный конец.
Имейте в виду, что можно продолжать переговоры и разрешить переговоры только для определенной скорости и дуплекса. Также можно настроить рекламу возможностей.
Если сетевая карта согласовала 10 / HD, это обычно означает, что на удаленном конце согласование отключено и установлено значение 10 / FD. Ваша плохая производительность вызвана несоответствием дуплексного режима.
Вы также должны попробовать с другой сетевой картой. Смена драйвера не поможет, потому что определение канала (для определения несущей и скорости) выполняется PHY-частью сетевой карты.
Можете ли вы установить другое устройство, например переключатель, между вами и сервером, на котором вы можете физически изменять настройки? Это может помочь.
Не рекомендуется отключать автосогласование, но если вы все же решите это сделать, вы должны отключить его на обоих концах и настроить оба конца на использование одинаковой скорости и дуплексного режима. Если вы отключите автосогласование только на одном конце, другой конец будет вынужден принять 10 МБ / HD. Если у вас нет доступа к коммутатору на другом конце кабеля Ethernet или этот коммутатор не поддерживает такую настройку, отключение автосогласования не является вариантом. В некоторых случаях вы можете оставить автосогласование включенным, но указать карте или переключателю, чтобы они объявляли более низкую скорость или полудуплекс.