나는 ping
타당성 조사의 일환으로 HTTP 요청 시간의 하한을 추정하곤 했습니다.
테스트 속도를 높이기 위해 핑 간격을 낮추었고(합리적인 평균을 얻기에 충분한 핑을 얻기 위해) 간격이 짧아지면 로컬 호스트에 대한 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에 도달하므로 상황은 더욱 악화됩니다. 각 개별 핑에 대해 한 줄을 인쇄할 때 왜 이러한 차이가 발생합니까?
내 생각에는 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 등)에 따라 상당히 비쌀 수 있습니다.