На свежеустановленном сервере обратил внимание на сильные тормоза при сетевых действиях.
Как оказалось сетевая карточка работает в режиме half duplex. Надо это исправлять.
На помощь в таком деле приходит замечательный иструмент ethtool
.
Для начала устанавливаю (пример для Debian, для других дистрибутивов по аналогии):
# apt-get install ethtool
Проверяю что у меня с интерфейсом:
# ethtool eth0
Settings for eth0: Supported ports: [ TP ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Supported pause frame use: No Supports auto-negotiation: Yes Advertised link modes: Not reported Advertised pause frame use: No Advertised auto-negotiation: No Speed: 10Mb/s Duplex: Half Port: Twisted Pair PHYAD: 2 Transceiver: internal Auto-negotiation: on MDI-X: off Supports Wake-on: pumbg Wake-on: g Current message level: 0x00000007 (7) drv probe link Link detected: yes
Меня озадачивает выделенное… Похоже, что на full duplex договориться не удалось.
Теперь кладу проблемный интерфейс. Внимание, нужно убедиться, что управление сервером не пропадет. Я все операции делал через второй интерфейс.
# ifdown eth0
Затем устанавливаю жестко параметры интерфейсу — скорость, режим, autonegotiation:
# ethtool -s eth0 speed 100 duplex full autoneg off
# ifup eth0
# ethtool eth0
Settings for eth0: Supported ports: [ TP ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Supported pause frame use: No Supports auto-negotiation: Yes Advertised link modes: Not reported Advertised pause frame use: No Advertised auto-negotiation: No Speed: 100Mb/s Duplex: Full Port: Twisted Pair PHYAD: 2 Transceiver: internal Auto-negotiation: off MDI-X: off Supports Wake-on: pumbg Wake-on: g Current message level: 0x00000007 (7) drv probe link Link detected: yes
Для того, чтобы в после перезагрузки сервера процедуру не повторять:
# echo "post-up ethtool -s eth0 speed 100 duplex full autoneg off" >> /etc/network/interfaces
Для RedHat-like:
# echo 'ETHTOOL_OPTS="speed 100 duplex full autoneg off"' >> /etc/sysconfig/network-scripts/ifcfg-eth0
P.S. Правильно, конечно, выяснить почему два устройства не договорились о скорости, но в моем случае возможности посмотреть что происходит на той стороне eth0 интерфейса нет.