Назад | Перейти на главную страницу

как отключить автосогласование и принудительно настроить определенные параметры Ethernet?

У меня есть 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 или этот коммутатор не поддерживает такую ​​настройку, отключение автосогласования не является вариантом. В некоторых случаях вы можете оставить автосогласование включенным, но указать карте или переключателю, чтобы они объявляли более низкую скорость или полудуплекс.