Kennt jemand Durchsatz-Benchmarks / -Messungen für die Verwendung eines lokalen Unix-Sockets für die Kommunikation zwischen Prozessen?
Ich möchte den Leistungsvorteil einer lokalen Datenbankinstanz auf demselben Server wie die Software veranschaulichen, die die Daten aus der Datenbank anfordert, anstatt über eine Netzwerkverbindung kommunizieren zu müssen, insbesondere eine wie Gigabit-Ethernet, von der ich erwarte, dass sie ziemlich langsam ist relativ gesehen.
Bei der Online-Suche habe ich einige Benchmarks gefunden, die die Anzahl der Vorgänge pro Sekunde, aber nicht den Durchsatz pro Sekunde (dh 12 GB / s) anzeigen.
Ich verstehe, dass die Leistung aufgrund von Dingen wie dem Speicherdurchsatz auf einem bestimmten System oder anderen Hardwareeigenschaften variieren wird, aber nur eine grobe Idee ist erforderlich.
Dies bezieht sich nicht auf die lokale TCP-Leistung oder einen Vergleich damit.
quelle
Antworten:
Sie können socat für einen einfachen UNIX-Socket-Geschwindigkeitstest verwenden.
Nachfolgend sind die Ergebnisse aufgeführt, die ich auf meinem Laptop erhalte:
Speicher auf Festplatte (SSD) über UNIX-Socket
Speicher zu Speicher über UNIX-Socket
Speicher nach / dev / null (verwerfen) über UNIX-Socket
/ dev / zero bis / dev / null über den UNIX-Socket
Wie Sie sehen können, beträgt der Testdurchsatz "Speicher auf Festplatte" sogar 545 MB / s (dh ~ 4360 MB / s), was weit über dem theoretischen Maximaldurchsatz für die 1-GB-Ethernet-Verbindung liegt (~ 1000/8 = 125 MB / s). nicht einmal unter Berücksichtigung von Protokoll-Overheads).
PS
Bitte beachten Sie, dass dies nur ein einfacher Test mit einigen einfachen Werkzeugen ist und kein echter, richtiger Benchmark.
quelle
Ich musste den Leuten helfen, die Auswirkungen von mehrstufigen Anwendungsstapeln zu verstehen.
Für den Aspekt der TCP-Kommunikation nutze ich Unterschiede in der RTT (Round-Trip-Time).
Für Single-Tier können Sie die lokale IP-Adresse (auf einer Netzwerkkarte) mit lo0 (Loopback) vergleichen.
Bei mehreren Ebenen vergleichen / berechnen Sie die "weiter entfernten" Adressen. Beispielsweise können mehrere Ebenen entweder zwei VMs auf demselben Host oder verschiedene Hosts im selben Rechenzentrum oder verschiedene Rechenzentren sein (vielleicht nur 500 Meter Entfernung, aber immer noch anders).
Zu Ihrer Information: Für viele Anwendungen sind RTT-Unterschiede vernachlässigbar, aber für Anwendungen, die 10-100 Tausend kleine Nachrichten für die RTT-Zeit der Anwendung ausführen, kann dies zu einem Engpass werden.
(Ich habe Situationen gesehen, in denen die "Charge im mehrstufigen Bereich fast 6 Stunden länger dauerte, wenn die RTT im Vergleich zur einstufigen um 0,25 Millisekunden länger war).
Also, einfacher Prüfstand:
Das
Und mein Überwachungsprogramm ist tcpdump - mit der Option -ttt
In zwei verschiedenen Fenstern läuft tcpdump:
Für die "lokalen" Zeiten: tcpdump -i lo0 -n -ttt Port 80 und für den "entfernten" tcpdump -I en1 -n -ttt Port 80
In den folgenden Daten ist das Ziel nicht, eine Analyse durchzuführen, sondern zu zeigen, wie Sie Zeitunterschiede identifizieren können, die für den Abschluss von Transaktionen erforderlich sind. Wenn es sich bei einem Anwendungsdurchsatz um serielle Transaktionen handelt, wird der Durchsatz pro "Sek | Min | Stunde" durch die für "Antworten" erforderliche Gesamtzeit beeinflusst. Ich fand es am einfachsten, dies mit dem Konzept der RTT zu erklären - Hin- und Rückfahrt.
Für eine echte Analyse gibt es zusätzliche Dinge zu beachten. Die einzigen Zeilen, die ich zeigen werde, sind der anfängliche TCP-Handshake und das erste ausgehende Paket und die zurückkehrende ACK. Vergleichen Sie zum Vergleich die Deltazeiten, wie lange es dauert, bis die "Antwort" zurückkommt.
127.0.0.1
192.168.129.63
Beachten Sie den 01.XXXXXX - für den Ruhezustand von einer Sekunde auf der Schnittstelle "lo0"
192.168.129.72
Virtuelle Maschine auf demselben Host - Beachten Sie, dass die Zeit um 00.000000 beginnt - das erste Paket wird angezeigt (und das 01.XXXXXX für die beiden anderen Adressen unten).
192.168.129.254
Mein Router - außerhalb des Hosts, keine virtuelle Maschine.
192.168.129.71
Dieselbe Verbindung wie 192.168.129.72, aber diese ist "besetzt", während "72" inaktiv ist. Ich würde hoffen, dass die ersten Handshakes fast identisch sind
mehrere Hopfen
Dies ist derselbe Host, das gleiche Apache-Ergebnis, aber jetzt über die externe Schnittstelle (6 IP-Hops statt direkt) - jetzt können Sie den Effekt von Fern-RTT nutzen. (ps, ich habe die IP-Adresse leicht geändert). Wichtiger: Beachten Sie, dass nach dem ersten Handshake vor dem ersten ACK nach der Rückkehr eines Handshakes zwei ausgehende Pakete vorliegen.
Denken Sie also statt einer 25-ms-RTT daran, dass die RTT 250 Mikrosekunden im Vergleich zu 25 Mikrosekunden beträgt - und Sie haben 500.000 Transaktionen (das sind im Vergleich zu lokalen Transaktionen nur 120 bis 125 Sekunden mehr, und der Durchsatz ist imho vergleichbar. Aber mit Bei 50 Millionen Transaktionen (wie ich es in einer realen Situation getan habe) erhalten Sie zusätzliche 12500 Sekunden - was ungefähr 3,5 zusätzliche Stunden für "buchstäblich" denselben Job hinzufügt (und ein Teil der Lösung für diesen Fall bestand darin, die Pakete größer zu machen - die durchschnittliche Größe war ursprünglich 400-450 Bytes).
Eine andere Sache, die ich an der Verwendung von tcpdump "mag", ist ein allgemein verfügbares Programm. Es muss nichts extra installiert werden.
quelle