foundationdb/flowbench/BenchSamples.cpp

102 lines
3.4 KiB
C++

/*
* BenchSamples.cpp
*
* This source file is part of the FoundationDB open source project
*
* Copyright 2013-2022 Apple Inc. and the FoundationDB project authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "benchmark/benchmark.h"
#include "flow/IRandom.h"
#include "flowbench/GlobalData.h"
#include "fdbrpc/Stats.h"
#include "flow/Histogram.h"
static void bench_continuousSampleInt(benchmark::State& state) {
ContinuousSample<int64_t> cs(state.range(0));
InputGenerator<int64_t> data(1e6, []() { return deterministicRandom()->randomInt64(0, 1e9); });
for (auto _ : state) {
cs.addSample(data.next());
}
state.SetItemsProcessed(state.iterations());
}
BENCHMARK(bench_continuousSampleInt)->Arg(1000)->Arg(10000)->ReportAggregatesOnly(true);
static void bench_continuousSampleLatency(benchmark::State& state) {
ContinuousSample<double> cs(state.range(0));
InputGenerator<double> data(1e6, []() { return deterministicRandom()->random01() * 2.0; });
for (auto _ : state) {
cs.addSample(data.next());
}
state.SetItemsProcessed(state.iterations());
}
BENCHMARK(bench_continuousSampleLatency)->Arg(1000)->Arg(10000)->ReportAggregatesOnly(true);
static void bench_latencyBands(benchmark::State& state) {
constexpr double max = 2.0;
InputGenerator<double> data(1e6, []() { return deterministicRandom()->random01() * max; });
LatencyBands lb("test", UID(), 5);
for (int i = 0; i < state.range(0); ++i) {
lb.addThreshold(max * (double)(i + 1) / (state.range(0) + 1));
}
for (auto _ : state) {
lb.addMeasurement(data.next(), false);
}
state.SetItemsProcessed(state.iterations());
}
BENCHMARK(bench_latencyBands)->Arg(1)->Arg(4)->Arg(7)->Arg(10)->ReportAggregatesOnly(true);
static void bench_histogramInt(benchmark::State& state) {
Reference<Histogram> h = Histogram::getHistogram("histogramTest"_sr, "bytes"_sr, Histogram::Unit::bytes);
InputGenerator<int32_t> data(1e6, []() { return deterministicRandom()->randomInt64(0, 1e9); });
for (auto _ : state) {
h->sample(data.next());
}
state.SetItemsProcessed(state.iterations());
}
BENCHMARK(bench_histogramInt)->ReportAggregatesOnly(true);
static void bench_histogramPct(benchmark::State& state) {
Reference<Histogram> h = Histogram::getHistogram("histogramTest"_sr, "pct"_sr, Histogram::Unit::percentageLinear);
InputGenerator<double> data(1e6, []() { return deterministicRandom()->random01() * 1.5; });
for (auto _ : state) {
h->samplePercentage(data.next());
}
state.SetItemsProcessed(state.iterations());
}
BENCHMARK(bench_histogramPct)->ReportAggregatesOnly(true);
static void bench_histogramTime(benchmark::State& state) {
Reference<Histogram> h = Histogram::getHistogram("histogramTest"_sr, "latency"_sr, Histogram::Unit::microseconds);
InputGenerator<double> data(1e6, []() { return deterministicRandom()->random01() * 5; });
for (auto _ : state) {
h->sampleSeconds(data.next());
}
state.SetItemsProcessed(state.iterations());
}
BENCHMARK(bench_histogramTime)->ReportAggregatesOnly(true);