TCP не отдает приоритет трафику, как IP. Когда открыто много фоновых соединений TCP, которые загружают данные (например, когда BitTorrent выполняет раздачу в фоновом режиме), может возникнуть задержка для определенного сокета, потому что TCP будет выбирать только один сокет за раз для отправки своих пакетов на уровень IP. Таким образом, конкретный сокет должен ждать своей очереди, помимо множества других соединений, без какого-либо приоритета, что приводит к задержке.
В настоящее время я провожу некоторые эксперименты и пытаюсь измерить задержку, создаваемую TCP в таких ситуациях перегрузки. Поскольку эта задержка возникает на уровне транспорта (TCP), я думаю провести точное измерение задержки, перехватив точные моменты, когда используются некоторые системные вызовы Linux.
Я хочу загрузить данные на сервер с помощью TCP (я могу использовать инструмент Iperf). Для перехвата системных вызовов я хочу использовать SystemTap. Этот инструмент может сказать мне точный момент, когда вызывается конкретный системный вызов.
Я хочу знать, какие имена двух системных вызовов используются при отправке пакета:
- Первая функция уровня TCP вызвала пакет (это tcp_sendmsg);
- Последняя функция уровня TCP вызвала пакет, который передает его на уровень IP-сети?
Разница (дельта) между моментом вызова этих двух системных функций и есть задержка, которую я хочу знать.