Скорость сетевого соединения (измерить реальную скорость)

Ethernet card, Wi-Fi, Bluetooth, IrDA, ADSL-модемы, модемы

Модераторы: broom, Модераторы разделов

Аватара пользователя
Olej
Сообщения: 659
ОС: Fedora, Mint, Debian, QNX

Скорость сетевого соединения

Сообщение Olej » 07.06.2016 18:29

Как определить реальную скорость сетевого соединения (TCP, например).
В LAN (при прямом, локальном подключении)

Реальную, потому как скорость IP соединения может радикально отличаться от декларируемой скорости физической среды, например:
- при WiFi соединении - от дальности
- при использовании WiFi репитеров - от их числа (есть непроверенные сообщения)
- при использовании PowerLine адаптеров - от качества электросети ... и, возможно, от протяжённости

Кроме того, из-за необходимости синхронизации, передачи объёмов служебной информации и др. физическая скорость среды может в разы превосходить скорость передачи целевой информации через соединение.

Интересует именно вопрос: как измерить скорость передачи потока информации через соединение (а не распространение ICMP/IP пакетов в среде - ping и т.д.).
Естественно, что все остальные хосты LAN на время измерения переводим в режим молчания - исключить коллизии, повторные передачи и вообще загрузку среды LAN при передаче информации.

Описано достаточно много программ-утилит для таких измерений. Но :
- зачастую это Windows .exe (не интересно)
- часто это очень устаревшие программы (не актуально)

Вопрос: какие Linux программы можно удобно и достоверно использовать для измерение пропускной способности канала хост-хост в LAN?
Спасибо сказали:

HorekRediskovich
Сообщения: 125

Re: Скорость сетевого соединения

Сообщение HorekRediskovich » 07.06.2016 20:37

Olej писал(а):
07.06.2016 18:29
Как определить реальную скорость сетевого соединения (TCP, например).
В LAN (при прямом, локальном подключении)

Реальную, потому как скорость IP соединения может радикально отличаться от декларируемой скорости физической среды, например:
- при WiFi соединении - от дальности
- при использовании WiFi репитеров - от их числа (есть непроверенные сообщения)
- при использовании PowerLine адаптеров - от качества электросети ... и, возможно, от протяжённости

Кроме того, из-за необходимости синхронизации, передачи объёмов служебной информации и др. физическая скорость среды может в разы превосходить скорость передачи целевой информации через соединение.

Интересует именно вопрос: как измерить скорость передачи потока информации через соединение (а не распространение ICMP/IP пакетов в среде - ping и т.д.).
Естественно, что все остальные хосты LAN на время измерения переводим в режим молчания - исключить коллизии, повторные передачи и вообще загрузку среды LAN при передаче информации.

Описано достаточно много программ-утилит для таких измерений. Но :
- зачастую это Windows .exe (не интересно)
- часто это очень устаревшие программы (не актуально)

Вопрос: какие Linux программы можно удобно и достоверно использовать для измерение пропускной способности канала хост-хост в LAN?

iperf
Спасибо сказали:

Аватара пользователя
Olej
Сообщения: 659
ОС: Fedora, Mint, Debian, QNX

Re: Скорость сетевого соединения

Сообщение Olej » 07.06.2016 21:25

HorekRediskovich писал(а):
07.06.2016 20:37
iperf

Спасибо, но iperf я знаю и использую.
Ещё netperf & netperfmeter, но эти, последние, есть в репозитариях Ubuntu/Mint, но нет в Fedora 23.

Хотелось бы услышать что-то из новенького... :rolleyes:
Спасибо сказали:

NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Скорость сетевого соединения

Сообщение NickLion » 07.06.2016 22:59

Olej писал(а):
07.06.2016 21:25
Хотелось бы услышать что-то из новенького... :rolleyes:

Вариант nc -l 0.0.0.0 54321 на одном конце и
dd bs=1M count=100 if=/dev/zero of=/dev/stdout | nc 192.168.x.x 54321
на другом не подойдёт?
Спасибо сказали:

