Як ви протестуєте швидкість мережі між двома полями?


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 метрів cat5e), і перевантажень немає. 600mbps все ще досить швидко.
Олі

Це чудово, але у мене немає кореневого доступу до сервера.
Джефф

Спробуйте -P 10. Мій результат при одному підключенні схожий на jschoens, але при 3+ паралельних з'єднаннях він послідовно штовхає 920Mbps.
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-920Mbps)


8

Використовуючи цей скрипт, ви можете легко перевірити швидкість з'єднання між вашою машиною та деяким віддаленим хостом. Приклад використання:

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

4
Це здається, щоб перевірити швидкість програми SCP, яка буде нижчою, ніж тест на нижньому шарі. Наприклад, nc використовує L4. Звичайно, це чудово, якщо ви більше дбаєте про швидкість SCP.
судо

1
Проблеми: Цей сценарій записує та зчитує файл на диск - це повільніше, ніж оперативної пам'яті, тому може бути штучним сповільненням. Також надсилає лише нулі, якщо вони стиснуті, це велика штучна швидкість. Якщо ви хочете використовувати псевдовипадкові дані, не використовуйте /dev/random(вони можуть блокувати) абоurandom (коментарі посилань пропонують це), вони теж можуть бути дуже повільними, замість цього використовуйте dm-крипту (див. FAQ cryptsetup 2.19. Як я можу стерти пристрій з крипто- ступінь випадковості? ), можливо, з файлом в операційному режимі.
Xen2050

4

Якщо ви хочете протестувати свою Ethernet LAN на більш низькому рівні, ви можете використовувати Etherate, який є безкоштовним інструментом тестування Ethernet Linux CLI:

https://github.com/jwbensley/Etherate

Кидаючи його в суміш, оскільки такі інструменти, як iPerf (які дуже хороші!) Працюють над IP та TCP або UDP. Ететераційні тести безпосередньо через рівень 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 байтів), повний нулів для stdout на віддаленому сервері, який друкується (передається) через SSH до stdout локального сервера, а потім локально передається /dev/null(тобто ігнорується). Ви навіть можете бачити хід тесту під час його виконання.

Безумовно, не настільки точний, як інші інструменти, але моїм випадком використання було налагодження процесу резервного копіювання, де я хотів перевірити, чи швидкість мережі була проблемою без встановлення додаткових пакетів.


1

Існують також інші приємні інструменти командного рядка для порівняння пропускної здатності між двома хостами:

nuttcp

server$ nuttcp -S
client$ 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

2
Чим вони відрізняються один від одного і від iperf? Вони працюють так само, що роблять? nuttcp є в Debian і, мабуть, "nuttcp заснований на nttcp, що, в свою чергу, було вдосконаленням когось із Silicon Graphics (SGI) на оригінальному ttcp, який написав Майк Муусс на BRL десь до грудня 1984 року для порівняння продуктивності TCP стеки від UC Berkeley і BBN, щоб допомогти DARPA вирішити, яку версію розмістити в першій версії BSD Unix. "
Xen2050

0

як я зазначив у своєму коментарі в кращому варіанті відповіді, це рішення недостатньо добре, тому що клієнт / сервер не оптимізований для ... стискати кожен шматочок швидкості

моє рішення:

зробіть ramdisk з обох сторін (отже, ви не обмежені швидкістю зберігання, і я пропоную вам зробити їх з ramfs, а не tmpfs, щоб вони не перейшли в обмін ... просто будьте обережні, щоб не залишати принаймні 512M вільної пам'яті для системи це ПОТРІБНО, якщо у вас є гіга-мережа, на такій швидкості навіть SSD-диски можуть сповільнити роботу) встановіть 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)

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

-4

Легко підключіть комп’ютер до першої коробки, а іншу до першої. Потім з комп’ютера пінг першого поля збережіть результат, пінг другого поля і виконайте віднімання.


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

Не моя вина, якщо він запитав швидкість, але хотів пропускну здатність.
Няміу Галеантроп

1
Затримка - це час реакції, а не швидкість.
wullxz
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.