2009-10-29 5 views
16

Wie effizient ist die Verwendung von Sockets beim IPC im Vergleich zu Named Pipes und anderen Methoden unter Windows und Linux?Sockets auf derselben Maschine für Windows und Linux

Im Moment habe ich 4 separate Apps auf 4 separaten Boxen, die kommunizieren müssen. Zwei sind .NET 3.5-Anwendungen, die auf Windows Server 2003 R2 ausgeführt werden. Zwei davon sind Linux (Suse Linux 10). Sie sind im Allgemeinen nicht CPU-gebunden. Die Menge an Datenverkehr ist nicht so groß, aber es ist sehr wichtig, dass es eine niedrige Latenz hat. Wir verwenden derzeit Sockets mit deaktiviertem Nagle und dem Slow Start-Patch sles10, der auf den Linux-Rechnern installiert ist.

Wie viel von einer Geschwindigkeitssteigerung glaubst du, würden wir einfach durch Ausführen der beiden Windows-Apps auf der gleichen Windows-Box und den beiden Linux-Apps auf der gleichen Linux-Box und ohne Code-Änderungen (dh immer noch mit Sockets).

Wird das Betriebssystem erkennen, dass die Endpunkte auf demselben Rechner liegen und nicht mit den Paketen zum Ethernet gehen? Müssen die Pakete noch den gesamten Netzwerkstack durchlaufen? Wie viel schneller ist es, wenn wir uns die Zeit nehmen, zu Named Pipes oder Memory-Mapped-Files oder etwas anderem zu wechseln?

+7

Dies ist einfach zu testen. Testen Sie es einfach. –

+3

+1, jeffamaphone: keine vagen Kommentare oder anekdotische Beweise spielen hier eine Rolle. Was zählt, ist, wie * Michaels * Programme sich verhalten. –

+3

Einverstanden, ich sollte es testen. Das ist der einzige Weg, um sicher zu sein, angesichts der Unterschiede in Netzwerken, Setups usw. Aber ich habe nur gehofft, dass jemand eine Verbindung zu jemandem hat, der bereits einen sehr ähnlichen Test gemacht hat. Ich kann mir nicht vorstellen, dass ein rigoros Vergleich der Leistung dieser Dinge eine neue Idee ist - es wurde wahrscheinlich 100 Mal von Leuten gemacht, die mehr über Vernetzung wissen als ich. –

Antwort

16

Wie für die TCP-Leistung, habe ich diese Art von Test kürzlich auf einem HP-UX Server (8 Intel Itanium 2 Prozessoren 1,5 GHz 6 MB, 400 MT/s Bus) und auf Red Hat Linux (2 IA-64 1,6 Ghz). Ich habe iperf verwendet, um TCP-Leistung zu testen. Ich habe festgestellt, dass die Geschwindigkeit des TCP-Austauschs mehr als zehnmal schneller ist, wenn ich iperf auf derselben Maschine laufe, im Vergleich zur Ausführung von iperf auf zwei verschiedenen Maschinen.

Sie können es auch versuchen, da es Optionen gibt, die für Sie von Interesse sein könnten - Länge des Puffers zum Lesen oder Schreiben, setzen TCP keine Verzögerung und so weiter. Außerdem können Sie die Geschwindigkeit des TCP-Austauschs auf Windows-Rechnern vergleichen, da es eine Version von iperf für Winddws gibt.

Dies ist ein Vergleich:

1) Geschwindigkeit des TCP Austausch zwischen zwei iperf applicatons auf verschiedenen HP-UX-Server, Standard-TCP-Fenster 32K ausgeführt wird: 387 Mbits/sec

2) Geschwindigkeit der TCP-Austausch zwischen zwei iperf-Anwendungen, die auf einem anderen HP-UX-Server ausgeführt werden, TCP-Fenster 512K: 640 Mbit/s

3) Geschwindigkeit des TCP-Austauschs zwischen zwei iperf-Anwendungen, die auf demselben HP-UX Server ausgeführt werden, Standard-TCP-Fenster 32K: 5,60 Gbit/s

4) Geschwindigkeit des TCP-Austauschs zwischen zwei iperf-Anwendungen, die auf demselben HP-UX-Server ausgeführt werden, Standard-TCP-Fenster 512 K: 5,70 Gbit/s.

5) Geschwindigkeit des TCP Austausch zwischen zwei iperf applicatons auf demselben Linux-Server ausgeführt wird, TCP-Fenster 512K: 7,06 GBit/s

6) Geschwindigkeit des TCP Austausch zwischen zwei iperf applicatons auf HP-UX und Linux TCP-Fenster 512 K: 699 Mbit/s

+0

Das ist perfekt. Wird das auf meinem Setup als Start ausführen. Vielen Dank! –

3

Lokale Named Pipes sind schneller, da sie im Kernelmodus ausgeführt werden.

+0

Einverstanden. Aber in Bezug auf die Größe, das ist der größere Sprung, wenn Sie von (Sockets auf verschiedenen Maschinen) gehen -> (Sockets auf der gleichen Maschine) -> (Named Pipes)? Wie viel kostet es Sie, die Apps nur auf demselben Computer auszuführen, anstatt die Zeit für die Konvertierung in Named Pipes zu verwenden? –

+0

Wenn Sie die Apps auf demselben Computer ausführen, erhalten Sie einen großen Leistungsschub, da die Ethernet-Latenz drastisch reduziert wird. Wenn Sie zu Named Pipes wechseln, werden Sie wahrscheinlich einen größeren Schub erhalten, wenn Sie es brauchen. Ich würde empfehlen, dass Sie zuerst nur mit dem TCP/IP-Stack versuchen und dann zu Named Pipes wechseln, wenn Sie diesen Boost unbedingt benötigen. Quoten werden Sie nicht, aber ich kann das nicht sicher wissen, da ich nicht genug über Ihre Situation weiß. – Randolpho

+2

Verwenden Sie UNIX-Domänen-Sockets! Diese entsprechen in der Leistung den benannten Pipes oder ähneln diesen, sind aber fast identisch mit den verwendeten TCP-Sockets. – ephemient