Натрапив на цікаву статтю про утилітки для тестування пропускної здатності мережі. Є один додаток, вкрай залежне від все цієї фігні, і якимось чином треба протести і знайти слабке місце. Для початку просто опублікую статтю, а потім сам напишу невеликий огляд, з тестом. Понеслася.
Як вчинити, якщо необхідно провести тестування навантаження каналу зв'язку, маршрутизатора і при цьому залишитися при своїх грошах? Не знаєте? Запитайте мене :). Вихід є.
У комплект утиліти входить документація, в якій розписані ключики для запуску виконуваного файлу. Все досить докладно, тому я тут розповім про приклади використання iperf і особливості роботи з ним.
Перш за все, нам необхідні два комп'ютери. Один з них буде генерувати трафік, він називається клієнтом. а інший - приймати пакети і вести підрахунок статистики, він називається сервером. На обох машинах запускається один і той же виконуваний файл, але з різними ключами.
Перевірка на TCP трафіку.
iperf -c server_host
Щоб збільшити тривалість з'єднання, необхідно додати в рядок запуску клієнта параметр -tnsec. де nsec - тривалість з'єднання в секундах.
Не менш корисним буде ключик -insec. Тут nsec відповідає періоду (в секундах, природно), через який буде виводитися статистика.
Перевірка на UDP трафіку.
Для запуску iperf в режимі UDP необхідно додати і клієнту і серверу ключі -u.
Протокол UDP більш "тупий", що дає нам як деякі переваги, так і недоліки. Втім, для цілей тестування, недоліки знову-таки перетворюються в переваги.
Отже, що ми можемо:
- змінювати довжину переданих пакетів
- змінювати смугу переданого трафіку
- працювати на односторонніх каналах
- використовувати iperf без запуску сервера, якщо канал не наскрізний, а необхідно просто генерувати заданий трафік для навантаження
Для зміни довжини пакета використовується ключ -llength. Варто тільки пам'ятати, що при length = 0 реальна довжина Ethernet-фрейми становитиме 54 байта і робити в своїх розрахунках відповідну поправку.
Для зміни смуги трафіку використовується ключ -bbandwidth. Параметр bandwidth виражається в бітах в секунду і може містити десяткову точку і суфікси k і M. відповідні приставок кіло і мега.
При роботі на односторонніх каналах слід пам'ятати, що клієнт в таких випадках статистику не відображає і при завершенні сесії виводить повідомлення про помилку, яке можна з спокійно проігнорувати.
Запуск декількох потоків трафіку.
Ми можемо запустити кілька екземплярів клієнтів і серверів на одній і тій же машині. Для розв'язки трафіку використовується призначення різних портів за допомогою параметра -pport його значення на клієнті і відповідаю щем сервері повинно бути однаковим (за замовчуванням, він має значення 5001).
Практика показала, що при запуску декількох клієнтів на одній машині, iperf захоплює практично всі ресурси ЦП, через що в деяких потоках можливо пропажа пакетів. Тут, мабуть, є якась помилка в коді, що викликає некоректну роботу при context switching. Все вищевказане справедливо для iperf. Netperf працює під Linux цілком коректно.
У файлах допомоги ви знайдете ще параметр -S. дозволяє встановлювати значення Type Of Servise (TOS) в IP заголовку. Змушений вас розчарувати, під Windows це не працює. (Що характерно, я не зміг встановити це поле і в стандартному ping для Windows).