ping 统计

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

哪里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.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

答案1

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

使用的公式为Linux ping是:

sqrt(smean-mean²)

而使用的Solaris 平是:

sqrt((smean-mean²)*received/received-1)

smean平方均值rtt、值mean的均值rttreceived收到的答案数。

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)))
}
'

它的输出与您的测试一致:

received=76, min=1.610000, avg=13.294211, max=468.000000
Linux ping mdev: 66.632781
Solaris ping stddev: 67.075529

相关内容