当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
最后一个值(mdev
在 Linux 和stddev
Solaris下标记)的计算方式略有不同,具体取决于这些操作系统。
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)