Don't misuse ping!

Folks, there is a tool that is highly misused, a tool that was meant for a completly different task, but now used by people to measure or compare something: ping. Don’t use it as a latency measuring tool. Ping doesn’t deserve this. Ping is a tool to find out, if a host is reachable by IP (that said, i saw more than one situation where a system was reachable by ping, but absolutely dead otherwise). However: The measured numbers with three digits precision after a comma suggests, that there really measure network latency precicely. It is perhaps that precise. However the truth is: It don’t measure network latency, it measures an amalgam of many things. And the network is just a part of it. When you are pinging you are measuring the time from sending the ICMP echo request to the time the ping tool is receiving the ICMP reply. So far so good, however it includes that the ping tool has maybe giving up the cpu because it was just waiting, so it has to be put on some CPU again. And then when you compare implementations it may be the case, that an implementation of ICMP was considered as good enough and it wasn’t optimized anymore because i don’t think there is a single person on the planet doing icmp echo request/reply as a mission critical, performance critical part. There are better tools to measure the latency. For example on Solaris by using superping.d which leverages dtrace and ping to get a more precise image of the real network latency by closely monitoring the network stack via DTrace. On the other side, ICMP is answered by a kernel driver, so when you really want to measure network latency from app to app use a tool like iperf, that is started as a process in userland (… and run it with similar scheduling priorities as your real application). BTW: Before you ask … even with a 1 GB interface you can measure for example with superping the difference between the latency based on the ping tool and the latency measured by superping.d . And now take the reduced physical latencies in 10 GbE or even Infiniband networks into consideration and what it means for the precision of your measurement. So, please: Use ping as a tool to make a first guess if the system on the other side is running. However: Don’t use it as a tool to measure network latencies in your local network (or even to assess the quality of a networking implementation). I dare you, i double dare you ;)