Ich habe nichts Ungewöhnliches an meiner Hardware- oder Kernelkonfiguration gemacht (alle Standardeinstellungen, Neuinstallation des Betriebssystems, Linux-Kernel 3.11 TCP / IP-Stack) und durchschnittlich 3,83 Millionen Nachrichten pro Sekunde über TCP, während ich nur einen Durchschnitt von 0,75 habe Millionen Nachrichten pro Sekunde über UDP. Dies scheint völlig zu trotzen, was ich von den beiden Protokollen erwarte.
Was ist die wahrscheinlichste Ursache für den drastischen Unterschied und wie kann ich ihn unter Ubuntu 13.10 diagnostizieren?
#TCP RESULTS
Recv Send Send Utilization Service Demand
Socket Socket Message Elapsed Send Recv Send Recv
Size Size Size Time Throughput local remote local remote
bytes bytes bytes secs. 10^6bits/s % S % S us/KB us/KB
87380 65536 64 10.00 1963.43 32.96 17.09 5.500 2.852
#UDP RESULTS
Socket Message Elapsed Messages CPU Service
Size Size Time Okay Errors Throughput Util Demand
bytes bytes secs # # 10^6bits/sec % SS us/KB
4194304 64 10.00 7491010 0 383.5 28.97 24.751
212992 10.00 1404941 71.9 25.03 21.381
Für diesen Test habe ich zwei Testserver, die identisch und direkt über ein 10G-Crossover-Kabel verbunden sind. Die in diesem Fall verwendeten NICs sind Intel X520 mit werkseitigen Konfigurationen und werden an einen PCIe 3.0 x8-Steckplatz auf der Hauptplatine angeschlossen, der über einen NUMA-Controller mit der CPU kommuniziert.
netperf
für die Benchmarks UDP_STREAM- und TCP_STREAM-Tests verwendet, die auf dieselbe CPU und 64-Byte-Nachrichtengrößen festgelegt sind.