@ Карта сайта News Автора!

Bog BOS: Производительность сети и её измерение: ping, traceroute, netperf, iperf, pathrate, pathload, abget

Последние изменения:
2015.11.18: hard: обновлена статья про ИБП и их мониторинг

Последнее изменение файла: 2009.09.23
Скопировано с www.bog.pp.ru: 2016.07.26

Bog BOS: Производительность сети и её измерение: ping, traceroute, netperf, iperf, pathrate, pathload, abget

Производительность сети и её измерение

Элементарные единицы производительности сети:

Методы получения информации о производительности сети:

Утилита ping

Утилита ping посылает ICMP пакеты ECHO_REQUEST на указанный хост и использует полученные (или неполученные) в ответ ICMP пакеты ECHO_RESPONSE для определения доступности этого хоста и времени реакции. В Linux требует прав CAP_NET_RAWIO (обычно через suid root). Ключи:

Сигналы:

Возвращает 1, если не получено ни одного ответа. Возвращает 2 при ошибках. Возвращает 0, если сеть хоть как-то работает.

Утилита traceroute

Утилита traceroute позволяет выяснить маршрут следования пакетов к хосту назначения. Для этого она посылает серию UDP пакетов с TTL от 1 до 30 и получает ответы от промежуточных маршрутизаторов об истечении TTL (ICMP TIME_EXCEEDED). Для обеспечения работоспособности необходимо открыть сетевые экраны на пути следования для пакетов UDP на нужные порты. Вторым параметром можно указать размер пакета (40; путь может зависеть от размера бакета; помогает выяснить MTU в сочетании с ключом -F). Ключи:

Загадочные значки в ответах:

traceroute6 - эквивалент traceroute -6.

tracert - эквивалент traceroute -I.

tcptraceroute - эквивалент traceroute -T -p 80.

tracepath позволяет выяснить маршрут следования пакетов к хосту назначения и MTU, используя UDP-метод. Вторым параметром можно указать порт назначения.

netperf

netperf - "классический" (документация от HP к версии 2.0 от 1995 года!) инструмент измерения пропускной способности сети и времени задержки ответа (TCP, UDP, DLPI - уровень канала, UNIX domain sockets, SCTP; IPv4 и IPv6). Доступна для различных вариантов Unix, Linux, MS Windows, OpenVMS и др.. Состоит из 2 частей: netserver, который должен быть предварительно запущен на удалённом хосте, и netperf, который запускается в момент измерения. При запуске теста между netperf и netserver устанавливается управляющее соединение (по умолчанию - 12865/tcp), тестовые данные пересылаются по другому каналу (первый попавшийся "пользовательский" порт).

Брал готовые пакеты версии 2.4.2-1 с репозитария dag. Исходные тексты можно получить здесь.

Утилита netperf имеет 2 типа параметров: глобальные и специфические для типа теста. Глобальные параметры указываются первыми и отделяются от специфических параметров двумя знаками "минус" ("--"). Некоторые параметры (например, размер) задаются парами. Чтобы установить одинаковое значение элементам пары необходимо указать одно значение, чтобы установить разные - значения через запятую, только первому элементу - "значение,", только второму - ",значение".

Глобальные параметры (основные):

Специфические параметры, общие для всех тестов TCP, UDP и SCTP (через сокеты и XTI):

netserver может быть запущен как самостоятельный процесс (параметр -p задаёт номер порта управляющего соединения) или под inetd (xinetd). Параметры для inetd.conf: netserver stream tcp nowait nobody. Настройка для xinetd:

service netserver
{
  socket_type = stream
  wait        = no
  user        = nobody
  server      = адрес-программы
}

Параметры netserver:

Использование ЦП выводится в процентах от полной загрузки и в микросекундах, требуемых для передачи килобайта или транзакции. В Linux версии используется механизм /proc/stat (S).

Можно запускать с правами обычного пользователя.

Методика измерения пропускной способности

Через 1 коммутатор:

TCP_STREAM

Recv   Send    Send                          Utilization       Service Demand
Socket Socket  Message  Elapsed              Send     Recv     Send    Recv
Size   Size    Size     Time     Throughput  local    remote   local   remote
bytes  bytes   bytes    secs.    10^6bits/s  % S      % S      us/KB   us/KB

 87380  16384  16384    50.01       938.70   16.41    42.41    11.457  29.609 

Alignment      Offset         Bytes    Bytes       Sends   Bytes    Recvs
Local  Remote  Local  Remote  Xfered   Per                 Per
Send   Recv    Send   Recv             Send (avg)          Recv (avg)
    8       8      0       0 5.868e+09  16384.00    358172   8530.56 687914

Maximum
Segment
Size (bytes)
  1448

TCP_RR

Local /Remote
Socket Size   Request Resp.  Elapsed Trans.   CPU    CPU    S.dem   S.dem
Send   Recv   Size    Size   Time    Rate     local  remote local   remote
bytes  bytes  bytes   bytes  secs.   per sec  % S    % S    us/Tr   us/Tr

16384  87380  1       1      50.00   11154.17  19.80  43.03  142.024  308.618 
16384  87380 

UDP_RR

Local /Remote
Socket Size   Request Resp.  Elapsed Trans.   CPU    CPU    S.dem   S.dem
Send   Recv   Size    Size   Time    Rate     local  remote local   remote
bytes  bytes  bytes   bytes  secs.   per sec  % S    % S    us/Tr   us/Tr

126976 126976 1       1      50.01   11573.89   18.47  43.07  127.660  297.708
135168 135168

Через 5 коммутаторов:

TCP_STREAM

Recv   Send    Send                          Utilization       Service Demand
Socket Socket  Message  Elapsed              Send     Recv     Send    Recv
Size   Size    Size     Time     Throughput  local    remote   local   remote
bytes  bytes   bytes    secs.    10^6bits/s  % S      % S      us/KB   us/KB

 87380  16384  16384    50.01       919.84   8.76     42.04    3.120   29.955 

Alignment      Offset         Bytes    Bytes       Sends   Bytes    Recvs
Local  Remote  Local  Remote  Xfered   Per                 Per
Send   Recv    Send   Recv             Send (avg)          Recv (avg)
    8       8      0       0 5.75e+09  16384.02    350982   8193.70 701819

Maximum
Segment
Size (bytes)
  1448

TCP_RR

Local /Remote
Socket Size   Request Resp.  Elapsed Trans.   CPU    CPU    S.dem   S.dem
Send   Recv   Size    Size   Time    Rate     local  remote local   remote
bytes  bytes  bytes   bytes  secs.   per sec  % S    % S    us/Tr   us/Tr

16384  87380  1       1      50.01   8061.24  3.64   43.30  18.074  429.677 
16384  87380 

UDP_RR

Local /Remote
Socket Size   Request Resp.  Elapsed Trans.   CPU    CPU    S.dem   S.dem
Send   Recv   Size    Size   Time    Rate     local  remote local   remote
bytes  bytes  bytes   bytes  secs.   per sec  % S    % S    us/Tr   us/Tr

135168 135168 1       1      50.01   8427.60   5.14   42.71  24.388  405.477
135168 135168

iperf

Iperf позволяет измерить производительность сети (TCP и UDP) и поэкспериментировать с настройками приложения и хоста. Имеется версия под Windows (устанавливается как сервис: -s -D). Так же как и при использовании netperf предварительно на удалённом конце запускается iperf в режиме сервера. В момент измерения с нашей стороны запускается iperf в режиме клиента. Если сервер запускается в интерактивном режиме, то он также выдаёт результаты измерения. При запуске теста между клиентом и сервером устанавливается управляющее соединение (по умолчанию - 5001/tcp), тестовые данные пересылаются по (первый попавшийся "пользовательский" порт). Имеется также графическая "морда" Jperf и библиотека для написания своих тестов. Позволяет определить:

Ключи (при указании размеров можно использовать суффиксы K и M):

Можно запускать с правами обычного пользователя.

Устанавливал iperf-2.0.2-1.fc4.i386.rpm из extra в CentOS4 и iperf-2.0.2-3.fc6.x86_64.rpm из extra в CentOS5.

pathrate и pathload

Пакет pathrate (Constantine Dovrolis) позволяет определять максимальную пропускную способность (bandwidth) и также состоит из 2 утилит:

