- Вопрос или проблема
- Ответ или решение
- Как проверить скорость вашего сетевого адаптера (NIC) в Linux
- 1. Использование утилиты ethtool
- 2. Использование системного файла
- 3. Использование команды dmesg
- 4. Команды mii-tool и nmcli
- 5. Тестирование производительности с помощью iperf
- 6. Использование networkctl
- Заключение
Вопрос или проблема
Я только что установил новую сетевую карту с гигабитным интерфейсом (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
, является обоснованным шагом для окончательной проверки. Следуя приведенным рекомендациям, вы сможете эффективно контролировать и поддерживать оптимальное состояние вашей сетевой инфраструктуры.