Аватара пользователя
Olej
Сообщения: 659
ОС: Fedora, Mint, Debian, QNX

Re: Скорость сетевого соединения

Сообщение Olej » 07.06.2016 23:14

NickLion писал(а):
07.06.2016 22:59
на другом не подойдёт?

Это вариант, который называют "передача большого файла" (с его недостатками: время запуска приёмного процесса, пеобходимость пересчёта, ...).
Но это явно улучшенный вариант!
Неплохо.

Спасибо сказали:

Аватара пользователя
Olej
Сообщения: 659
ОС: Fedora, Mint, Debian, QNX

Re: Скорость сетевого соединения

Сообщение Olej » 11.06.2016 10:54

HorekRediskovich писал(а):
07.06.2016 20:37
iperf

Могут ли влиять скорости процессоров сервера и клиента iperf (или любого другого измерителя скорости канала) на результаты измерения скорости?
(т.е. могут ли вносить существенную разницу в цифру)
Всвтречал, может, кто-то об этом публикации или обсуждения...

Кто является в этом случае ограничивающим фактором: канал передачи или процессоры на концах?

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

Спасибо сказали:

Аватара пользователя
Olej
Сообщения: 659
ОС: Fedora, Mint, Debian, QNX

Re: Скорость сетевого соединения

Сообщение Olej » 11.06.2016 12:36

Olej писал(а):
11.06.2016 10:54
HorekRediskovich писал(а):
07.06.2016 20:37
iperf

Могут ли влиять скорости процессоров сервера и клиента iperf (или любого другого измерителя скорости канала) на результаты измерения скорости?
(т.е. могут ли вносить существенную разницу в цифру)
Всвтречал, может, кто-то об этом публикации или обсуждения...

Код: Выделить всё

olej@nvidia ~ $ cat /proc/cpuinfo | grep 'model name'
model name      : Pentium(R) Dual-Core  CPU      E6600  @ 3.06GHz
model name      : Pentium(R) Dual-Core  CPU      E6600  @ 3.06GHz

olej@nvidia ~ $ iperf -c 127.0.0.1
------------------------------------------------------------
Client connecting to 127.0.0.1, TCP port 5001
TCP window size: 2.50 MByte (default)
------------------------------------------------------------
[  3] local 127.0.0.1 port 50467 connected with 127.0.0.1 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  18.5 GBytes  15.9 Gbits/sec

olej@nvidia ~ $ iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[  4] local 127.0.0.1 port 5001 connected with 127.0.0.1 port 50467
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-10.0 sec  18.5 GBytes  15.9 Gbits/sec
^C

Издержки производительности процессора, создающего поток 15.9 Gbits/sec, несоизмеримы со скоростями канала порядка 10-30 Mits/sec (при тех же параметрах), наблюдаемыми на реальном сетевом канале.
Спасибо сказали:

Аватара пользователя
Olej
Сообщения: 659
ОС: Fedora, Mint, Debian, QNX

Re: Скорость сетевого соединения

Сообщение Olej » 11.06.2016 12:50

Olej писал(а):
11.06.2016 12:36
Издержки производительности процессора, создающего поток 15.9 Gbits/sec, несоизмеримы со скоростями канала порядка 10-30 Mits/sec (при тех же параметрах), наблюдаемыми на реальном сетевом канале.

Самый медленный процессор, который у меня оказался под рукой:

Код: Выделить всё

olej@atom ~ $ cat /proc/cpuinfo | grep 'model name'
model name    : Intel(R) Atom(TM) CPU  330   @ 1.60GHz
model name    : Intel(R) Atom(TM) CPU  330   @ 1.60GHz
model name    : Intel(R) Atom(TM) CPU  330   @ 1.60GHz
model name    : Intel(R) Atom(TM) CPU  330   @ 1.60GHz

olej@atom ~ $ iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[  4] local 127.0.0.1 port 5001 connected with 127.0.0.1 port 53127
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-10.0 sec  3.89 GBytes  3.34 Gbits/sec
^C

olej@atom ~ $ iperf -c 127.0.0.1
------------------------------------------------------------
Client connecting to 127.0.0.1, TCP port 5001
TCP window size: 2.50 MByte (default)
------------------------------------------------------------
[  3] local 127.0.0.1 port 53127 connected with 127.0.0.1 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  3.89 GBytes  3.34 Gbits/sec
Спасибо сказали:

HorekRediskovich
Сообщения: 125

Re: Скорость сетевого соединения

Сообщение HorekRediskovich » 11.06.2016 13:40

я думаю (могу и ошибатся) что выше показаные рещультаты были порлучены по внутреней шине даных самого компа, я как то раз iperf мерял свой канал и получил примерно близкие к заявленой скорости провайдером данные.
Спасибо сказали:

Аватара пользователя
Olej
Сообщения: 659
ОС: Fedora, Mint, Debian, QNX

Re: Скорость сетевого соединения

Сообщение Olej » 11.06.2016 15:44

HorekRediskovich писал(а):
11.06.2016 13:40
я думаю (могу и ошибатся) что выше показаные рещультаты были порлучены по внутреней шине даных самого компа, я как то раз iperf мерял свой канал и получил примерно близкие к заявленой скорости провайдером данные.

Конечно, это специально делалось через localhost, когда даже нижние уровни IP стека исключаются из обмена (в Linux): структуры skbuf продуцируются и тут же потребляются.
Это и сделано для проверки того, насколько процессорные затраты приложений
А обмен (при тех же параметрах iperf) для реального канала:
- сервер

Код: Выделить всё

olej@nvidia ~ $ iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[  4] local 192.168.1.9 port 5001 connected with 192.168.1.101 port 50226
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-10.6 sec  13.5 MBytes  10.7 Mbits/sec
^C

- клиент

Код: Выделить всё

[olej@dell ~]$ iperf -c 192.168.1.9
------------------------------------------------------------
Client connecting to 192.168.1.9, TCP port 5001
TCP window size: 85.0 KByte (default)
------------------------------------------------------------
[  3] local 192.168.1.101 port 50226 connected with 192.168.1.9 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  13.5 MBytes  11.3 Mbits/sec

Это канал LAN включающий в себя участок протокола PowerLine с передачей IP через электропроводку.
Если скорость канала опрееляется как 10-11 Mbits/sec, а скорость (при тех же условиях) по закороченной локальной петле 3-16 Gbits/sec (на разных процессорах, что я наблюдал) и при тех же (почти) процессорных потерях (производительности) на концах, то понятно, что процессорные затраты на определение скорости не влияют ... даже на весьма быстрых физических средах - процессорные потери принебрежительно малы.
Спасибо сказали:

Аватара пользователя
Olej
Сообщения: 659
ОС: Fedora, Mint, Debian, QNX

Re: Скорость сетевого соединения

Сообщение Olej » 11.06.2016 16:52

То же самое (localhost) - быстрый процессор:

Код: Выделить всё

[olej@dell ~]$ cat /proc/cpuinfo | grep 'model name'
model name      : Intel(R) Core(TM) i7 CPU       Q 720  @ 1.60GHz
model name      : Intel(R) Core(TM) i7 CPU       Q 720  @ 1.60GHz
model name      : Intel(R) Core(TM) i7 CPU       Q 720  @ 1.60GHz
model name      : Intel(R) Core(TM) i7 CPU       Q 720  @ 1.60GHz
model name      : Intel(R) Core(TM) i7 CPU       Q 720  @ 1.60GHz
model name      : Intel(R) Core(TM) i7 CPU       Q 720  @ 1.60GHz
model name      : Intel(R) Core(TM) i7 CPU       Q 720  @ 1.60GHz
model name      : Intel(R) Core(TM) i7 CPU       Q 720  @ 1.60GHz

[olej@dell ~]$ iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[  4] local 127.0.0.1 port 5001 connected with 127.0.0.1 port 40970
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-10.0 sec  23.6 GBytes  20.3 Gbits/sec
^C

[olej@dell own.WORK]$ iperf -c 127.0.0.1
------------------------------------------------------------
Client connecting to 127.0.0.1, TCP port 5001
TCP window size: 2.50 MByte (default)
------------------------------------------------------------
[  3] local 127.0.0.1 port 40970 connected with 127.0.0.1 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  23.6 GBytes  20.3 Gbits/sec

Здесь же убеждаемся, что iperf (и предполагаю что любая измерительная утилита) не умеет использовать многопроцессорность и выполняется на одиночном процессоре:

Код: Выделить всё

[olej@dell ~]$ taskset -c 0 iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[  4] local 127.0.0.1 port 5001 connected with 127.0.0.1 port 41182
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-10.0 sec  24.2 GBytes  20.8 Gbits/sec
^C

[olej@dell own.WORK]$ taskset -c 2 iperf -c 127.0.0.1
------------------------------------------------------------
Client connecting to 127.0.0.1, TCP port 5001
TCP window size: 2.50 MByte (default)
------------------------------------------------------------
[  3] local 127.0.0.1 port 41182 connected with 127.0.0.1 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  24.2 GBytes  20.8 Gbits/sec

Т.е. при проверках на реальных физических каналах число процессоров не имеет значения и может не приниматься в расчёт.


NickLion писал(а):
07.06.2016 22:59
Вариант nc -l 0.0.0.0 54321 на одном конце и
dd bs=1M count=100 if=/dev/zero of=/dev/stdout | nc 192.168.x.x 54321
на другом не подойдёт?

Не совсем так ... но вот так подойдёт:

Код: Выделить всё

bash-4.2$ nc -v -l -4 0.0.0.0 1234 > /dev/null
Ncat: Version 6.45 ( http://nmap.org/ncat )
Ncat: Listening on 0.0.0.0:1234
Ncat: Connection from 127.0.0.1.
Ncat: Connection from 127.0.0.1:50447.

Код: Выделить всё

bash-4.2$ time dd bs=1M count=100 if=/dev/zero | nc -v -4 127.0.0.1 1234
Ncat: Version 6.45 ( http://nmap.org/ncat )
Ncat: Connected to 127.0.0.1:1234.
100+0 записей получено
100+0 записей отправлено
Ncat: 104857600 bytes sent, 0 bytes received in 0.52 seconds.
 скопировано 104857600 байт (105 MB), 0,525794 c, 199 MB/c
real    0m0.529s
user    0m0.146s
sys     0m0.558s

Вот вопрос: какое время real, user, или sys брать в измерение?

Спасибо сказали:

Аватара пользователя
Olej
Сообщения: 659
ОС: Fedora, Mint, Debian, QNX

Re: Скорость сетевого соединения

Сообщение Olej » 11.06.2016 16:58

Olej писал(а):
11.06.2016 16:52
Вот вопрос: какое время real, user, или sys брать в измерение?

Код: Выделить всё

$ man 1 time
...
       These statistics consist of (i) the elapsed real  time  between
       invocation  and  termination, (ii) the user CPU time (the sum of the tms_utime and tms_cutime values in a struct tms as returned
       by times(2)), and (iii) the system CPU time (the sum of the tms_stime and tms_cstime values in  a  struct  tms  as  returned  by
       times(2)).

Так что в данном случае, скорее, sys

199 MB/c * 8 = 1.595 Gbits/sec
Это тот же процессор, для которого iperf давал значение 20.8 Gbits/sec (см. выше) на локальной петле.
Так что и то, и другое (и т.д.) годится для относительных измерений при реконфигурации сети (что и как влияет) ... но в абсолютных цифрах это всё достаточно бессмысленные цифры, потому что они имеют смысл только прменительно к множеству конкретных условий.
Спасибо сказали: