Скорость сетевого соединения (измерить реальную скорость)
Модератор: Модераторы разделов
Скорость сетевого соединения
Как определить реальную скорость сетевого соединения (TCP, например).
В LAN (при прямом, локальном подключении)
Реальную, потому как скорость IP соединения может радикально отличаться от декларируемой скорости физической среды, например:
- при WiFi соединении - от дальности
- при использовании WiFi репитеров - от их числа (есть непроверенные сообщения)
- при использовании PowerLine адаптеров - от качества электросети ... и, возможно, от протяжённости
Кроме того, из-за необходимости синхронизации, передачи объёмов служебной информации и др. физическая скорость среды может в разы превосходить скорость передачи целевой информации через соединение.
Интересует именно вопрос: как измерить скорость передачи потока информации через соединение (а не распространение ICMP/IP пакетов в среде - ping и т.д.).
Естественно, что все остальные хосты LAN на время измерения переводим в режим молчания - исключить коллизии, повторные передачи и вообще загрузку среды LAN при передаче информации.
Описано достаточно много программ-утилит для таких измерений. Но :
- зачастую это Windows .exe (не интересно)
- часто это очень устаревшие программы (не актуально)
Вопрос: какие Linux программы можно удобно и достоверно использовать для измерение пропускной способности канала хост-хост в LAN?
В LAN (при прямом, локальном подключении)
Реальную, потому как скорость IP соединения может радикально отличаться от декларируемой скорости физической среды, например:
- при WiFi соединении - от дальности
- при использовании WiFi репитеров - от их числа (есть непроверенные сообщения)
- при использовании PowerLine адаптеров - от качества электросети ... и, возможно, от протяжённости
Кроме того, из-за необходимости синхронизации, передачи объёмов служебной информации и др. физическая скорость среды может в разы превосходить скорость передачи целевой информации через соединение.
Интересует именно вопрос: как измерить скорость передачи потока информации через соединение (а не распространение ICMP/IP пакетов в среде - ping и т.д.).
Естественно, что все остальные хосты LAN на время измерения переводим в режим молчания - исключить коллизии, повторные передачи и вообще загрузку среды LAN при передаче информации.
Описано достаточно много программ-утилит для таких измерений. Но :
- зачастую это Windows .exe (не интересно)
- часто это очень устаревшие программы (не актуально)
Вопрос: какие Linux программы можно удобно и достоверно использовать для измерение пропускной способности канала хост-хост в LAN?
-
- Сообщения: 125
Re: Скорость сетевого соединения
Olej писал(а): ↑07.06.2016 18:29Как определить реальную скорость сетевого соединения (TCP, например).
В LAN (при прямом, локальном подключении)
Реальную, потому как скорость IP соединения может радикально отличаться от декларируемой скорости физической среды, например:
- при WiFi соединении - от дальности
- при использовании WiFi репитеров - от их числа (есть непроверенные сообщения)
- при использовании PowerLine адаптеров - от качества электросети ... и, возможно, от протяжённости
Кроме того, из-за необходимости синхронизации, передачи объёмов служебной информации и др. физическая скорость среды может в разы превосходить скорость передачи целевой информации через соединение.
Интересует именно вопрос: как измерить скорость передачи потока информации через соединение (а не распространение ICMP/IP пакетов в среде - ping и т.д.).
Естественно, что все остальные хосты LAN на время измерения переводим в режим молчания - исключить коллизии, повторные передачи и вообще загрузку среды LAN при передаче информации.
Описано достаточно много программ-утилит для таких измерений. Но :
- зачастую это Windows .exe (не интересно)
- часто это очень устаревшие программы (не актуально)
Вопрос: какие Linux программы можно удобно и достоверно использовать для измерение пропускной способности канала хост-хост в LAN?
iperf
Re: Скорость сетевого соединения
Спасибо, но iperf я знаю и использую.
Ещё netperf & netperfmeter, но эти, последние, есть в репозитариях Ubuntu/Mint, но нет в Fedora 23.
Хотелось бы услышать что-то из новенького...
Re: Скорость сетевого соединения
Вариант nc -l 0.0.0.0 54321 на одном конце и
dd bs=1M count=100 if=/dev/zero of=/dev/stdout | nc 192.168.x.x 54321
на другом не подойдёт?
Спасибо сказали:
Re: Скорость сетевого соединения
Могут ли влиять скорости процессоров сервера и клиента iperf (или любого другого измерителя скорости канала) на результаты измерения скорости?
(т.е. могут ли вносить существенную разницу в цифру)
Всвтречал, может, кто-то об этом публикации или обсуждения...
Кто является в этом случае ограничивающим фактором: канал передачи или процессоры на концах?
В этом смысле, наверное, автономные приложения-измерители, типа iperf и все такого же семейства, должно быть, гораздо менее чувствительны к влиянию процессоров и операционных систем на концах канала передачи, чем способы с передачей большого непрерывного куска данных - типа передачи файла или потока от dd, показанного в ответе выше.
Re: Скорость сетевого соединения
Код: Выделить всё
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 (при тех же параметрах), наблюдаемыми на реальном сетевом канале.
Re: Скорость сетевого соединения
Самый медленный процессор, который у меня оказался под рукой:
Код: Выделить всё
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
-
- Сообщения: 125
Re: Скорость сетевого соединения
я думаю (могу и ошибатся) что выше показаные рещультаты были порлучены по внутреней шине даных самого компа, я как то раз iperf мерял свой канал и получил примерно близкие к заявленой скорости провайдером данные.
Re: Скорость сетевого соединения
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 (на разных процессорах, что я наблюдал) и при тех же (почти) процессорных потерях (производительности) на концах, то понятно, что процессорные затраты на определение скорости не влияют ... даже на весьма быстрых физических средах - процессорные потери принебрежительно малы.
Re: Скорость сетевого соединения
То же самое (localhost) - быстрый процессор:
Здесь же убеждаемся, что iperf (и предполагаю что любая измерительная утилита) не умеет использовать многопроцессорность и выполняется на одиночном процессоре:
Т.е. при проверках на реальных физических каналах число процессоров не имеет значения и может не приниматься в расчёт.
Не совсем так ... но вот так подойдёт:
Вот вопрос: какое время real, user, или sys брать в измерение?
Код: Выделить всё
[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
Т.е. при проверках на реальных физических каналах число процессоров не имеет значения и может не приниматься в расчёт.
Не совсем так ... но вот так подойдёт:
Код: Выделить всё
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 брать в измерение?
Re: Скорость сетевого соединения
Код: Выделить всё
$ 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 (см. выше) на локальной петле.
Так что и то, и другое (и т.д.) годится для относительных измерений при реконфигурации сети (что и как влияет) ... но в абсолютных цифрах это всё достаточно бессмысленные цифры, потому что они имеют смысл только прменительно к множеству конкретных условий.