私は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
4us RTT になるのに、非フラッドでは 8us になるのでしょうか? フラグをスキップすると、-q
非フラッドでは最大 34us になるため、さらに悪化します。個々の ping ごとに 1 行を印刷するのに、なぜこのような違いがあるのでしょうか?
私の推測では、ICMP パケットはキューに入れられ、カーネルがキューを処理する前に遅延が発生し、ICMP パケットがさらにある場合は、それらをすべて同時に処理できる可能性があります。
追加の質問としては、ping RTT がローカル ホストに関連している場合、ローカル ホストの HTTP 要求を実行するときに TCP/IP が使用されていない可能性があります。
記録のために: 私は Linux (#1 SMP Debian 3.2.68-1+deb7u2) を実行しています。
答え1
どのような CPU を使っているかはわかりませんが、私の場合、 では-i 0.01
45µs rtt であるのに対し、 では 8µs です-f
。この差は (私の SandyBridge CPU の場合) C6 省電力状態からのウェイクアップに必要な時間とほぼ一致しています。
出典:http://ena-hpc.org/2014/pdf/paper_06.pdf
はい、ターミナル エミュレータ (または ssh など) によっては、コンソールへの印刷にかなりのコストがかかる場合があります。