Измерение задержки TCP от ядра Linux - PullRequest
0 голосов
/ 17 июня 2011

TCP не определяет приоритет трафика, как IP Когда открыто много фоновых подключений TCP, которые загружают данные (например, когда BitTorrent заполняется в фоновом режиме), для определенного сокета может возникнуть задержка, поскольку TCP будет выбирать только один сокет за раз для отправки своих пакетов на уровень IP. Таким образом, конкретный сокет должен ждать своей очереди, помимо множества других соединений, без приоритета, приводящего к задержке.

В настоящее время я провожу некоторые эксперименты и пытаюсь измерить задержку, создаваемую TCP в таких ситуациях перегрузки. Поскольку эта задержка происходит на транспортном (TCP) уровне, я думаю провести точное измерение задержки, перехватывая точные моменты, когда используются некоторые системные вызовы Linux.

Я готов загрузить данные на сервер с помощью TCP (я могу использовать инструмент Iperf ). Для перехвата системных вызовов я хочу использовать SystemTap . Этот инструмент может сообщить мне точный момент, когда вызывается определенный системный вызов.

Я хочу знать, какие имена двух системных вызовов используются при отправке пакета:

  1. Первая функция уровня TCP, вызываемая для пакета (это * tcp_sendmsg *);
  2. Последняя функция уровня TCP, вызывающая пакет, который передает его на уровень IP-сети?

Разница (дельта) между моментом вызова этих двух системных функций - это задержка, которую я хочу знать.

1 Ответ

1 голос
/ 23 июня 2011
  1. Первой функцией уровня TCP, вызываемой для пакета, является * tcp_sendmsg * из системного исходного файла 'net / ipv4 / tcp.c'.
  2. Последней функцией уровня TCP, вызываемой для пакета, является * tcp_transmit_skb * из системного исходного файла 'net / ipv4 / tcp_output.c'.

Интересный сайт с информацией об исходных файлах TCP из Linux: tcp_output

...