ping统计

Eri*_*ric 3 statistics ping

ping显示统计信息时,该字段mdev是所有 ping 时间的标准偏差。它是平均值的平均时间(以毫秒为单位)avg

但是因为 ping 时间非常正,我不明白怎么mdev可能高于 值的两倍avg,就像在这种情况下:

我有这个 ping 时间:

[...]
64 bytes from 192.168.1.1: icmp_seq=76 ttl=128 time=1.95 ms
^C
--- 192.168.1.1 ping statistics ---
76 packets transmitted, 76 received, 0% packet loss, time 75097ms
rtt min/avg/max/mdev = 1.617/13.289/468.557/66.726 ms
Run Code Online (Sandbox Code Playgroud)

哪里mdev是五次avg

编辑:原始数据:1.91,2.83,4.41,1.83,2.98,2.18,2.15,1.68,2.30,2.04,1.64,1.98,1.69,1.88,1.91,1.83,1.70,2.9,2.2.0.3,2.70,2.9,2.00 ,1.91,1.84,2.04,2.05,2.10,2.19,2.22,1.94,2.13,1.98,2.08,1.62,3.29,2.17,1.99,2.38,2.55,2.16,2.19,2.22,1.94,2.13,1.98,2.08,1.62,3.29,2.17,1.99,2.38,2.55,2.16,1.2.20.16,1.2,1.90,2.16,1.2.20.8. ,2.18,1.61,2.08,1.90,2.17,3.01,1.84,2.12,20.9,362,2.07,2.31,2.42,2.05,2.47,2.55,2.13,2.56,2,2.3.2.5,2.07,3.2.5,2.07,3.2.3.5. ,1.82,2.45,1.95

jll*_*gre 5

最后一个值(mdev在 Linux 和stddevSolaris下标记)的计算方式略有不同,具体取决于这些操作系统。

Linux ping使用的公式是:

sqrt(smean-mean²)
Run Code Online (Sandbox Code Playgroud)

Solaris ping使用的是:

sqrt((smean-mean²)*received/received-1)
Run Code Online (Sandbox Code Playgroud)

smean是均值的rtt平方,mean平均值的rtt价值观和received接收答案的数目。

这是一个awk使用您的数据并显示如何计算这些值的小程序。

echo "1.91 2.83 4.41 1.83 2.98 2.18 2.15 1.68 2.30 2.04 1.64 1.98 1.69 1.88
1.91 1.83 1.70 2.00 2.03 1.89 2.36 2.12 2.07 1.91 1.84 2.04 2.05 2.10 2.19
2.22 1.94 2.13 1.98 2.08 1.62 3.29 2.17 1.99 2.38 2.55 2.16 1.90 1.92 1.90
2.89 2.04 2.05 2.12 2.18 1.61 2.08 1.90 2.17 3.01 1.84 2.12 20.9 362 2.07
2.31 2.42 2.05 2.47 2.55 2.13 2.56 2.07 468 2.33 2.32 1.93 1.87 2.50 1.82
2.45 1.95" | awk '
function abs(v) {return v < 0 ? -v : v}
BEGIN {
  min=0x7fffffff;
}
{
  for(i=0;i<NF;i++) {
    received++
    v=$i
    min=v<min?v:min;
    max=v>max?v:max;
    sum+=v
    sum2+=v*v
  }
}
END {
  mean=sum/received
  smean=sum2/received
  printf("received=%d, min=%f, avg=%f, max=%f\n",received,min,sum/received,max)
  printf("Linux ping mdev: %f\n", sqrt(smean-(mean*mean)))
  printf("Solaris ping stddev: %f\n", sqrt(((smean-(mean*mean))*received)/(received-1)))
}
'
Run Code Online (Sandbox Code Playgroud)

其输出与您的测试一致:

received=76, min=1.610000, avg=13.294211, max=468.000000
Linux ping mdev: 66.632781
Solaris ping stddev: 67.075529
Run Code Online (Sandbox Code Playgroud)