Localhost-TCP-Durchsatzleistungsunterschiede

5437
Lieven Keersmaekers

Ich habe psping zum Messen der Bandbreitenstatistik auf localhost auf verschiedenen Computern verwendet: Laptops, Heimcomputer und Server . Alle erreichen zwischen 100 und 200 MB / s, aber mein PowerPc bei der Arbeit erreicht 800 MB / s .

Was kann dazu führen, dass diese gewaltigen Unterschiede über localhost mit sich selbst kommunizieren? Das PowerPc übertrifft alle anderen Geräte, die ich mit einem Faktor von 4 bis 8 getestet habe .

PowerPc-Konfiguration

  • Windows 7
  • Intel (R) Xeon (R) CPU E3-1240 v3 bei 3.40 GHz [Familie 6, Modell 60, Schritt 3]
  • 3,78 GFLOPS / Kern
  • Symantec SEP

Eine Heimcomputerkonfiguration

  • Windows 8.1
  • Intel® Core (TM) i7 CPU 920 bei 2,67 GHz [Intel64-Familie 6, Modell 26, Schritt 5] 4
  • 2,64 GFLOPS / Kern
  • BitDefender

psping Befehl

psping -4 -b -l 8k -n 20000 localhost:1234 

Ein paar Fragen, die ich erwarte und an die ich mich gerne wenden möchte

Ich könnte weit weg sein, aber dies zeigt Ihnen mein aktuelles Verständnis der Dinge. Fühlen Sie sich frei, mich klar zu stellen.

  1. Antivirus verwandt
    Ich habe die Antivirenkomponente meines Heimcomputers ohne merklichen Unterschied eingestellt. Außerdem habe ich eine WPA-Spur (XperfScripts) erfasst, und die Module, die die meisten CPU-bezogenen Aktivitäten aufweisen, sind ntoskrnl.exe, netio.sys, tcpip.sys, ndis.sys und afd.sys. Das erste AV-Modul, das in das CPU-bezogene Bild eintritt, ist avcuf32.dll, was 0,17% der gesamten CPU ausmacht.

  2. Localhost vs. 127.0.0.1
    Ich habe beides ausprobiert und auf allen getesteten Computern die gleichen Ergebnisse erhalten.

  3. Aktuelle Treiber
    Die Treiber auf meinem Heimcomputer sind auf dem neuesten Stand. Die Treiber des PowerPc werden von unseren IT-Mitarbeitern verwaltet und liegen etwas zurück, aber nicht sehr viel (und der PowerPc ist bei den Tests ohnehin 4x schneller).

  4. netsh int tcp show global
    Es gibt einige Unterschiede zwischen den beiden PCs. Der Schornstein- Entladezustand und der NetDMA-Status auf meinem Heimcomputer sind deaktiviert, während sie auf dem PowerPc automatisch und aktiviert sind.
    Mein Netzwerk ist nicht gut genug, um zu wissen, ob dies die Unterschiede erklären könnte, aber wenn ich mich zu diesem Thema aussehe, bezweifle ich, dass es so ist.


Bearbeiten

RAM-Details PowerPC

 capacity speed memorytype totalwidth datawidth typedetail -------- ----- ---------- ---------- --------- ---------- 4294967296 1600 0 64 64 128 4294967296 1600 0 64 64 128 4294967296 1600 0 64 64 128 4294967296 1600 0 64 64 128 

RAM-Details Heimcomputer

 capacity speed memorytype totalwidth datawidth typedetail -------- ----- ---------- ---------- --------- ---------- 2147483648 1333 1 72 64 2 4294967296 1333 1 72 64 2 2147483648 1333 1 72 64 2 4294967296 1333 1 72 64 2 2147483648 1333 1 72 64 2 4294967296 1333 1 72 64 2 4194304 33 11 8 8 4096 
