sockets unix tcp loopback unix-socket

sockets - Conexión de bucle invertido TCP frente al rendimiento de socket de dominio Unix



loopback unix-socket (4)

El benchmark Redis muestra que el socket de dominio Unix puede ser significativamente más rápido que el loopback TCP.

Cuando los programas de referencia del servidor y del cliente se ejecutan en el mismo cuadro, se pueden usar los sockets de dominio de bucle de TCP / IP y unix. Dependiendo de la plataforma, los sockets de dominio de Unix pueden lograr alrededor de un 50% más de rendimiento que el bucle invertido de TCP / IP (en Linux, por ejemplo). El comportamiento predeterminado de redis-benchmark es usar el loopback TCP / IP.

Sin embargo, esta diferencia solo importa cuando el rendimiento es alto.

Trabajando en una aplicación basada en Android e iOS que requiere comunicación con un servidor que se ejecuta en el mismo dispositivo. Actualmente, utiliza la conexión de bucle invertido TCP para comunicarse con la aplicación y el servidor (aplicación escrita en la capa de usuario, servidor escrito en C ++ con Android NDK)

Me preguntaba si reemplazar la comunicación interna con el socket de Dominio de Unix mejoraría el rendimiento.

¿O en general existe alguna evidencia / teoría que demuestre que el socket Unix Domain daría un mejor rendimiento que la conexión TCP loopback?


Este punto de referencia: https://github.com/rigtorp/ipc-bench proporciona pruebas de latencia y rendimiento para los sockets TCP, Sockets de dominio Unix (UDS) y PIPEs.

Here you have the results on a single CPU 3.3GHz Linux machine : TCP average latency: 6 us UDS average latency: 2 us PIPE average latency: 2 us TCP average throughput: 253702 msg/s UDS average throughput: 1733874 msg/s PIPE average throughput: 1682796 msg/s

66% de reducción de latencia y casi 7 veces más rendimiento explican por qué la mayoría del software de rendimiento crítico tiene su propio protocolo personalizado IPC.


Los sockets de dominio Unix suelen ser dos veces más rápidos que un socket TCP cuando ambos pares están en el mismo host. Los protocolos de dominio de Unix no son un conjunto de protocolos real, sino una forma de realizar la comunicación cliente / servidor en un solo host utilizando la misma API que se utiliza para clientes y servidores en diferentes hosts. Los protocolos de dominio Unix son una alternativa a los métodos de comunicación entre procesos (IPC).