Проблема единицы времени с методом LatencyUtils recordLatency - PullRequest
6 голосов
/ 11 июля 2019

Я использую пакет 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 также в наносекундах.Если я укажу значение в миллисекундах, я боюсь, что это повлияет на результаты записи.

1 Ответ

0 голосов
/ 16 июля 2019

Я могу предложить вам другую библиотеку с открытым исходным кодом, которая предоставляет утилиту, которая может преобразовывать значения из одной единицы времени в другую.Его называют MgntUtils.Смотрите этот Javadoc для класса TimeInterval .Это удобный класс, который содержит временной интервал как числовое значение и связанный с ним TimeUnit.Класс также предоставляет методы получения его значения как long в необходимом масштабе (наносекунды, миллисекунды, секунды, минуты, часы или дни). См. Методы toNanos (), toMillis (), toSeconds (), toMinutes (), toHours (), toDays ().Вы можете найти саму библиотеку на Github и на Maven Central как артефакты maven.Вот статья о библиотеке

...