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


168

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

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

Ответы:


272

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

Как демод:

$ 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 Мбит / с.


Мужик, у тебя есть все ответы на мои вопросы! Моя сеть, по-видимому, не настроена, а ваша единственная передача - 714 МБ и пропускная способность 598 Мбит / с. Не знаю, возможно, заглянуть в это в будущем. Благодарю.
— Джейкоб Шоен

Справедливости ради, другая коробка находится всего в одном выключателе (и 20 метров кат5е), и здесь нет заторов. 600 Мбит / с все еще довольно быстро.
— Оли

Это здорово, но у меня нет корневого доступа к серверу.
— Джефф

Попробуйте -P 10. Мой результат с одним соединением аналогичен jschoens, но с 3+ параллельными соединениями он постоянно увеличивает скорость 920 Мбит / с.
— wujj123456

1
@CMCDragonkai Вы, вероятно, не должны тестировать ресурсы, которые не являются вашими. Тяжелые тесты пропускной способности могут оказать влияние на кратковременную стабильность.
— Оли

22

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

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

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


8

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

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

4
Похоже, что это тестирует скорость приложения SCP, которая будет ниже, чем тест на нижнем уровне. Например, nc использует L4. Конечно, это замечательно, если вы больше заботитесь о скорости SCP.
— Судо

1
Имеет проблемы: этот скрипт записывает и читает файл на диск - это медленнее, чем оперативная память, поэтому может быть искусственное замедление. Также отправляет только нули, если они сжаты, это большое искусственное ускорение. Если вам нужны псевдослучайные данные, не используйте /dev/random(они могут блокировать) илиurandom (ссылки на комментарии подсказали, что) они тоже могут быть очень медленными, вместо этого используйте dm-crypt (см. FAQ по cryptsetup 2.19 Как я могу стереть устройство с помощью crypto- оценка случайности? ) может с файлом в баране.
— Xen2050

4

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

https://github.com/jwbensley/Etherate

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


2

Команда ниже не требует дополнительных пакетов, но доступ по 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(то есть игнорируется). Вы даже можете увидеть прогресс теста во время его выполнения.

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


1

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

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

Гобен

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

2
Чем они отличаются друг от друга и от iperf? Они работают одинаково, что они делают? nuttcp находится в Debian и, очевидно, «nuttcp основан на nttcp, который, в свою очередь, был усовершенствован кем-то из Silicon Graphics (SGI) для оригинального ttcp, который был написан Майком Мууссом в BRL где-то до декабря 1984 года, чтобы сравнить производительность TCP стеки UC Berkeley и BBN, чтобы помочь DARPA решить, какую версию разместить в первом выпуске BSD Unix ».
— Xen2050

0

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

мое решение:

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

да ладно, разница была большой: 75 Мбит / с, сообщенных iperf, и 9.5M / s netcat.

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

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

1
9,5M * 8 = 76 Мбит / с; это довольно близко к 75 Мбит / с
— Fusca Software

-4

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


10
Это показывает задержку сети, которая составляет только одну часть скорости. Например, 3G-соединение моего телефона имеет огромную задержку (100-300 мс), но оно все еще может управлять пропускной способностью 5 Мбит / с.
— Оли

Не моя вина, если он спросил скорость, но хотел пропускную способность.
— Nyamiou Galeanthrope

2
Задержка - это время реакции, а не скорость.
— wullxz
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.