Ich habe ping
im Rahmen einer Machbarkeitsstudie eine Schätzung der Untergrenze für HTTP-Anforderungszeiten vorgenommen.
Um den Test zu beschleunigen, habe ich das Ping-Intervall verkürzt (um genügend Pings für einen vernünftigen Durchschnitt zu erhalten) und festgestellt, dass die RTT gegenüber dem lokalen Host sinkt, wenn das Intervall kürzer wird. Beispiel:
>sudo ping -i 0.01 -c500 -q localhost
PING localhost (127.0.0.1) 56(84) bytes of data.
--- localhost ping statistics ---
500 packets transmitted, 500 received, 0% packet loss, time 5986ms
rtt min/avg/max/mdev = 0.006/0.007/0.055/0.004 ms
>sudo ping -i 0.00 -c500 -q localhost
PING localhost (127.0.0.1) 56(84) bytes of data.
--- localhost ping statistics ---
500 packets transmitted, 500 received, 0% packet loss, time 8ms
rtt min/avg/max/mdev = 0.003/0.004/0.016/0.000 ms, ipg/ewma 0.018/0.004 ms
(die Verwendung der tatsächlichen -f
Option ergab ähnliche Ergebnisse wie -i 0.00
).
Warum ergibt Flood ping
4 us RTT, während Non-Flood 8 us ergibt? Wenn ich das -q
Flag überspringe, wird es noch schlimmer, da Non-Flood bis zu 34 us erreicht. Warum dieser Unterschied beim Drucken einer Zeile für jeden einzelnen Ping?
Ich vermute, dass die ICMP-Pakete in eine Warteschlange gestellt werden und es eine Latenz gibt, bevor der Kernel die Warteschlange verarbeitet. Wenn mehr ICMP-Pakete vorhanden sind, kann es sein, dass er sie alle auf einmal verarbeiten kann.
Eine weitere Frage könnte sein, ob Ping-RTTs für den lokalen Host relevant sind. Möglicherweise wird bei einer HTTP-Anforderung an den lokalen Host kein TCP/IP verwendet.
Zur Info: Ich verwende Linux (#1 SMP Debian 3.2.68-1+deb7u2).
Antwort1
Ich habe keine Ahnung, welche Art von CPU Sie verwenden, bei mir -i 0.01
ergibt sich eine RTT von 45µs gegenüber 8µs bei -f
. Dieser Unterschied entspricht (bei meiner SandyBridge-CPU) ungefähr der Zeit, die zum Aufwachen aus dem C6-Energiesparmodus benötigt wird:
http://ena-hpc.org/2014/pdf/paper_06.pdf
Und ja, das Drucken auf der Konsole kann je nach Terminalemulator (oder SSH usw.) ziemlich aufwändig sein.