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


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.