web-dev-qa-db-de.com

TCP Loopback-Verbindung vs. Unix Domain Socket-Leistung

Arbeiten an einer Android und iOS-basierten Anwendung, für die die Kommunikation mit einem Server auf demselben Gerät erforderlich ist. Derzeit wird eine TCP Loopback-Verbindung für die Kommunikation mit App und Server verwendet (App in Benutzerebene geschrieben, Server in C++ mit Android NDK geschrieben)

Ich habe mich gefragt, ob das Ersetzen der Interkommunikation mit dem Unix-Domain-Socket die Leistung verbessern würde.

Oder gibt es generell Hinweise/Theorien, die belegen, dass Unix Domain Sockets eine bessere Leistung erbringen als Loopback-Verbindungen mit TCP?

91
RDX

Ja, die lokale Interprozesskommunikation über Unix-Domain-Sockets sollte schneller sein als die Kommunikation über Loopback-Localhost-Verbindungen, da Sie weniger TCP Overhead haben , siehe hier und hier .

87
0x4a6f4672

Dieser Benchmark: https://github.com/rigtorp/ipc-bench bietet Latenz- und Durchsatztests für TCP - Sockets, Unix Domain Sockets (UDS) und 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

Reduzierung der Latenz um 66% und fast 7-facher Durchsatz erklären, warum die meisten Kritische Software verfügt über ein eigenes IPC benutzerdefiniertes Protokoll.

62
Guillermo Lopez

Redis Benchmark zeigt an, dass Unix-Domain-Sockets signifikant schneller sein können als TCP Loopback).

Wenn die Server- und Client-Benchmark-Programme auf derselben Box ausgeführt werden, können sowohl der TCP/IP-Loopback- als auch der Unix-Domain-Sockets verwendet werden. Unix-Domain-Sockets können je nach Plattform einen um rund 50% höheren Durchsatz erzielen als der TCP/IP-Loopback (z. B. unter Linux). Das Standardverhalten von redis-benchmark ist die Verwendung des TCP/IP-Loopbacks.

Dieser Unterschied ist jedoch nur wichtig, wenn der Durchsatz hoch ist.

Throughput per data size

31
woodings

Unix-Domain-Sockets sind häufig doppelt so schnell wie ein TCP) - Socket, wenn sich beide Peers auf demselben Host befinden. Die Unix-Domain-Protokolle sind keine eigentliche Protokollsuite, sondern eine Methode zur Durchführung der Client/Server-Kommunikation auf einem einzelnen Host mit derselben API, die für Clients und Server auf verschiedenen Hosts verwendet wird Die Unix-Domänenprotokolle sind eine Alternative zu den IPC-Methoden (IPC = Interprocess Communication).

6
peterDriscoll