(Cómo) ¿Puedo reducir la latencia del zócalo?

He escrito un proxy HTTP que hace algunas cosas que no son relevantes aquí, pero está aumentando el tiempo de servicio del cliente en una cantidad enorme (600us sin proxy vs 60000us con él). Creo que he encontrado de dónde proviene la mayor parte de ese tiempo: entre que mi proxy termina de enviar de vuelta al cliente y el cliente termina de recibirlo. Por ahora, el servidor, el proxy y el cliente se ejecutan en el mismo host, utilizando localhost como direcciones.

Una vez que el proxy ha terminado de enviar (una vez que ha regresado de send () al menos), imprimo el resultado de gettimeofday que da un tiempo absoluto. Cuando mi cliente ha recibido, imprime el resultado de gettimeofday. Dado que ambos están en el mismo host, esto debería ser preciso. Todas las llamadas send () no tienen banderas, por lo que están bloqueando. La diferencia entre los dos es de unos 40000us.

El socket del proxy en el que escucha las conexiones del cliente se configura con las sugerencias AF_UNSPEC, SOCK_STREAM y AI_PASSIVE. ¿Presumiblemente un socket de accept () que tendrá los mismos parámetros?

Si entiendo todo esto correctamente, Apache logra hacer todo en 600us (incluido el equivalente de lo que esté causando este retraso de 40000us). ¿Alguien puede sugerir qué podría estar causando esto? Intenté configurar la opción TCP_NODELAY (sé que no debería, es solo para ver si marcó la diferencia) y el retraso entre terminar de enviar y terminar de recibir se redujo, olvido el número pero <1000us.

Todo esto está en Ubuntu Linux 2.6.31-19. Gracias por cualquier ayuda

Respuestas a la pregunta(7)

Su respuesta a la pregunta