Commit bc857f03 authored by Jon Maltiel Swenson's avatar Jon Maltiel Swenson Committed by facebook-github-bot-4

Fibers allocation/deallocation benchmarks

Summary: Add a couple benchmarks measuring allocation/deallocation latency.  One benchmark measures an allocate-deallocate repeated pattern, the other measures the allocation of a large chunk of fibers.

We'll use these benchmarks later on after we modify the allocation/deallocation behavior of fibers.

Reviewed By: pavlo-fb

Differential Revision: D2573064

fb-gh-sync-id: 414eb93d6223e42c187c03214a47dfb533491bab
parent a3bfe5b0
......@@ -1449,3 +1449,58 @@ BENCHMARK(FiberManagerBasicOneAwait, iters) {
BENCHMARK(FiberManagerBasicFiveAwaits, iters) {
runBenchmark(5, iters);
}
BENCHMARK(FiberManagerAllocateDeallocatePattern, iters) {
static const size_t kNumAllocations = 10000;
FiberManager::Options opts;
opts.maxFibersPoolSize = 0;
FiberManager fiberManager(folly::make_unique<SimpleLoopController>(), opts);
for (size_t iter = 0; iter < iters; ++iter) {
EXPECT_EQ(0, fiberManager.fibersPoolSize());
size_t fibersRun = 0;
for (size_t i = 0; i < kNumAllocations; ++i) {
fiberManager.addTask(
[&fibersRun] {
++fibersRun;
}
);
fiberManager.loopUntilNoReady();
}
EXPECT_EQ(10000, fibersRun);
EXPECT_EQ(0, fiberManager.fibersPoolSize());
}
}
BENCHMARK(FiberManagerAllocateLargeChunk, iters) {
static const size_t kNumAllocations = 10000;
FiberManager::Options opts;
opts.maxFibersPoolSize = 0;
FiberManager fiberManager(folly::make_unique<SimpleLoopController>(), opts);
for (size_t iter = 0; iter < iters; ++iter) {
EXPECT_EQ(0, fiberManager.fibersPoolSize());
size_t fibersRun = 0;
for (size_t i = 0; i < kNumAllocations; ++i) {
fiberManager.addTask(
[&fibersRun] {
++fibersRun;
}
);
}
fiberManager.loopUntilNoReady();
EXPECT_EQ(10000, fibersRun);
EXPECT_EQ(0, fiberManager.fibersPoolSize());
}
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment