(Как) я могу уменьшить задержку сокета?
Я написал HTTP-прокси, который делает некоторые вещи, которые здесь не актуальны, но он увеличивает время обслуживания клиента на огромную сумму (600us без прокси против 60000us с ним). Я думаю, что я нашел, откуда исходит основная часть этого времени - между моим прокси-сервером, заканчивающим отправку обратно клиенту, и клиентом, заканчивающим его получение. На данный момент сервер, прокси и клиент работают на одном хосте, используя localhost в качестве адресов.
Когда прокси-сервер завершил отправку (по крайней мере, как только он вернулся из send ()), я печатаю результат gettimeofday, который дает абсолютное время. Когда мой клиент получил, он печатает результат gettimeofday. Так как они оба на одном хосте, это должно быть точно. Все вызовы send () не имеют флагов, поэтому они блокируются. Разница между ними составляет около 40000US.
Сокет прокси, на котором он прослушивает клиентские подключения, настроен с помощью подсказок AF_UNSPEC, SOCK_STREAM и AI_PASSIVE. Предположительно сокет от accept () на котором будет иметь те же параметры?
Если я все это правильно понимаю, Apache удастся сделать все за 600us (включая эквивалент того, что вызывает задержку в 40000us). Кто-нибудь может подсказать, что может быть причиной этого? Я попытался установить опцию TCP_NODELAY (я знаю, что не должен, это просто посмотреть, если это имеет значение), и задержка между завершением отправки и завершением приема снизилась, я забыл число, но <1000us.
Это все на Ubuntu Linux 2.6.31-19. Спасибо за любую помощь