如何计算延迟时间。

6

我已经创建了一些Java代码来测量延迟、数据包大小和带宽。

计算延迟所需的方程式是什么?

这是我目前使用的内容,但不确定是否正确:

//latency = packetsize / delay + bandwidth 
System.out.println("latency is " + (len*2) / (duration + transferRateMb));

编辑:长度乘以2得到字节的正确值。

持续时间是ping完成所需的时间。

传输速率通过以下方式计算:

double transferRateMb = ((len*524288.0) / (duration/ 1000000000.0) ) ; //amount of data in megabytes transferred in 1 second. 

我已经阅读了各种指南,但是并没有理解它们,这仅仅是一个项目的简单需求。
此外,这将会运行20次,然后取平均值。
有什么想法吗?

1
我希望 (duration + transferRateMb) 能够给你双倍的值,并且已经询问了 ---> 延迟和带宽,并且已经询问了 ---> 如何从延迟和带宽计算数据包时间 - Smit
延迟最受网络拥塞的影响,这种拥塞会随时间变化而大不相同,而且单向延迟可能与返回延迟不匹配。没有真正的方法可以得到一个公式来告诉你延迟是多少。这就是为什么我们有像IP SLA这样的工具来持续测量实际延迟的原因。 - Ron Maupin
1个回答

0

我总是测量延迟。平均延迟通常不是很有趣,你真正需要知道的是延迟有多糟糕,比如每100个、每1000个或更极端的情况。要做到这一点,你需要测量每个单独的延迟并对其进行采样(或保留最大值)。这将比你的计算高得多,例如可能轻松达到10倍。

简而言之,你不能计算出你应该关注的延迟时间,你必须进行测量。


谢谢,我计划运行测试20次并取平均值,如何测量延迟? - user2065929
建议多次运行测试,并忽略前20,000或前2秒(以允许测试预热)。在消息中使用时间戳,并将其与到达时的时间戳进行比较,记录每条消息所需的时间。如果您测量另外10,000个数据,则可以获得合理的99%分位数;如果您测量1,000,000个数据,则可以获得合理的99.9%分位数。要获取百分位数,请对结果进行排序,例如在int []中,并取50%的中间值,size * 9/10作为90%分位数,size * 99/100值作为99%分位数,size * 999/1000作为99.9%分位数。 - Peter Lawrey
好的,谢谢。我的公式用于计算是否可以使用? - user2065929
你可以计算最佳情况下的延迟时间,但这并没有太大用处。只有通过测试才能得出最坏情况下的延迟时间。 - Peter Lawrey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接