(Como) Posso reduzir a latência do soquete?

Eu escrevi um proxy HTTP que faz algumas coisas que não são relevantes aqui, mas está aumentando o tempo de atendimento do cliente em uma quantidade enorme (600us sem proxy vs 60000us com ele). Acho que descobri de onde vem a maior parte desse tempo - entre o meu proxy terminar de enviar de volta para o cliente e o cliente terminar de recebê-lo. Por enquanto, servidor, proxy e cliente estão em execução no mesmo host, usando host local como os endereços.

Depois que o proxy terminar de enviar (depois de retornar de send () pelo menos), imprimo o resultado de gettimeofday, que fornece um tempo absoluto. Quando meu cliente recebe, ele imprime o resultado de gettimeofday. Como os dois estão no mesmo host, isso deve ser preciso. Todas as chamadas send () não possuem sinalizadores e, portanto, estão bloqueando. A diferença entre os dois é de cerca de 40000us.

O soquete do proxy no qual ele escuta as conexões do cliente é configurado com as dicas AF_UNSPEC, SOCK_STREAM e AI_PASSIVE. Presumivelmente, um soquete de accept () que terá os mesmos parâmetros?

Se estou entendendo tudo isso corretamente, o Apache consegue fazer tudo em 600us (incluindo o equivalente do que estiver causando esse atraso de 40000us). Alguém pode sugerir o que pode estar causando isso? Eu tentei configurar a opção TCP_NODELAY (eu sei que não deveria, é apenas para ver se isso fez alguma diferença) e o atraso entre o término do envio e o término do recebimento caiu, esqueci o número, mas <1000us.

Tudo isso no Ubuntu Linux 2.6.31-19. Obrigado por qualquer ajuda

questionAnswers(7)

yourAnswerToTheQuestion