Как вы проверяете скорость сети между двумя блоками?

У меня дома установлена гигабитная сеть и несколько коробок на базе Ubuntu. Из чистого любопытства я хотел бы проверить скорость между двумя ящиками. У меня нет никаких проблем со скоростью или чем-то еще, на самом деле это просто любопытный гик во мне. Плюс, возможно, результаты дадут мне знать, есть ли возможности для улучшения или что я что-то неправильно настроил.

Итак, как вы правильно тестируете скорость сети между блоками Ubuntu?

Я использую iperf. Это устройство клиент-сервер в том смысле, что вы запускаете его в режиме сервера на одном конце и подключаетесь к нему с другого компьютера на другой стороне сети.

Один обе машины работают:

sudo apt-get install iperf

Мы начнем iperf сервер на одной из машин:

iperf -s

А затем на другом компьютере скажите iperf для подключения в качестве клиента:

iperf -c <address of other computer>

На клиентском компьютере вы увидите что-то вроде этого:

oli@bert:~$ iperf -c tim------------------------------------------------------------Client connecting to tim, TCP port 5001TCP window size: 16.0 KByte (default)------------------------------------------------------------[  3] local 192.168.0.4 port 37248 connected with 192.168.0.5 port 5001[ ID] Interval       Transfer     Bandwidth[  3]  0.0-10.0 sec  1.04 GBytes    893 Mbits/sec

Конечно, если вы используете брандмауэр на серверном компьютере, вам нужно будет разрешить подключения к порту 5001 или изменить порт с помощью -p флаг.


Вы можете сделать почти то же самое с простым старым nc (netcat) если вы к этому склонны. На серверной машине:

nc -vvlnp 12345 >/dev/null

И клиент может передавать гигабайт нулей через dd над nc тоннель.

dd if=/dev/zero bs=1M count=1K | nc -vvn 10.10.0.2 12345

Как демод:

$ dd if=/dev/zero bs=1M count=1K | nc -vvn 10.10.0.2 12345Connection to 10.10.0.2 12345 port [tcp/*] succeeded!1024+0 records in1024+0 records out1073741824 bytes (1.1 GB) copied, 9.11995 s, 118 MB/s

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

Помните, что результат находится в мегабайты так что умножьте это на 8, чтобы получить мегабиты- скорость в секунду. Приведенная выше демонстрация работает со скоростью 944 Мбит / с.

То же самое, что и рекомендация Оли для iperf. Просто хочу добавить несколько моментов:

  1. Существуют также клиенты Windows, которые позволяют проводить тестирование на разных платформах.
  2. -t <секунды> изменяет длину теста. -P <n> изменяет количество одновременных подключений. Например, iperf -c [целевой IP-адрес] -Р 10 -т 30 тестирует 10 соединений одновременно в течение 30 секунд и выдает агрегированные результаты вместе с 10 отдельными скоростями соединения.
  3. Вам не нужен sudo. Вы можете просто загрузить двоичный файл по адресу http://iperf.fr/. Это должно сработать. Загрузите его с помощью wget, сделайте его исполняемым с помощью chmod, и вы можете напрямую запустить двоичный файл. Это работает идеально.

Я обнаружил, что при использовании настроек по умолчанию скорость одного соединения довольно сильно колеблется. Однако при более чем 3 параллельных подключениях результаты на моем гигабайтном коммутаторе более стабильны. (последовательно при скорости 910-920 Мбит/с)

Приведенная ниже команда не требует дополнительных пакетов, кроме доступа по SSH:

ssh username@myserver.example.com 'dd if=/dev/zero bs=1GB count=3 2>/dev/null' | dd of=/dev/null status=progress

Пример вывода:

2992238080 bytes (3.0 GB) copied, 27.010250 s, 111 MB/s5859375+0 records in5859375+0 records out3000000000 bytes (3.0 GB) copied, 27.1943 s, 110 MB/s

Команда печатает фиктивный файл объемом 3 ГБ (1000 ^ 3 байта), полный нулей, в stdout на удаленном сервере, который печатается (передается) через SSH в stdout локального сервера, а затем локально передается в /dev/null (т.е. игнорируется). Вы даже можете видеть ход выполнения теста во время его выполнения.

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

С помощью этот сценарий вы можете легко проверить скорость соединения между вашим компьютером и каким-либо удаленным хостом. Пример использования:

$ scp-speed-test.sh user@remote_host 80000
  • user@remote_host является вашим конечным хостом (у вас должен быть ssh-доступ к этому хосту)
  • 80000 это приблизительный размер тестового файла (в КБ), который будет получен на удаленном хосте. Это не обязательный аргумент.

Если вы хотите протестировать свою локальную сеть Ethernet на более низком уровне, вы можете использовать Etherate, который представляет собой бесплатный инструмент тестирования Linux CLI Ethernet:

https://github.com/jwbensley/Etherate

Добавляя это в микс, поскольку такие инструменты, как iPerf (которые очень хороши!), работают по IP и TCP или UDP. Etherate тестирует непосредственно через Ethernet / OSI layer 2.

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

nuttcp

server$ nuttcp -Sclient$ nuttcp -v -v -i1 1.1.1.1 ;# 1.1.1.1 is server's address

непим

 server$ nepim client$ nepim -d -c 1.1.1.1 ;# 1.1.1.1 is server's address

гобен

 server$ goben client$ goben -hosts 1.1.1.1 ;# 1.1.1.1 is server's address

как я указал в своем комментарии к best answer, это решение недостаточно хорошо, потому что клиент / сервер не оптимизированный к... сжимать каждый бит скорости

мое решение:

создайте ramdisk с обеих сторон (следовательно, вы не ограничены скоростью хранения, и я предлагаю вам создать их с помощью ramfs, а не tmpfs, чтобы они не переходили в swap... просто будьте осторожны, чтобы не оставлять как минимум 512 Мб свободной памяти для системы, это НЕОБХОДИМО, если у вас есть гигабитный Ethernet, на такой скорости даже твердотельные накопители могут замедлить работу) установите apache на сервер, затем создайте ссылку на ramdisk, создайте несколько больших файлов на ramdisk (100M-1G, вы можете их создать с помощью dd из / dev / random или скопируйте, если у вас есть под рукой), затем перейдите на сторону клиента и загрузите их (также на ramdisk этой стороны) с помощью расширенной программы загрузки, которую я использовал lftp

ну что ж, разница была существенной: от 75 Мбит / с, о которых сообщает iperf, и 9,5 М / с netcat

к 11,18М/с с моим решением:

1591129421 bytes transferred in 136 seconds (11.18M/s)

Это просто: подключите свой компьютер к первой коробке, подключите другую коробку к первой коробке. Затем с вашего компьютера пропингуйте первое поле, сохраните результат, пропингуйте другое поле и выполните вычитание.