увеличить накопители для процентили статистики, используя размер скользящего окна - PullRequest
0 голосов
/ 19 ноября 2018

Мы используем повышающие аккумуляторы для вычисления процентилей времени запроса к серверу следующим образом:

static constexpr size_t ROLLING_WINDOW_SIZE = 1000;
using accumulator_t = boost::accumulators::accumulator_set<long long int,
        boost::accumulators::stats<boost::accumulators::tag::extended_p_square_quantile,
                boost::accumulators::tag::rolling_count> >;
const std::array<double, 4> QUANTILE_PROBABILITIES = { 0.5, 0.75, 0.95, 0.99 };

....

Percentiles::Percentiles() :
    m_accumulator(boost::accumulators::extended_p_square_probabilities = QUANTILE_PROBABILITIES,
                  boost::accumulators::tag::rolling_window::window_size = ROLLING_WINDOW_SIZE) {}

Новые значения вставляются следующим образом:

m_accumulator(value);

и процентиль рассчитывается по формуле:

auto 99_percentile = boost::accumulators::quantile(m_accumulator,
                                              boost::accumulators::quantile_probability = 0.99);

Проблема, которую мы видим, состоит в том, что аккумулятор почему-то на самом деле не рассчитывает квантили по указанному размеру скользящего окна, сохраняет некоторые значения в течение более длительного времени и использует их для расчета. Это приводит к тому, что после быстрого увеличения (временного скачка) значения 99_percentile он восстанавливается крайне медленно, даже если проблема исчезла, а последние 1000 значений выглядели хорошо. Любые идеи будут с благодарностью.

...