Введение в ethtool

May 25, 2011 By Jayson Broughton
in SysAdmin

Настала минута, когда мы можем воздать хвалу разработчикам свободного ПО. Вглядитесь в эти названия пакетов! Вам ни за что не догадаться, если вы обычный человек, что они делают: emacs, gimp, gcc, mutt, grub, kyle rankin, parted, tar, mutt, vim. Интеллектуальный блеск движения свободного ПО, он же нищета. И вот нам в руки попадается пакет ethtool. Тададада! Он делает то, что означает его название: ethernet tool. Расскажу вам о нескольких возможностях утилиты, которые я изучил за последние десять дней.

В первую очередь определим, какой сетевой адаптер мы используем:


ifconfig

Обратите внимание, ethtool работает только с физическими адаптерами. Это означает, что bond0, tun0 и другие устройства, которые не являются физическими, с помощью ethtool ни просматривать, ни редактировать их параметры нельзя.

Теперь, когда девайс определен, повеселимся. Вы, конечно, знаете, что ядро Linux дает имена Ethernet-адаптерам в стиле ethX, где Х - номер по порядку начиная с 0.

Информация о драйвере и статистика
Знаю, знаю, начинать надо с полезных возможностей. Но вдруг кто-нибудь сочтет это полезным? Я кучу раз запрашивал информацию о драйверах в процессе работы над ошибками ядра, и пришел к выводу, что лучше запустить одну команду, которая дернет lsmod и узнает все о загруженном драйвере:


ethtool -i ethX

driver: r8169 
version: 2.3LK-NAPI 
firmware-version:
bus-info:0000:02:00.0 

Для отладки различных ситуаций с проблемами rx/tx нужна подробная статистика, она выводится с помощью следующей команды:


ethtool -S ethX
 
	NIC statistics:
     tx_packets: 148683 
     rx_packets: 179489 
     tx_errors: 0 
     rx_errors: 0 
     rx_missed: 0 
     align_errors: 0 
     tx_single_collisions: 0 
     tx_multi_collisions: 0 
     unicast: 116884 
     broadcast: 25361 
     multicast: 61674 
     tx_aborted: 0 
     tx_underrun: 0

Статистика, а также старый добрый tcpdump помогут вам в поиске сетевых проблем.

Последим за сетевой картой
Уверен, что с вами такое случалось, потому что такое множество раз случалось со мной. Имели когда-нибудь под управлением сервер, в котором больше одной сетевой карты? поднимите руку. Больше, чем две? поднимите две руки. Какая из двух карт помечена ядром как eth0? Сакраментальный вопрос. Конечно, можно идти кривым и длинным путем: получить MAC-адрес с помощью ifconfig, воткнуть все кабеля в управляемый свитч и затем сбросить таблицу ARP со свитча с целью поиска нужного. Или можно помигать светодиодом с помощью ethtool. Строка ethtool -p ethX [N] , где N - число секунд, в течение которых нужно мигать светодиодом на карточке, поможет нам в поиске соответствия имени и физического устройства. Команда


ethtool -p eth0 15

заставит мигать светодиод соответствующего интерфейса (eth0) 15 секунд.

Потестируем сетевую карту
Конечно, любая карточка со временем может выйти из строя. Для предотвращения подобны событий не вредно время от времени запускать тесты. Будьте внимательны на продакшн-серверах и машинах, к которым есть только удаленный доступ, потому что запускается два вида тестов, онлайновый и оффлайновый. Оффлайновый тест выключает адаптер из сетевого обмена.


ethtool -t ethX [offline|online] 

Следует иметь в виду, что какие-то адаптеры могут не поддерживать требований онлайнового или оффлайнового теста. В процессе написания этой заметки у меня нашлись как минимум четыре карточки, которые не поддерживали тесты во всей их полноте, но какая-то информация все равно поступала. Пример вывода предыдущей команды:


The test result is PASS 
The test extra info: 
nvram test     (online)          0 
link test      (online)          0 
register test  (offline)         0 
memory test    (offline)         0 
loopback test  (offline)         0 
interrupt test (offline)         0 

Изменим параметры работы сетевой карты
Если вы запустите ethtool без опций, увидите текущие установки, примерно так:


 Settings for eth0:
	Supported ports: [ TP MII ] 
	Supported link modes:   10baseT/Half
				10baseT/Full 100baseT/Half 100baseT/Full
				1000baseT/Half 1000baseT/Full
	Supports auto-negotiation: Yes 
	Advertised link modes:  10baseT/Half
				10baseT/Full 100baseT/Half 100baseT/Full
				1000baseT/Half 1000baseT/Full
	Advertised pause frame use: No 
	Advertised auto-negotiation: Yes Link
	partner advertised link modes:	10baseT/Half 10baseT/Full
                         	        100baseT/Half 100baseT/Full
	Link partner advertised pause frame use: No 
	Link partner advertised auto-negotiation: Yes 
	Speed: 100Mb/s Duplex: Full 
	Port: MII 
	PHYAD:0
	Transceiver: internal 
	Auto-negotiation: on 
	Supports Wake-on: pumbg
	Wake-on: g 
	Current message level: 0x00000033 (51) 
	Link detected: yes

Утилита выводит много букв, но если читать их строку за строкой, прочтем следующее:устройство поддерживает TP и MII, скорость до 1000baseT/Full. Текущие установки: 100Mb/s, Full Duplex, включен MII, физический адрес 0, включен Auto negotiation, WoL доступен и линк присутствует. Это в общем все, что нужно знать.

На рабочем девайсе я запускаю ethtool ethX с целью проверки доступных режимов работы и текущей скорости. Если текущая скорость выставлена низкой, а свитч поддерживает бОльшую скорость, я могу поправить установленную скорость вручную. ethtool -s ethX поможет мне изменить текущие установки. Все, что видно при вводе ethtool ethX, может быть изменено с помощью ethtool -s ethX. В данном случае мне потребуется что-то вроде


ethtool -S eth0 speed 1000 duplex full autoneg on

Странно, устройство должно поднимать auto-negotiation по умолчанию при старте, но у меня было выключено. Пришлось включить через команду.

Кроме этого можно еще установить Wake-On-Lan. Про Wake-On-Lan сегодня рассказывать не буду, об этой технологии есть подробная информация в моем блоге на www.jaysonbroughton.com.



Назад в тематический каталог
Назад на страницу переводов из Linux Journal