Решение проблем с дуплексным режимом при несоответствии дуплекса

Ручное задание дуплексного режима сетевой карте

На днях мы сменили хостера (с HiVelocity на Hvosting), и всё было здорово, кроме проблем с интегрированной сетевой картой (Intel Corporation 82567V-2 Gigabit Network Controller).

ifconfig показывал очень большое количество ошибок:

[-]
View Code Text
eth0      Link encap:Ethernet  HWaddr 00:1c:c0:ee:19:33
          inet addr:91.200.42.30  Bcast:91.200.43.255  Mask:255.255.252.0
          inet6 addr: fe80::21c:c0ff:feee:1933/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1492  Metric:1
          RX packets:45816071 errors:0 dropped:32127 overruns:0 frame:0
          TX packets:63359144 errors:9679835 dropped:0 overruns:0 carrier:9679835
          collisions:11287183 txqueuelen:10
          RX bytes:7996889371 (7.9 GB)  TX bytes:80681126916 (80.6 GB)

И, судя по collisions, карта работала в полудуплексном режиме. Техподдержка подтвердила, что коммутатор работает в дуплексном режиме на скорости 10 Мбит/сек. Следовательно, проблема либо в сетевом кабеле (на что указывают высокие значения carrier), либо с сетевой картой (на что указывают collisions).

Munin показывал такую нерадостную картину (не успел я сделать daily snapshot, приходится брать недельный):

eth0 errors

eth0 traffic

Пришлось ставить ethtool и разбираться. Он подтвердил, что карта работала в полудуплексном режиме, а также то, что она может работать и в дуплексном:

[-]
View Code Text
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:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Advertised auto-negotiation: Yes
        Speed: 10Mb/s
        Duplex: Half
        Port: Twisted Pair
        PHYAD: 2
        Transceiver: internal
        Auto-negotiation: off
        Supports Wake-on: pumbag
        Wake-on: g
        Current message level: 0x00000001 (1)
        Link detected: yes

Установка дуплексного режима не помогла:

[-]
View Code Bash
ethtool -s eth0 speed 10 duplex full

Карта не отреагировала — показывал, что она осталась в полудуплексном режиме, что говорит о том, что мы имеем классический случай несоответствия дуплексных режимов (duplex mismatch).

По всей видимости, режим автоматического конфигурирования (auto negotiation) на коммутаторе был выключен. На сетевой карте он был включен. Как следствие, автоматическое конфигурирование не происходит. Тем не менее, сетевая карта способна правильно определить максимальную скорость передачи данных. Стандарт же требует в таких случаях использовать полудуплексный режим. Таким образом, карта работает в полудуплексном режиме, коммутатор в полнодуплексном режиме, а в результате получается несоответствие дуплексных режимов.

Выход один: отключать автоматическую настройку на сетевой карте (ну либо просить хостера включить автонастройку):

[-]
View Code Bash
ethtool -s eth0 speed 10 duplex full autoneg off

После этого карта успешно перешла в дуплексный режим. И, как по волшебству, все ошибки пропали (что должно быть видно на графике). Скорость трафика возросла.

Вложения:

Автор: ; опубликовано в: Linux; метки: duplex mismatch, ethtool, Linux
13
Окт
2009

RSS Комментарии к статье «Решение проблем с дуплексным режимом при несоответствии дуплекса» (3)  »

  1. Сергей

    Существует такая проблема: пров предоставляет услуги на скорости 10Мбит/сек в full duplex, auto-negotiation на оборудовании прова и на оборудовании клиента отключен… Прикаждом запуске интегрированная карта (ноутбук) становится в режим 10Мбит/полудуплекс, mii-tool переключает карту в полный дуплекс, но до следующего ребута, eth-tool ни скорость ни дуплекс переключить не может (почему не понятно), подскажите как решить проблему…

    • Вы выполняете что-то типа

      [-]
      View Code Bash
      mii-tool -F 10baseT-FD eth0

      Просто добавьте вашу команду в /etc/rc.local, и она будет автоматически выполняться при загрузке системы.

  2. Сергей

    Спасибо за совет так и сделаем…

Пожалуйста, не используйте эту форму для комментирования! Данная форма предназначена исключительно для ботов.

Оставить комментарий к записи «Решение проблем с дуплексным режимом при несоответствии дуплекса»

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Оставляя комментарий, вы выражаете своё согласие с Правилами комментирования.

Подписаться, не комментируя

गते गते पारगते पारसंगते बोधि स्वाहा