Как мне проверить скорость моего сетевого адаптера?

Вопрос или проблема

Я только что установил новую сетевую карту с гигабитным интерфейсом (NIC) в Linux. Как мне узнать, действительно ли она настроена на гигабитные скорости? Я вижу, что у ethtool есть опция для установки скорости, но я не могу понять, как получить информацию о ее текущей скорости.

Просто используйте команду вроде: ethtool eth0, чтобы получить необходимую информацию. Пример:

$ ethtool eth0 | grep Speed

Speed: 1000Mb/s

Можно использовать информацию из ядра, когда ethtool отсутствует:

cat /sys/class/net/<interface>/speed

Пример для интерфейса с именем eth0:

cat /sys/class/net/eth0/speed

ПРИМЕЧАНИЕ: в мануале для mii-tool есть такое предупреждение:

Эта программа устарела. Для замены проверьте ethtool.

Используйте mii-tool, чтобы следить за согласованной сетевой скоростью.

Например.

eth0: нет соединения
eth1: согласованная скорость 100baseTx-FD, соединение в порядке

Здесь есть отличные ответы, я просто хотел добавить еще несколько вариантов.

1. Я знаю, что это не совсем то, что вы спросили (читайте дальше о других способах). Но если вы хотите знать реальную производительность вашей NIC, а не то, что говорит ваш компьютер, вы можете использовать iperf. Обычно я так делаю – потому что никогда не знаешь. Недавно я купил NIC на 1 Гбит, который передавал только на 672 Мбит/с, но его uplink был на 1 Гбит. Хорошо, что я проверил.

Вам понадобятся два компьютера.

На первом компьютере запустите iperf в режиме сервера:

iperf -s

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

iperf -c 192.168.0.10

Если вы хотите увидеть скорость в полный дуплекс, попробуйте это вместо этого:

iperf -d -c 192.168.0.10

Замените 192.168.0.10 на IP-адрес сервера

2. В системах Ubuntu /var/log/kern.log имеет ограниченный журнал событий ядра. Он будет записывать скорость связи и статус NIC, когда они меняются. Я уверен, что другие дистрибутивы, вероятно, делают что-то подобное или могут быть настроены на это.

$ tail -n 300 /var/log/kern.log.1 | grep slave0
28 авг 12:54:04 haze kernel: [ 9452.766248] e1000e: slave0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx
28 авг 12:54:41 haze NetworkManager[921]: <info>  [1472403281.8486] устройство (slave0): линия отключена
28 авг 12:54:41 haze kernel: [ 9489.898476] e1000e: slave0 NIC Link is Down

3. Вам, вероятно, никогда не понадобится идти так далеко, но вы можете написать код на C, чтобы получить скорость. Проверено на работоспособность, и корневые права не требуются.

https://stackoverflow.com/questions/2872058/get-link-speed-programmatically

#include <stdio.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <linux/sockios.h>
#include <linux/if.h>
#include <linux/ethtool.h>
#include <string.h>
#include <stdlib.h>
int main (int argc, char **argv)
{
    int sock;
    struct ifreq ifr;
    struct ethtool_cmd edata;
    int rc;
    sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP);
    if (sock < 0) {
        perror("socket");
        exit(1);
    }
    strncpy(ifr.ifr_name, "eth0", sizeof(ifr.ifr_name));
    ifr.ifr_data = &edata;
    edata.cmd = ETHTOOL_GSET;
    rc = ioctl(sock, SIOCETHTOOL, &ifr);
    if (rc < 0) {
        perror("ioctl");
        exit(1);
    }
    switch (ethtool_cmd_speed(&edata)) {
        case SPEED_10: printf("10Mbps\n"); break;
        case SPEED_100: printf("100Mbps\n"); break;
        case SPEED_1000: printf("1Gbps\n"); break;
        case SPEED_2500: printf("2.5Gbps\n"); break;
        case SPEED_10000: printf("10Gbps\n"); break;
        default: printf("Скорость возвращена: %d\n", edata.speed);
    }
    return (0);
}

Как упомянул Халид, вы должны иметь возможность запустить ethtool с просто интерфейсом в качестве аргумента. Это покажет поддерживаемые скорости, рекламируемые скорости, текущую скорость и множество других вещей:

Настройки для eth0:
    Поддерживаемые порты: [ TP ]
    Поддерживаемые режимы связи:   10baseT/Полу 10baseT/Полный 
                                   100baseT/Полу 100baseT/Полный 
                                   1000baseT/Полный 
    Поддерживает авто-дачу: Да
    Рекламируемые режимы связи:  10baseT/Полу 10baseT/Полный 
                                 100baseT/Полу 100baseT/Полный 
                                 1000baseT/Полный 
    Рекламируемая авто-дача: Да
    Скорость: 1000Mb/s
    Дуплекс: Полный
    Порт: Скрученная пара
    PHYAD: 0
    Трансивер: внутренний
    Авто-дача: включена
    Поддерживает Wake-on: d
    Wake-on: d
    Уровень текущего сообщения: 0x00000007 (7)
    Связь обнаружена: да

Вы также можете запустить dmesg и выполнить grep для вашего интерфейса, но это может не сработать, если ваша система работала долгое время и текущий буфер больше не содержит этой информации (в этом случае вам придется grep старые файлы /var/log/dmesg.*):

