Skip to content
This repository was archived by the owner on Jul 31, 2023. It is now read-only.

Commit 604a7f4

Browse files
authored
Add a benchmark for batched recording (as in the gRPC plugin). (#28)
1 parent d28d5bf commit 604a7f4

File tree

1 file changed

+64
-0
lines changed

1 file changed

+64
-0
lines changed

opencensus/stats/internal/stats_manager_benchmark.cc

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,11 +110,75 @@ BENCHMARK_TEMPLATE2(BM_Record, DistributionAggregation, CumulativeWindow)
110110
BENCHMARK_TEMPLATE2(BM_Record, DistributionAggregation, IntervalWindow)
111111
->Range(1, 16);
112112

113+
// Benchmarks batched recording against a set of measures with a small number of
114+
// views on each, matching RPC stats recording.
115+
void BM_RecordBatched(benchmark::State& state) {
116+
const std::string tag_key_1 = "tag_key_1";
117+
const std::string tag_key_2 = "tag_key_2";
118+
const int num_measures = 6;
119+
std::vector<MeasureDouble> measures;
120+
std::vector<std::unique_ptr<View>> views;
121+
for (int i = 0; i < num_measures; ++i) {
122+
const std::string measure_name = MakeUniqueName();
123+
measures.push_back(MeasureRegistry::RegisterDouble(measure_name, "", ""));
124+
125+
const ViewDescriptor count_descriptor =
126+
ViewDescriptor()
127+
.set_measure(measure_name)
128+
.set_name(absl::StrCat("count_", measure_name))
129+
.set_aggregation(Aggregation::Count())
130+
.set_aggregation_window(AggregationWindow::Cumulative())
131+
.add_column(tag_key_1)
132+
.add_column(tag_key_2);
133+
views.push_back(absl::make_unique<View>(count_descriptor));
134+
135+
const ViewDescriptor sum_descriptor =
136+
ViewDescriptor()
137+
.set_measure(measure_name)
138+
.set_name(absl::StrCat("sum_", measure_name))
139+
.set_aggregation(Aggregation::Sum())
140+
.set_aggregation_window(AggregationWindow::Cumulative())
141+
.add_column(tag_key_1)
142+
.add_column(tag_key_2);
143+
views.push_back(absl::make_unique<View>(sum_descriptor));
144+
145+
const ViewDescriptor distribution_descriptor =
146+
ViewDescriptor()
147+
.set_measure(measure_name)
148+
.set_name(absl::StrCat("distribution_", measure_name))
149+
.set_aggregation(Aggregation::Distribution(
150+
BucketBoundaries::Exponential(10, 10, 2)))
151+
.set_aggregation_window(AggregationWindow::Cumulative())
152+
.add_column(tag_key_1)
153+
.add_column(tag_key_2);
154+
views.push_back(absl::make_unique<View>(distribution_descriptor));
155+
}
156+
157+
std::vector<std::string> tag_values(10);
158+
for (int i = 0; i < 10; ++i) {
159+
tag_values[i] = absl::StrCat("value", i);
160+
}
161+
int iteration = 0;
162+
for (auto _ : state) {
163+
Record({{measures[0], static_cast<double>(iteration)},
164+
{measures[1], static_cast<double>(iteration)},
165+
{measures[2], static_cast<double>(iteration)},
166+
{measures[3], static_cast<double>(iteration)},
167+
{measures[4], static_cast<double>(iteration)},
168+
{measures[5], static_cast<double>(iteration)}},
169+
{{tag_key_1, tag_values[iteration % tag_values.size()]},
170+
{tag_key_2, tag_values[iteration % (tag_values.size() - 1)]}});
171+
++iteration;
172+
}
173+
}
174+
BENCHMARK(BM_RecordBatched);
175+
113176
// TODO: Other useful benchmarks:
114177
// - Multithreaded recording against one/different measures.
115178
// - Recording with parameterized numbers of tag keys.
116179

117180
} // namespace
118181
} // namespace stats
119182
} // namespace opencensus
183+
120184
BENCHMARK_MAIN();

0 commit comments

Comments
 (0)