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

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

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

210
задан 7 December 2017 в 12:19

8 ответов

Я использую 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 5001
TCP 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

Как demod:

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

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

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

327
ответ дан 7 December 2017 в 12:19

Используя этот скрипт , вы можете легко проверить скорость соединения между вашим компьютером и некоторым удаленным хост. Пример использования:

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

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

nuttcp

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

nepim

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

goben

 server$ goben
 client$ goben -hosts 1.1.1.1 ;# 1.1.1.1 is server's address
3
ответ дан 7 December 2017 в 12:19

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

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

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

24
ответ дан 7 December 2017 в 12:19

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

мое решение:

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

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

до 11,18M / s с моим решением:

1591129421 bytes transferred in 136 seconds (11.18M/s)
0
ответ дан 7 December 2017 в 12:19

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

https://github.com/jwbensley/Etherate

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

4
ответ дан 7 December 2017 в 12:19

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

-4
ответ дан 7 December 2017 в 12:19

Приведенная ниже команда не требует дополнительных пакетов, но требует доступа по 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/s
5859375+0 records in
5859375+0 records out
3000000000 bytes (3.0 GB) copied, 27.1943 s, 110 MB/s

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

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

9
ответ дан 22 November 2019 в 22:48

Другие вопросы по тегам:

Похожие вопросы: