作為可行性研究的一部分,我曾經ping
對 HTTP 請求時間的下限進行了估計。
為了使測試更快,我降低了 ping 的間隔(以獲得足夠的 ping 以獲得合理的平均值),並注意到如果間隔變短,針對本地主機的 RTT 就會下降。例如:
>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
(使用實際-f
選項產生與 類似的結果-i 0.00
)。
為什麼洪水ping
時 RTT 為 4us,非洪水時 RTT 為 8us?如果我跳過該-q
標誌,情況會變得更糟,因為非洪水將長達 34us。為什麼為每個單獨的 ping 列印一行會有這種差異?
我的猜測是,ICMP 封包被放入隊列中,並且在核心處理隊列之前存在延遲,如果有更多 ICMP 封包,它可能可以同時處理它們。
後續問題可能是 ping RTT 是否與本機相關,可能是執行本機 HTTP 請求時未使用 TCP/IP。
鄭重聲明:我正在運行 Linux (#1 SMP Debian 3.2.68-1+deb7u2)。
答案1
我不知道你使用的是什麼類型的 CPU,對我來說-i 0.01
產生 45μs rtt,而-f
.這個差異(對於我的 SandyBridge CPU)與從 C6 省電狀態喚醒所需的時間大致一致:
http://ena-hpc.org/2014/pdf/paper_06.pdf
是的,列印到控制台可能會非常昂貴,具體取決於您的終端模擬器(或 ssh 等)。