This was only used by the "blog granule" feature which was
removed in #12435 /
|
||
|---|---|---|
| .. | ||
| BenchActorCollection.cpp | ||
| BenchAsyncResult.cpp | ||
| BenchCallback.cpp | ||
| BenchCallbackActor.cpp | ||
| BenchConflictSet.cpp | ||
| BenchCoroChooseRace.cpp | ||
| BenchCoroutineOverhead.cpp | ||
| BenchHash.cpp | ||
| BenchMain.cpp | ||
| BenchMem.cpp | ||
| BenchMemcpy.cpp | ||
| BenchNet2.cpp | ||
| BenchNet2Actor.cpp | ||
| BenchNoThrowOnCancel.cpp | ||
| BenchPriorityMultiLock.cpp | ||
| BenchRandom.cpp | ||
| BenchRef.cpp | ||
| BenchStream.cpp | ||
| BenchSupport.h | ||
| BenchThreadHelper.cpp | ||
| BenchTimeout.cpp | ||
| BenchTimer.cpp | ||
| BenchWaitForAllReady.cpp | ||
| CMakeLists.txt | ||
| README.md | ||
README.md
Summary
The benchmark suite is split into three executables:
flow_benchfor benchmarks that depend only onflowfdbrpc_benchfor benchmarks that depend onfdbrpcfdbclient_benchfor benchmarks that depend onfdbclient
These binaries can be used to microbenchmark parts of the FoundationDB code without always pulling in higher-level dependencies. Specifically, they can be used to:
- Test the performance effects of changes to the actor compiler or to the
flowandfdbrpclibraries - Test the performance of various uses of the
flowandfdbrpclibraries - Find areas for improvement in the
flowandfdbrpclibraries - Compare
flow/fdbrpcprimitives to alternatives provided by the standard library or other third-party libraries.
Usage
- To build one of the benchmark executables, run
ninja flow_bench,ninja fdbrpc_bench, orninja fdbclient_bench. - Then you can run
bin/<target> --helpto see possible uses of that benchmark binary. - Running
bin/<target>directly will run all registered benchmarks in that binary, but you may want to limit your run to a subset of benchmarks. This can be done by runningbin/<target> --benchmark_filter=<regex> - All benchmark names can be listed with
bin/<target> --benchmark_list_tests - Example output:
$ bin/flow_bench --benchmark_filter=bench_ref
2020-08-04 21:49:40
Running bin/flow_bench
Run on (7 X 2904 MHz CPU s)
CPU Caches:
L1 Data 32 KiB (x7)
L1 Instruction 32 KiB (x7)
L2 Unified 256 KiB (x7)
L3 Unified 12288 KiB (x1)
Load Average: 0.15, 0.15, 0.72
---------------------------------------------------------------------------------------------------------------
Benchmark Time CPU Iterations UserCounters...
---------------------------------------------------------------------------------------------------------------
bench_ref_create_and_destroy<RefType::RawPointer> 4.90 ns 4.90 ns 116822124 items_per_second=203.88M/s
bench_ref_create_and_destroy<RefType::UniquePointer> 4.94 ns 4.94 ns 141101924 items_per_second=202.555M/s
bench_ref_create_and_destroy<RefType::SharedPointer> 42.5 ns 42.5 ns 13802909 items_per_second=23.531M/s
bench_ref_create_and_destroy<RefType::FlowReference> 5.05 ns 5.05 ns 100000000 items_per_second=197.955M/s
bench_ref_copy<RefType::RawPointer> 1.15 ns 1.15 ns 612121585 items_per_second=871.218M/s
bench_ref_copy<RefType::SharedPointer> 10.0 ns 10.0 ns 67553102 items_per_second=99.8113M/s
bench_ref_copy<RefType::FlowReference> 2.33 ns 2.33 ns 292317474 items_per_second=428.507M/s
- More detailed documentation can be found at https://github.com/google/benchmark
Existing Benchmarks
bench_populatemeasures the population of a vector of mutationsbench_refcompares the performance of theflowReferencetype to other pointer typesbench_iteratemeasures iteration over a list of mutationsbench_streammeasures the performance of writing to and reading from aPromiseStreambench_randommeasures the performance ofDeterministicRandom.bench_timermeasures the performance of FoundationDB timers.Memcpycomparesrte_memcpy_noinlineandmemcpyacross aligned/unaligned and cached/uncached copy cases.
Future use cases
- Benchmark the overhead of sending and receiving messages through
FlowTransport - Benchmark the performance of serializing/deserializing various types