0

half duplex интерфейс в linux

На свежеустановленном сервере обратил внимание на сильные тормоза при сетевых действиях.
Как оказалось сетевая карточка работает в режиме 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 интерфейса нет.

Alexey Egorychev

FreeBSD and Linux sysadmin. Know many systems like mailsystems, DB, WWW stack. Automation with salt, ansible. Monitoring with nagios, zabbix.