Особенностью пакета является способность определять общую пропускную способность канала невзирая на его текущую загрузку. Результат является статистическим и ненадёжным (основывается на задержках пакетов в цепочке пакетов). Нельзя запускать на нагруженном компьютере. На этапе инициализации pathrate определяет наличие балансировщиков трафика (измеряется пропускная способность одного канала) и ограничителей трафика (измеряется пиковая скорость), вычислияется размер буферов (определяется максимальной длиной цепочки до потери нескольких пакетов подряд). Если текущий трафик в канале невелик и постоянен, то пропускную способность канала можно определить непосредственно. Полный цикл может занять полчаса. При этом определяется зависимость задержек то размера пакетов и числа пакетов в цепочке. Имеется адаптация к "свёртыванию прерываний" на гигабитных интерфейсах.

Можно запускать с правами обычного пользователя. Измерять надо в обе стороны.

Установка pathrate (CentOS4.5 и CentOS5 с предупреждениями, программу собирать в 32-битном режиме):

У меня на составном несимметричном канале версия 2.4.1 не смогла выдать результат, (только если передатчик ставить на медленный конец, и то не всегда). На канале с VPN (PPP over SSH) версия 2.4.1 зависает. Версия 2.3.0 нормально работает на составном канале, но для VPN канала показывает какую-то чушь. Между версиями 2.3 и 2.4 изменился протокол подтверждений, новый протокол, видимо, недоработан.

Пакет pathload (1.3.2) позволяет определить доступную пропускную способность сети, не имея доступа к счётчикам активного сетевого оборудования. Используется метод, аналогичный методу в pathrate. Также состоит из двух программ (только порты 55001/udp и 55002/tcp). Ставится таким же способом (но есть адаптация к 64-бит). На VPN канале (PPP over SSH) также не работает (слишком частое переключение контекста на приёмнике независимо от направления передачи). На составном шейпированном канале всегда показывает его полную ёмкость.

pathoad_snd имеет ключ "-i" (не завершать работу после обработки первой заявки). pathload_rcv имеет дополнительные ключи:

abget

Утилита abget того же автора позволяет оценить доступную (свободную) пропускную способность сети в обоих направлениях, не имея доступа к удалённому серверу Требуется HTTP сервер на удалённом сервере и привилегии суперпользователя. Для определения доступной пропускной способности сети от сервера к нам требуется указать URL достаточно большого файла на сервере. abget эмулирует TCP протокол, чтобы спровоцировать сервер посылать данные в желаемом темпе (посылаются фальшивые ACK в нужном количестве). Осторожно с журналом сетевого экрана!

Установка abget 1.0 на Fedora Core 6:

При запуске указывает имя "жертвы" и ключи:

ncs, netest, pipechar

Не приспособлен для работы с сетевыми экранами.

nettest

Распределённая система тестирования с защитой управляющих каналов по SSL.

dbs (Distributed Benchmark System)

Не пробовал.

dbs (Distributed Benchmark System) позволяет одновременно запустить несколько потоков (dbsd), нагружающих сеть, и управлять ими из одного места (dbsc, tcp/10710). Требует синхронизации времени между узлами и gnuplot для построения графиков (dbs_view, пропускная способность каждого потока с течением времени или время задержки). Не развивается с 1998 года (удачи в компиляции и сборке ;). dbsc управляется командным файлом, в котором для каждого теста задаются параметры передатчика (хост, порт, размер буфера передачи, размер буфера приёма, шаблон трафика), параметры приёмника(хост, порт, размер буфера передачи, размер буфера приёма, шаблон обработки трафика) и параметры тестирования (файл с результатами, TCP или UDP, учитывать ли время соединения, кто передаёт, время начала, продолжительность, число повторений).

Ссылки

@ Карта сайта News Автора!

Bog BOS: Производительность сети и её измерение: ping, traceroute, netperf, iperf, pathrate, pathload, abget

Последние изменения:
2015.11.18: hard: обновлена статья про ИБП и их мониторинг

TopList

Copyright © 1996-2015 Sergey E. Bogomolov; www.bog.pp.ru (КГБ знает все, даже то что у Вас на диске ;)