151 votes

Performances de la connexion TCP loopback par rapport à la connexion Unix Domain Socket

Je travaille sur une application basée sur Android et iOS qui nécessite une communication avec un serveur fonctionnant sur le même appareil. Nous utilisons actuellement une connexion TCP loopback pour communiquer avec l'application et le serveur (l'application est écrite dans la couche utilisateur, le serveur est écrit en C++ en utilisant Android NDK).

Je me demandais si le remplacement de l'intercommunication par un socket de domaine Unix améliorerait les performances ?

Ou, de manière générale, existe-t-il une preuve/théorie qui prouve que le socket Unix Domain donnerait de meilleures performances que la connexion TCP loopback ?

127voto

0x4a6f4672 Points 4986

Oui, la communication interprocessus locale par des sockets de domaine unix devrait être plus rapide que la communication par des connexions localhost de bouclage, car il y a moins de surcharge TCP. aquí .

117voto

Guillermo Lopez Points 1524

Cette référence : https://github.com/rigtorp/ipc-bench fournit des tests de latence et de débit pour les sockets TCP, Unix Domain Sockets (UDS) et 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: 0.253702 million msg/s

UDS average throughput: 1.733874 million msg/s

PIPE average throughput: 1.682796 million msg/s

66% de latence et presque 7X plus de débit expliquer pourquoi la plupart des logiciels critiques en termes de performances ont leur propre protocole IPC personnalisé.

52voto

woodings Points 1117

Redis repère montre que le socket de domaine unix peut être beaucoup plus rapide que le loopback TCP.

Lorsque les programmes de benchmark du serveur et du client sont exécutés sur la même machine, les sockets de bouclage TCP/IP et les sockets de domaine unix peuvent être utilisés. Selon la plate-forme, les sockets de domaine unix peuvent atteindre un débit supérieur d'environ 50% à celui du loopback TCP/IP (sous Linux par exemple). Le comportement par défaut de redis-benchmark est d'utiliser le bouclage TCP/IP.

Toutefois, cette différence n'a d'importance que lorsque le débit est élevé.

Throughput per data size

13voto

peterDriscoll Points 9

Les sockets de domaine Unix sont souvent deux fois plus rapides qu'un socket TCP lorsque les deux homologues sont sur le même hôte. Les protocoles de domaine Unix ne sont pas une suite de protocoles à proprement parler, mais un moyen d'effectuer des communications client/serveur sur un seul hôte en utilisant la même API que celle utilisée par les clients et les serveurs sur différents hôtes. Les protocoles de domaine Unix sont une alternative aux méthodes de communication interprocessus (IPC).

1voto

Les sockets de domaine Unix sont effectivement plus rapides que TCP, comme la plupart des autres réponses l'ont suggéré ici. Je voudrais également ajouter que c'est toujours une bonne idée d'effectuer des tests de référence et d'avoir une idée réelle des performances, car il peut y avoir des différences d'une plate-forme à l'autre. Voici une bonne collection de benchmarks qui couvrent différentes manières de faire de l'IPC : https://github.com/goldsborough/ipc-bench .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X