Есть ли в Linux способ узнать, идет ли автоматическое согласование Ethernet или уже завершено?
Например, я вижу, что в моей сети интерфейсу 1 Гбайт требуется от 3 до 4 секунд, чтобы правильно обновить свой статус связи после того, как я установил его административный статус на «вверх».
Сейчас я вижу это /sys/class/net/$eth/speed
дает invalid argument
если интерфейс не работает, -1
если согласование продолжается, и согласованное значение скорости после завершения согласования. Это могло бы быть первым приближением к решению. Что-нибудь более точное, чем это?
Кстати, /sys/class/net/$eth/operstate
является down
как когда speed
является -1
и когда это invalid value
, поэтому я не могу его использовать.
Похоже, мы можем получить то, что вам нужно, с помощью "ethtool" и "perf".
На странице руководства по ethtool:
-r --согласовать
Перезапускает автосогласование на указанном устройстве Ethernet, если автосогласование включено.
Чтобы узнать больше о команде perf, а также о многом другом, посетите сайт Брендана Грегга: http://www.brendangregg.com/perf.html
Мы можем сделать перфоманс повторного согласования ethtool:
# perf record ethtool -r <interface>
А затем отобразить отчет
# perf report --stdio
На моей виртуальной машине, которая использует драйвер Intel e1000, я получаю эти результаты для отчета ... ваши результаты могут отличаться.
# Overhead Command Shared Object Symbol
# ........ ....... ................. .....................................
#
17.39% ethtool [kernel.kallsyms] [k] e1000_raise_ee_clk.isra.7
13.04% ethtool [kernel.kallsyms] [k] __lock_text_start
13.04% ethtool [kernel.kallsyms] [k] delay_tsc
13.04% ethtool [kernel.kallsyms] [k] e1000_shift_in_ee_bits
8.70% ethtool [kernel.kallsyms] [k] e1000_lower_ee_clk.isra.8
4.35% ethtool [kernel.kallsyms] [k] e1000_acquire_eeprom
4.35% ethtool [kernel.kallsyms] [k] e1000_configure_rx
4.35% ethtool [kernel.kallsyms] [k] e1000_init_hw
4.35% ethtool [kernel.kallsyms] [k] e1000_release_eeprom
4.35% ethtool [kernel.kallsyms] [k] e1000_standby_eeprom
4.35% ethtool [kernel.kallsyms] [k] finish_task_switch
4.35% ethtool [kernel.kallsyms] [k] kmem_cache_free
4.35% ethtool [kernel.kallsyms] [k] native_read_tsc