【问题标题】:Time unit problem with LatencyUtils 'recordLatency' methodLatencyUtils 'recordLatency' 方法的时间单位问题
【发布时间】:2019-11-21 00:19:33
【问题描述】:

我正在使用 LatencyUtils 包来跟踪和报告跨测量的延迟行为:

用这种方法记录时间,时间单位应该是纳秒,但在我的例子中,记录的时间是以毫秒为单位的。 我想知道是否有更好的方法以毫秒为单位记录时间?

我现在使用的解决方案是将所有记录的时间乘以一百万。但我还是希望结果以微秒为单位,所以对于我得到的结果,我除以一百万。

public void addValue(Long val, long sampleCount) {
    sum += val * sampleCount;
    for (int i = 0; i < sampleCount; i++) {
        latencyStats.recordLatency(val*1000000);
    }
    histogram.add(latencyStats.getIntervalHistogram());
    max = Math.max(val, max);
    min = Math.min(val, min);
    updateValueCount(val,sampleCount);
}

@Override
public double getStandardDeviation() {
    return histogram.getStdDeviation()/1000000;
}

LatencyUtil的默认构造函数是这样的:

private long lowestTrackableLatency = 1000L; /* 1 usec */
private long highestTrackableLatency = 3600000000000L; /* 1 hr */
private int numberOfSignificantValueDigits = 2;
private int intervalEstimatorWindowLength = 1024;
private long intervalEstimatorTimeCap = 10000000000L; /* 10 sec */
private PauseDetector pauseDetector = null;
public LatencyStats() {
    this(
            defaultBuilder.lowestTrackableLatency,
            defaultBuilder.highestTrackableLatency,
            defaultBuilder.numberOfSignificantValueDigits,
            defaultBuilder.intervalEstimatorWindowLength,
            defaultBuilder.intervalEstimatorTimeCap,
            defaultBuilder.pauseDetector
    );
}

所以,事实上,LatencyUtil 的最低可跟踪延迟也是纳秒级。如果我以毫秒为单位放一个值,恐怕会影响记录的结果。

【问题讨论】:

  • 这里的实际单位不重要吗?我认为您可以跳过乘法和除法结果,只要您记得以纳秒为单位显示结果。如果您以小时为单位记录值,则同样如此,无需手动乘法或除法。
  • @M.Prokhorov,令人不安的是,recordLatency 文档提到以纳秒为单位
  • @UBIKLOADPACK,据我了解,他们并不关心实际的 UOM。他们只接受整数并用它们做一些计算。他们关心的可能是几年或皮秒,计算不会改变。我的理解是,他们在最佳可用时间源精度的背景下提到 nanos。
  • @M.Prokhorov,如果你确定你的答案,为什么不创建一个答案而不是评论,我很乐意提供赏金。谢谢
  • @UBIKLOADPACK,那是因为我不确定我的答案,当我第一次阅读这个问题时,我了解了那个库,我对它的全部了解来自阅读它的 javadoc 和源代码。像往常一样,当我这样评论时。

标签: java latency hdrhistogram latencyutils


【解决方案1】:

我可以为您提供另一个开源库,它提供了可以将值从一个时间单位转换为另一个时间单位的实用程序。它称为 MgntUtils。有关 TimeInterval 类的信息,请参阅此 javadoc。这是将时间间隔保存为数值及其关联的 TimeUnit 的便利类。该类还提供了将其值检索为所需尺度(纳秒、毫秒、秒、分钟、小时或天)的方法,请参见方法 toNanos()、toMillis()、toSeconds()、toMinutes()、toHours() , toDays()。您可以在 GithubMaven Central 上找到库本身作为 maven 工件。这是关于图书馆的article

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-01
    • 2019-12-29
    • 2010-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多