6
Stellen Sie zunächst sicher, dass Ihre B-Werte alle den gleichen Fall haben (MB / Mb), da 800 MB = 100 MB. Frank Thomas vor 9 Jahren 1
Entschuldigung, Fat Fingered eingeben und musste bearbeiten, um den Kommentar abzuschließen. Normalerweise beschleunigt LAN-Dateioperationen wirklich durch RAID und die Art und Weise, wie Festplatten bei der E / A zusammenarbeiten (oder dies nicht tun). Zum Beispiel erhalten Sie nie mehr als 35 MB / s, wenn die Quelle oder das Ziel eines Datenbestandes über USB2 verbunden ist. Das ist an und für sich der Grund, dass mein Arbeits-PC mehr Netzwerkkapazität hat als mein Zuhause, da alle Server RAID5 sind, obwohl mein Heimnetzwerk schneller ist. Frank Thomas vor 9 Jahren 1
@FrankThomas - ich verstehe . Alle B sind der gleiche Fall. Ich denke, Sie haben meine Frage falsch interpretiert. Es ist keine Festplatte oder USB beteiligt. psping ist lediglich ein Netzwerktest-Tool. In diesem Fall teste ich, wie schnell der Computer über localhost * mit sich selbst kommunizieren kann (am Ende haben wir ein IPc-Problem mit einem TCP-Problem, das wir mit einer Anwendung haben) * Lieven Keersmaekers vor 9 Jahren 1
Geben Sie NIC-Details und RAM-Details ein. Ali786 vor 9 Jahren 0
@ ali786 - Der gesamte Datenverkehr ist vom / zum localhost. Die physische Netzwerkkarte spielt keine Rolle * (tcpip.sys ist der niedrigste im Stapel, in dem der Verkehr stattfindet) *. Ich habe der Frage RAM-Details hinzugefügt. Ich füge sie von meinem Heimcomputer hinzu, wenn ich zu Hause bin. Lieven Keersmaekers vor 9 Jahren 1
Wie viel RAM insgesamt pro Computer? Der Hauptunterschied in der Geschwindigkeit soll die Speichergeschwindigkeit sein, da Frames zwischen TCP-Schichten kopiert werden. Windows 8 soll aufgrund von [Fast TCP Loopback] viel schneller sein (http://blogs.technet.com/b/wincat/archive/2012/12/05/fast-tcp-loopback-performance-and-low- latenz-with-windows-server-2012-tcp-loopback-fast-path.aspx), es sei denn, PsPing verwendet es nicht. Sie sollten mit Blöcken von 8960 Bytes pingen, um [Jumbo-Frames] (http://en.wikipedia.org/wiki/Jumbo_frame) zu verwenden, um eine sehr kleine Verbesserung zu erzielen. harrymc vor 9 Jahren 1
Außerdem: Alle Bedingungen sollten gleich sein: `netsh int tcp set global chimney = automatic` und` netsh int tcp set global netdma = enabled `. NetDMA kann Auswirkungen haben, da Netzwerkadapter die Daten direkt an Ihre Anwendung übertragen können, ohne dass Sie dafür eine CPU benötigen, wodurch möglicherweise Speicherkopien reduziert werden. harrymc vor 9 Jahren 1
@ harrymc - Die Einstellung des Schornsteins auf automatisch wurde etwas verbessert, aber nicht viel. Wenn netdma aktiviert ist, scheint es nicht "kleben". Ich bekomme ein ok von netsh, wenn ich den Befehl ausschalte, aber wenn ich die globalen Einstellungen zeige, ist er immer noch deaktiviert. Lieven Keersmaekers vor 9 Jahren 0
Versuchen Sie Folgendes, um NetDMA: regedit auf "HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Tcpip \ Parameters" zu aktivieren, und erstellen Sie ein neues DWORD-Element mit dem Namen "EnableTCPA" mit dem Wert 1. Möglicherweise ist ein Neustart erforderlich. Wie viel RAM in GB pro Computer? harrymc vor 9 Jahren 0
Jetzt einstellen und den Neustart vorbereiten. Beim Neustart -> Ich vergleiche gerade zwei WPA-Spuren und alles scheint auf ein CPU-Problem * hinzuweisen (was ich eigentlich von Anfang an abgelehnt habe und immer noch schwer zu glauben ist) *. Beide Traces machen 400K Kontextwechsel aus, beide Traces haben für die Dauer des Tests 20% CPU verwendet, aber eine benötigt nur 3,6 Sekunden und die andere benötigt 14,1 Sekunden. Lieven Keersmaekers vor 9 Jahren 0
* (16 GB und 18 GB RAM. Ich habe es der Frage hinzugefügt.) * Das Aktivieren von EnableTCPA und der Neustart haben nicht geholfen. Die Einstellung ist noch deaktiviert. Können Sie vielleicht denselben Bandbreitentest durchführen und Ihre Ergebnisse teilen? Ich habe verschiedene Systeme ausprobiert und alle bekommen zwischen 100 und 200MB / s, nur der PowerPc erreicht 800MB / s. Lieven Keersmaekers vor 9 Jahren 0
@LievenKeersmaekers, Tcpip.sys ist ein Windows-Treiber und hat direkten Zugriff auf die internen Komponenten des Betriebssystems, der Hardware usw. Wir verwenden 127.0.0.1, um zu testen, ob die NIC funktioniert oder nicht. Ihre NIC-Konfiguration kann unterschiedlich sein. Ali786 vor 9 Jahren 0
@ ali786 - Es ist durchaus möglich, Localhost ohne NIC auf einem Computer zu pingen, es ist alles Software. Ich verstehe nicht, welche Daten ich liefern möchte? Haben Sie einen Befehl wie ipconfig? Lieven Keersmaekers vor 9 Jahren 0
Unter Windows 7 x64 liegen meine Geschwindigkeiten zwischen 200 und 300 MB. Dies ist besser als bei Ihnen, aber ich habe einen leistungsstarken PC verwendet. Vielleicht waren Speicherkopien schneller und der Speicher ist in der Tat der Hauptfaktor für die Leistung. Ich schaffe es auch nicht, NetDMA einzustellen, und der Grund dafür liegt in der fehlenden IPMONTR.DLL. Im Moment bevorzuge ich NetDMA als Grund für die Leistungsunterschiede. Fragen: (1) Haben Sie IPMONTR.DLL auf dem PowerPC, und wenn ja, würde ich gerne eine Kopie für weitere Tests haben (es ist in `C: \ Windows \ System32`), (2) Der PowerPC hat Windows 7 x 64? harrymc vor 9 Jahren 0
@ harrymc - Ja, Windows 7 x64. Danke für den Versuch. Witzigerweise habe ich auf meinem System nicht die Datei 'ipmontr.dll'. Ich habe gerade ein `dir c: \ ipmontr.dll / s` gemacht, nachdem ich es unter system32 nicht gesehen habe, aber die Suche erscheint leer. Ich habe wieder eine "netsh int tcp show global" durchgeführt, um sicherzustellen, dass NetDMA aktiviert ist. Es ist. Wo haben Sie den Verweis auf ipmontr.dll gefunden? Lieven Keersmaekers vor 9 Jahren 0
Ich habe `netsh int tcp set global netdma` gemacht und eine Fehlermeldung über diese DLL erhalten. Das Lustige daran ist, dass NetDMA jetzt als "show global" angezeigt wird und die Wiederholung des Tests jetzt die Geschwindigkeit von 500 MB ergibt. Ich denke, dass dies abschließend auf NetDMA als Grund für den Unterschied verweist; und auch, dass Microsoft schwerwiegende Fehler bei der Implementierung seiner Benutzeroberfläche hat. harrymc vor 9 Jahren 1
Durch Aktivieren von NetDMA wird die Geschwindigkeit um den Faktor zwei erhöht. Zeit, sich über NetDMA zu informieren, denke ich. Wenn Sie etwas anderes finden, teilen Sie es uns bitte mit. Wenn Sie Ihre Ergebnisse als Antwort posten, werde ich später zustimmen. Danke, Harry, frohes neues Jahr. Lieven Keersmaekers vor 9 Jahren 0
Die Seltsamkeit geht weiter: Nach dem Neustart wird NetDMA immer noch als aktiviert angezeigt, der Durchsatz liegt jedoch jetzt bei 200 MB. Möglicherweise hat Microsoft einige schwerwiegende Fehler in der NetDMA-Implementierung, aber Konjunktionen sind nutzlos. Seien Sie glücklich, dass es auf dem PowerPC funktioniert. Wenn sich hier niemand von Microsoft freiwillig eine bessere Erklärung leistet, werde ich dies in ein paar Tagen als Antwort posten. harrymc vor 9 Jahren 0
Ich habe Mark Russinovich darüber informiert und er hat ein paar Hinweise gegeben, aber er hat keine Zeit, sich damit zu beschäftigen. Von den WPA-Spuren, die ich genommen habe, neige ich dazu, zu sagen, dass es ein Planungsproblem ist. PsPing verbringt 225 ms in Wait auf der langsamen Maschine und 50 ms in Wartezeit auf der Maschine, während die CPU in Betrieb ist, und keine der beiden Maschinen leistet viel (wenn überhaupt). Die langsame Maschine startete 11 Threads und die schnelle startete 33. Laut Mark startet PsPing Threads in Abhängigkeit von der CPU, aber die langsame hat nur 12 CPU und die schnelle nur 8. Es ist rätselhaft, um es gelinde auszudrücken. Lieven Keersmaekers vor 9 Jahren 0
Was waren die Hinweise? harrymc vor 9 Jahren 0
Um eine WPA-Spur * aufzunehmen (die ich eigentlich schon gemacht habe, aber in der Mail nicht erwähnt habe) * und die Thread- / CPU-Tatsache * (was immerhin ein Rätsel war) * Lieven Keersmaekers vor 9 Jahren 0
Da PsPing eine zufällige Anzahl von Threads startet, ist es für den Vergleich ungeeignet. Mit dem Tool [PCATTCP] (http://www.pcausa.com/Utilities/pcattcp.htm), das ich bei Google gefunden habe, erhielt ich bei jedem Lauf verschiedene Ergebnisse: 268,431,297,380 MB. Fazit: Microsoft Loopback-Implementierung ist so lausig, dass sie in Windows 8/2012 [umgeschrieben] haben (http://blogs.technet.com/b/wincat/archive/2012/12/05/fast-tcp-loopback-performance- and-low-latenz-with-windows-server-2012-tcp-loopback-fast-path.aspx). Den Zahlen ist nicht zu trauen. Ich muss noch herausfinden, wie man Netsh aufhört, sich über fehlende IPMONTR.DLL zu beschweren. harrymc vor 9 Jahren 1
Hinweis: Für alle anderen, die die netsh-Nachricht "helfer-DLL können nicht geladen werden: IPMONTR.DLL" gegoogelt haben, geschah dies bei dieser Diskussion: Die Lösung besteht darin, den Befehl `netsh delete helper IPMONTR.DLL` auszuführen. harrymc vor 9 Jahren 0
@harrymc - PsPing liefert konsistente Ergebnisse pro Maschine, aber Sie haben vielleicht Recht, dass es für Vergleiche ungeeignet ist, schwer zu sagen. Ich fand auch diesen schnellen Loopback-Artikel, aber er erfordert auch Änderungen an der Software des Clients. Das steht leider nicht unter unserer Kontrolle. Ich werde auf jeden Fall den Löschbefehl ausprobieren und die Ergebnisse zurücksenden, sobald ich nach Hause komme (in etwa 10 Stunden). Lieven Keersmaekers vor 9 Jahren 0
Es wäre interessant, PCATTCP auf beiden Computern erneut auszuführen, mehrere Durchläufe durchzuführen und ihren Durchschnitt zu ermitteln. Es ist ein großes Rätsel, wie NetDMA aktiviert wurde und wirklich am PowerPC arbeitet. harrymc vor 9 Jahren 0
Mit "pcattcp -t localhost" Auf dem PowerPc erhielt ich folgende Ergebnisse (KB / s): * (Durchschnitt 556738) * 862315,780190,606814,512000,481882,364088,496484,496484,564965,682666,512000,655360 442810,546133,512000,481882,606814,431157,630153,455111,780190. Ich versuche es von zu Hause aus. Lieven Keersmaekers vor 9 Jahren 0
Bei 200000 Anrufen wird es mit etwa 680 MB / s "pcattcp -t -n200000 localhost" ausgeglichen. Lieven Keersmaekers vor 9 Jahren 0
Der Heimcomputer erreicht mit 200.000 Anrufen 200 MB / s. IPMONTR.DLL ist auf dem System nicht als Helfer definiert. Lieven Keersmaekers vor 9 Jahren 0
Ich glaube, ich habe es gefunden. Der Microsoft-Artikel [NetDMA aktivieren] (http://technet.microsoft.com/fr-fr/library/gg162687%28v=ws.10%29.aspx) hat folgendes: "NetDMA muss im BIOS aktiviert sein, bevor Sie dies ausführen können Die NetDMA-Unterstützung wird häufig als IOAT-Unterstützung bezeichnet. " Dies erklärt möglicherweise diese Unterschiede, wenn das BIOS auf dem PowerPC dies unterstützt, jedoch nicht auf dem Windows 8.1-Computer (oder die Unterstützung im BIOS oder UEFI deaktiviert ist). Dies erklärt möglicherweise, warum Windows es auf dem PowerPC auf Ein setzt und warum es auf dem anderen Computer immer ausgeschaltet ist, unabhängig davon, was Sie tun, um es zu aktivieren. harrymc vor 9 Jahren 1
Sehen Sie eine solche Option im BIOS (oder UEFI?) Ihres Heimcomputers? harrymc vor 9 Jahren 0
Weitere Informationen: Im Microsoft-Artikel [NetDMA (Windows-Treiber)] (http://msdn.microsoft.com/de-de/library/windows/hardware/ff568342%28v=vs.85%29.aspx) heißt es: "The NetDMA Schnittstelle wird in Windows 8 und höher nicht unterstützt ". Aus diesem Grund musste Microsoft den Fast TCP Loopback hinzufügen, er ist jedoch leider nicht mit vorhandenen Anwendungen abwärtskompatibel. Ich werde morgen eine Antwort verfassen. harrymc vor 9 Jahren 0
@Harrymc - Keine Option in meinem BIOS für die IOAT-Unterstützung. Ich habe mit HPET herumgespielt, um zu sehen, ob das einen Unterschied macht, aber es wurde nur langsamer. Danke für deine Zeit und antworte Harry. Lieven Keersmaekers vor 9 Jahren 0

1 Antwort auf die Frage

5
harrymc

Ich glaube, dass der PowerPC unter Windows 7 auf dem Localhost-Loopback-Durchsatz viel schneller ist, weil NetDMA verwendet werden kann.

Der Microsoft-Artikel NetDMA (Windows-Treiber) definiert NetDMA als:

Die NetDMA-Schnittstelle bietet eine generische Schnittstelle für DMA-Übertragungen von Speicher zu Speicher. Obwohl die Schnittstelle zum Kopieren von Paketen entwickelt wurde, die von Hochleistungs-Netzwerkkarten (NICs) empfangen werden, können Sie die Schnittstelle auch für andere Anwendungen verwenden. Es gibt keine direkte Beziehung zwischen NetDMA und NDIS.

Bei Verwendung von Localhost Loopback ist es offensichtlich, dass Speicherkopiervorgänge der Hauptfaktor des Durchsatzes sind, da Frames aus dem Quellanwendungsspeicher, dann zwischen TCP-Schichten und schließlich in den Speicher der Zielanwendung kopiert werden.

NetDMA kann Auswirkungen haben, da Netzwerkadapter die Möglichkeit haben, Daten direkt an Ihre Anwendung zu übertragen, wodurch möglicherweise auch die Anzahl der Speicherkopien reduziert wird, selbst für den einfachen Loopback-Adapter.

Die Aktivierung von NetDMA kann auf zwei Arten erfolgen:

  1. Geben Sie netsh int tcp set global netdma=enabledin die Eingabeaufforderung (cmd) ein, die als Administrator ausgeführt wird, und starten Sie dann den Computer neu.
  2. Regedit, HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parametersund erstellen Sie ein neues DWORD - Element mit dem Namen EnableTCPAmit dem Wert 1, dann neu starten.

Es gibt jedoch zwei Voraussetzungen, um NetDMA zu aktivieren:

  1. Der Microsoft-Artikel zum Aktivieren von NetDMA enthält Folgendes :

NetDMA muss im BIOS aktiviert sein, bevor Sie dieses Verfahren ausführen. Die NetDMA-Unterstützung wird häufig als IOAT-Unterstützung bezeichnet.

  1. Der Microsoft-Artikel NetDMA (Windows-Treiber) enthält diesen Hinweis:

Die NetDMA-Schnittstelle wird ab Windows 8 nicht unterstützt.

Wenn ich diese beiden Anforderungen zusammenfasse, kann ich davon ausgehen, dass NetDMA eine BIOS-Funktion ist und deshalb nicht in UEFI implementiert wurde, das in Windows 8/2012 verwendet wird.

Microsoft musste daher den Localhost-Loopback-Durchsatz auf andere Weise verbessern, insbesondere für die Verwendung in Hyper-V, und hatte daher in Windows 8/2012 den Fast TCP-Loopback erstellt, der wie folgt definiert ist:

TCP Loopback Fast Path ist eine neue Funktion, die in Windows Server 2012 und Windows 8 eingeführt wurde. Wenn Sie die TCP-Loopback-Schnittstelle für die Interprozesskommunikation (IPC) verwenden, sind Sie möglicherweise an der verbesserten Leistung, der verbesserten Vorhersagbarkeit und der geringeren Latenz des TCP interessiert Loopback Fast Path kann bieten. Diese Funktion behält die TCP-Socket-Semantik und -Plattformfunktionen, einschließlich der Windows Filtering Platform (WFP), bei und funktioniert sowohl für nicht virtualisierte als auch für virtualisierte Betriebssysteminstanzen.

Die TCP-Loopback-Schnittstelle stellt einen einfachen lokalen IPC-Mechanismus für Prozesse auf derselben Betriebssysteminstanz bereit und kann durch einfaches Ändern der Ziel-IP-Adresse leicht auf einen Remote-IPC-Mechanismus umgestellt werden.

Leider ist Fast TCP Loopback nicht transparent, sodass Anwendungen einen WSAIoctl-Systemaufruf für die Sockets sowohl für den Sender als auch für den Empfänger ausgeben müssen . Daher sind sie nicht abwärtskompatibel mit vorhandenen Anwendungen zur Bandbreitenmessung, wie PsPing und PCATTCP .

In meinen eigenen Tests unter Windows 7 habe ich nicht alle Rätsel um NetDMA herausgefunden, aber ich habe es geschafft, es kurz einzuschalten, mit dem unmittelbaren Vorteil einer Verdopplung meiner Bandbreite, gemessen am PsPing. Da NetDMA einen Neustart auf diesem Computer jedoch nicht überstanden hat, empfehle ich den Durchsatz nicht für den Durchsatz, auch nicht für Computer, die dies theoretisch unterstützen.

Ich habe WPA-Spuren sowohl eines schnellen als auch eines langsamen Systems. Haben Sie zufällig Erfahrung mit der Interpretation solcher Spuren? Jedes Mal, wenn ich anfange, sie zu schneiden und zu würfeln, schließe ich andere Dinge ab, je nachdem, was ich angefangen habe zu gruppieren. Lieven Keersmaekers vor 9 Jahren 0
* (Ich liebe die Art und Weise, wie Sie dies übrigens zusammengefügt haben) * Lieven Keersmaekers vor 9 Jahren 0
Leider habe ich keine Erfahrung mit WPA-Spuren, aber ich kann sehen, dass es im Web viel Material gibt. Sie könnten vielleicht versuchen, die interessanten EventSources und nicht alles herauszufinden. harrymc vor 9 Jahren 0