Об iPerf3
iPerf3 (Internet Protocol Performance) - это бесплатный кроссплатформенный инструмент командной строки с открытым исходным кодом, используемый для проверки производительности сети с точки зрения пропускной способности и скорости (TCP и UDP). Это высоконадежный инструмент по сравнению со многими другими инструментами тестирования пропускной способности и скорости сети. Кроме того, это очень эффективный инструмент при тестировании производительности сети между двумя серверами.
Для запуска теста iPerf3 вам потребуется как минимум два сервера – исходный и конечный.
Установить iPerf3
Ubuntu / Debian
apt-get install iperf3
| Centos / RockyLinux
yum install iperf3
| Windows Скачать iperf-3.*-win64.zip
|
Плюсы iPERF3
Большое преимущество iperf3 заключается в том, что он способен запускать несколько тестовых подключений между двумя серверами одновременно. Это имеет решающее значение для тестирования соединений со скоростью 1 Гбит/с и выше (в отличие от команды wget для загрузки тестового файла, при которой только одно соединение не может использовать все ресурсы сервера – обычно максимум 1 Гбит/с).
Используя Iperf, вы можете протестировать скорость передачи данных от исходного сервера (клиент-сервер iperf) к целевому серверу (сервер прослушивания iperf). Оба сервера должны иметь достаточную пропускную способность для выполнения необходимых тестов (если вы проводите тест скорости 10 Гбит/с, обоим серверам требуется восходящая линия связи 10GE, в идеале сервер прослушивания должен иметь более высокую пропускную способность, чем клиентский сервер – 20 Гбит/с).
Используя команды Iperf на клиент-сервере (в данном случае на вашем сервере или ПК), вы запустите сравнительный тест и покажете данные о пропускной способности всех тестовых подключений.
Недостатки традиционных сервисов speedtest
Во-первых, поставщики тестов скорости проводят тесты между вашим сервером и веб-серверами на своей стороне. Поэтому вам следует проверить, какие порты восходящей линии связи есть у их конечных серверов. Большинство современных серверов speedtest работают по восходящему каналу связи со скоростью 1 Гбит/с, поэтому физически невозможно измерить пропускную способность, превышающую пропускную способность восходящего канала.
Во-вторых, если вы загружаете тестовый файл, размещенный на вашем сервере, со своего домашнего устройства, вы всегда ограничены скоростью вашего домашнего подключения к сети (скоростью, на которую вы подписались у своего местного провайдера).
Другие формы тестирования подключений, такие как команда wget, также имеют ограничения (одиночные одновременные подключения), которые делают этот метод неэффективным для тестирования пропускной способности сети в сетевых средах с высокой пропускной способностью.
Команды
Вот команда для запуска теста Iperf на вашем сервере. Единственные другие данные, которые вам понадобятся, - это IP-адрес сервера прослушивания Iperf. Рекомендуется запускать больше параллельных потоков (TCP/UDP), так как один поток будет хэширован на один физический интерфейс восходящей линии связи коммутатора доступа. Используйте параметр -P n, где n представляет количество параллельных потоков.
Команда:
iperf3 -P 20 -c ams.speedtest.clouvider.net -p 5203
В ходе этого теста будет выполнено 20 одновременных подключений к серверу прослушивания Iperf ams.speedtest.clouvider.net на порту 5203.
iperf3 -P 20 -c ams.speedtest.clouvider.net -p 5203 -R
Этот тест почти такой же, но в обратном порядке - будет тест загрузки.
Команда через Docker:
запуск программы docker --rm -p 5201:5201 -p 5201:5201/udp r0gger/iperf3 -c ams.speedtest.clouvider.net -p 5203
Опции
-c ip/хост
--bidir работать в двунаправленном режиме. Клиент и сервер отправляют и получают данные.
-p, --port порт сервера для прослушивания/подключения (по умолчанию = 5201)
-P, --parallel количество параллельных клиентских потоков для запуска (по умолчанию =10)
-i, --interval интервал в секундах между периодическими отчетами о пропускной способности
-t, --time время передачи в секундах (по умолчанию 10 секунд)
-R, --reverse обратный запуск в обратном режиме (сервер отправляет, клиент получает) (загрузка)
-4, --version4 используется только IPv4 (по умолчанию)
-6, --version6 используется только IPv6
-p, --port порт сервера для прослушивания/подключения (по умолчанию = 5201)
-f, --format [kmgtKMGT] формат для отчета: Кбит/с, Мбит/с, Гбит/с, Тбит/с
-i, --interval интервал в секундах между периодическими отчетами о пропускной способности
-F, --file name имя файла xmit/recv для указанного файла
-A, --affinity n/n,m для установки привязки к процессору
-B, --bind <host> привязка к интерфейсу, связанному с адресом
-V, --verbose более подробный вывод
-J, --json вывод в формате JSON
--logfile f отправляет вывод в файл журнала
--forceflush выводит принудительную очистку с каждым интервалом
--timestamps <format> выдают временную метку в начале каждой строки вывода (используя необязательную строку формата в соответствии с strftime(3))
-d, --debug выдает отладочный вывод
-v, --version отображает информацию о версии и завершает работу
-h, --help помогите отобразить это сообщение и завершите работу
-s, --server запускается в режиме сервера
-D, --daemon запускает сервер как демон
-I, --pidfile file записывает в PID-файл
-1, --one-off обрабатывает одно клиентское соединение, затем завершает работу
--server-bitrate-limit #[KMG][/#] общий лимит скорости передачи данных на сервере (по умолчанию 0 = без ограничений)
(необязательная косая черта и интервал в несколько секунд для усреднения общей скорости передачи данных. Значение по умолчанию - 5 секунд)
--rsa-private-key-path путь к закрытому ключу RSA, используемому для расшифровки учетных данных для аутентификации
--authorized-users-path путь к файлу конфигурации, содержащему учетные данные пользователя
-c, --client запускается в клиентском режиме
--sctp использует SCTP, а не TCP
-X, --xbind привязывает SCTP-ассоциацию к ссылкам
--nstreams # количество SCTP-потоков
-u, --udp использует UDP, а не TCP
--connect-timeout # время ожидания для настройки управляющего соединения (мс)
-b, --bitrate #[KMG][/#] целевой битрейт в битах/сек (0 для неограниченного значения)
(по умолчанию 1 Мбит/сек для UDP, неограниченный для TCP)
(необязательная косая черта и количество пакетов для пакетного режима)
--pacing-timer #[KMG] установите время для выполнения шага в микросекундах (по умолчанию 1000)
--fq-rate #[KMG] позволяет выполнять синхронизацию сокетов на основе справедливой очереди в битах в секунду (только для Linux)
-t, --time # время передачи в секундах (по умолчанию 10 секунд)
-n, --bytes #[KMG] количество байт для передачи (вместо -t)
-k, --blockcount #[KMG] количество блоков (пакетов) для передачи (вместо -t или -n)
-l, --length #[KMG] длина буфера для чтения или записи (по умолчанию 128 КБАЙТ для TCP, динамического или 1460 КБАЙТ для UDP)
--cport привязка к определенному клиентскому порту (TCP и UDP, по умолчанию: временный порт)
-P, --parallel # количество запускаемых параллельных клиентских потоков
-R, --reverse запуск в обратном режиме (сервер отправляет, клиент получает)
--bidir работает в двунаправленном режиме. Клиент и сервер отправляют и получают данные.
-w, --window #[KMG] задает размер окна / размер буфера сокета
-C, --congestion задает алгоритм управления перегрузкой TCP (только для Linux и FreeBSD)
-M, --set-mss # установить максимальный размер сегмента TCP/SCTP (MTU - 40 байт)
-N, --no-delay установить TCP/SCTP без задержки, отключив алгоритм Нэгла
-4, --version4 используется только IPv4
-6, --version6 используется только IPv6
-S, --tos N укажите тип IP-адреса службы, 0-255.
Можно использовать обычные префиксы для восьмеричного и шестнадцатеричного чисел, т.е. 52, 064 и 0x34 указывают одно и то же значение.
--dscp N или --dscp задает значение IP dscp, либо 0-63, либо символьное.
Числовые значения могут быть указаны в десятичной, восьмеричной и шестнадцатеричной формах (см. --tos выше).
-L, --flowlabel N устанавливает метку потока IPv6 (поддерживается только в Linux)
-Z, --zerocopy использует метод отправки данных с нулевой копией
-O, --omit N пропуск первых n секунд
-T, --title str префикс к каждой строке вывода с этой строкой
--extra-data str строка данных для включения в клиентский и серверный JSON
--get-server-output получение результатов с сервера
--udp-counters-64bit используйте 64-разрядные счетчики в тестовых пакетах UDP
--repeating-payload нагрузка используйте повторяющийся шаблон в полезной нагрузке вместо случайной полезной нагрузки (как в iperf2)
--username имя пользователя для аутентификации
--rsa-public-key-path к открытому ключу RSA, используемому для шифрования учетных данных для аутентификации