dmesg |grep eth0
[    2.867481] e1000: eth0: e1000_probe: Соединение Intel(R) PRO/1000
[   19.429444] ADDRCONF(NETDEV_UP): eth0: линия не готова
[   19.431555] e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
[   19.449341] ADDRCONF(NETDEV_CHANGE): eth0: линия становится готовой
[   26.972379] e1000: eth0: e1000_set_tso: TSO включен
[   29.920458] eth0: нет маршрутизаторов IPv6

Используйте следующую команду

dmesg | grep -i duplex
Вывод: eth0: соединение установлено, 100Mbps, полный дуплекс, lpa 0x45E1

ссылка на это

Также для будущей справки я заметил, что поле скорости в ethtool дает максимальную скорость, поддерживаемую NIC, а mii-tool дает фактическую скорость, с которой работает NIC.

[ root @  ]# mii-tool
eth0: согласованная скорость 100baseTx-FD, соединение в порядке
[ root @  ]# ethtool eth0
Настройки для eth0:
        Поддерживаемые порты: [ TP ]
        Поддерживаемые режимы связи:   10baseT/Полу 10baseT/Полный
                                    100baseT/Полу 100baseT/Полный
                                    1000baseT/Полный
        Поддерживаемое использование паузных кадров: Нет
        Поддерживает авто-дачу: Да
        Рекламируемые режимы связи:  10baseT/Полу 10baseT/Полный
                                    100baseT/Полу 100baseT/Полный
                                    1000baseT/Полный
        Рекламируемое использование паузных кадров: Нет
        Рекламированная авто-дача: Да
        Скорость: 1000Mb/s
        Дуплекс: Полный
        Порт: Скрученная пара
        PHYAD: 2
        Трансивер: внутренний
        Авто-дача: включена
        MDI-X: отключен (авто)
        Поддерживает Wake-on: pumbg
        Wake-on: g
        Уровень текущего сообщения: 0x00000007 (7)
                               drv probe link
        Связь обнаружена: да

ОБНОВЛЕНИЕ: Через некоторое время я обнаружил, что mii-tool не возвращал правильную скорость, так как устарел и был признан устаревшим, а ethtool возвращал согласованную скорость.

Если вы используете Network Manager:

nmcli -f CAPABILITIES.SPEED dev show <interface>

Например:

$ nmcli -f CAPABILITIES.SPEED dev show enp0s31f6 
CAPABILITIES.SPEED:                     100 Mb/s

С systemd-networkd вы можете использовать команду networkctl:

$ networkctl status enp37s0
● 2: enp37s0                                                                   
                     Link File: /usr/lib/systemd/network/99-default.link
                  Network File: /etc/systemd/network/enp37s0.network
                         State: routable (configured)
                  Online state: online                                         
                          Type: ether
...
                         Speed: 1Gbps
...

ethtool eth0 сработал для меня. Пример:

$ethtool eth0 |grep -i speed
Скорость: 1000Mb/s

.

Ответ или решение

Как проверить скорость вашего сетевого адаптера (NIC) в Linux

Установка нового гигабитного сетевого адаптера (NIC) — это важный шаг для повышения производительности вашей сети. Чтобы убедиться, что адаптер работает на гигабитной скорости, необходимо выполнить несколько шагов. В данном руководстве мы рассмотрим основные методы проверки текущей скорости вашего сетевого интерфейса в среде Linux.

1. Использование утилиты ethtool

ethtool — это мощный инструмент для работы с сетевыми интерфейсами в Linux. Чтобы выяснить текущую скорость вашего адаптера, выполните следующую команду:

ethtool eth0 | grep Speed

Где eth0 — это имя вашего сетевого интерфейса. В выводе вы должны увидеть строку, описывающую скорость, например:

Speed: 1000Mb/s

Эта информация подтверждает, что ваш адаптер действительно работает на гигабитной скорости.

2. Использование системного файла

Если по какой-то причине ethtool недоступен, вы можете получить информацию о скорости через системный файл. Используйте следующую команду:

cat /sys/class/net/eth0/speed

Эта команда вернет текущую скорость адаптера в мегабитах в секунду (Mb/s).

3. Использование команды dmesg

Журнал ядра содержит информацию о событиях в системе, в том числе и о сетевых интерфейсах. Для просмотра информации о подключении выполните команду:

dmesg | grep eth0

Вывод может содержать строки, указывающие на скорость, например:

eth0: link is up 1000 Mbps Full Duplex

4. Команды mii-tool и nmcli

Хотя mii-tool признается устаревшим, вы можете использовать его для наблюдения за статусом сетевого соединения:

mii-tool eth0

Однако стоит практически полагаться на ethtool для более точной информации.

Если вы используете Network Manager, вы можете узнать скорость интерфейса с помощью:

nmcli -f CAPABILITIES.SPEED dev show eth0

5. Тестирование производительности с помощью iperf

Чтобы проверить реальную скорость вашего адаптера, используйте iperf. Для этого понадобится два компьютера:

На первом компьютере выполните:

iperf -s

На втором компьютере выполните:

iperf -c <IP_адрес_первого_компьютера>

Это позволит вам оценить реальную пропускную способность вашей сети.

6. Использование networkctl

Если ваша система использует systemd-networkd, вы можете получить информацию о скорости интерфейса с помощью:

networkctl status eth0

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...