4

Я надеюсь найти существующий инструмент Linux для измерения задержки:

Я пытаюсь диагностировать, сколько задержки моя ОС и карта NIC добавляют к задержке TCP в Linux. Я посмотрел на следующие инструменты, но все (по крайней мере, на уровне поверхности) измеряли пропускную способность (Мбит / с), а не задержку (наносекунды для передачи 1 пакета размером x).

Nttcp Nutcp Netperf Iperf

Если бы я написал собственный тест, он, вероятно, сделал бы следующее:

Клиент:

  1. Создайте поддельное сообщение указанной длины с некоторым дополнением для увеличивающегося идентификатора. Откройте TCP-соединение (с правым
    такие параметры, как TCP_NODELAY и т. д.)
  2. Цикл и отправка сообщений, содержащих инкрементный идентификатор. Сохраните текущее системное время (в нано), связанное с идентификатором.
  3. Прослушайте ответы, запишите текущее время и запишите задержку этого идентификатора асинхронно

сервер

  1. Прослушай связь
  2. Эхо обратно любое сообщение получено

Предполагая, что оба блока имеют одинаковую настройку (конфиги, карты, ОС, ЦП и т.д.), Относительно близки друг к другу в сети, и примерно известно значение задержки в сети, можно получить приблизительную оценку вклада OS + NIC и начать тестирование различных конфигураций.

Можно также получить более точную картину задержки, используя сетевой анализатор и отслеживая линии между двумя хостами, вычисляя задержку между двумя сторонами для идентификатора, а затем вычитая ее из внутренней задержки.

Итак, кто-нибудь знает инструмент или даже некоторый шаблонный код для тестирования такого рода вещей?

4 ответа4

3

Существует инструмент под названием qperf который может предоставить вам такую статистику. Тем не менее, он связан с пакетами OFED/RDMA.

# qperf -v xx.xx.xx.xx tcp_lat udp_lat
tcp_lat:
    latency        =  29.2 us
    msg_rate       =  34.2 K/sec
    loc_cpus_used  =    41 % cpus
    rem_cpus_used  =  11.5 % cpus
udp_lat:
    latency        =  24.8 us
    msg_rate       =  40.4 K/sec
    loc_cpus_used  =    34 % cpus
    rem_cpus_used  =     4 % cpus
1

Вы искали пинг случайно?

0

Просто нашел почти то, что я ищу (за исключением последовательности, которую я могу сопоставить с помощью сниффера, но это нормально): http://linux.die.net/man/1/netpipe

0

Взгляните на встроенный инструмент производительности (tools/perf). Он может, по крайней мере, предоставить вам некоторые данные о сетевой карте.

Существует также пакет LTTng с некоторой поддержкой трассировки сети и системного вызова. На стороне программного обеспечения вам нужно время между вводом sys_write() и выходом из функции в конце цепочки вызовов start_xmit(), поэтому вам, возможно, придется вставить свои собственные точки трассировки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .