logging.cpp raw
1 // Copyright (c) 2020-present The Bitcoin Core developers
2 // Distributed under the MIT software license, see the accompanying
3 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
5 #include <bench/bench.h>
6 #include <logging.h>
7 #include <test/util/setup_common.h>
8
9 #include <functional>
10 #include <vector>
11
12 // All but 2 of the benchmarks should have roughly similar performance:
13 //
14 // LogWithoutDebug should be ~3 orders of magnitude faster, as nothing is logged.
15 //
16 // LogWithoutWriteToFile should be ~2 orders of magnitude faster, as it avoids disk writes.
17
18 static void Logging(benchmark::Bench& bench, const std::vector<const char*>& extra_args, const std::function<void()>& log)
19 {
20 // Reset any enabled logging categories from a previous benchmark run.
21 LogInstance().DisableCategory(BCLog::LogFlags::ALL);
22
23 TestingSetup test_setup{
24 ChainType::REGTEST,
25 {.extra_args = extra_args},
26 };
27
28 bench.run([&] { log(); });
29 }
30
31 static void LogWithDebug(benchmark::Bench& bench)
32 {
33 Logging(bench, {"-logthreadnames=0", "-debug=net"}, [] { LogDebug(BCLog::NET, "%s\n", "test"); });
34 }
35
36 static void LogWithoutDebug(benchmark::Bench& bench)
37 {
38 Logging(bench, {"-logthreadnames=0", "-debug=0"}, [] { LogDebug(BCLog::NET, "%s\n", "test"); });
39 }
40
41 static void LogWithThreadNames(benchmark::Bench& bench)
42 {
43 Logging(bench, {"-logthreadnames=1"}, [] { LogInfo("%s\n", "test"); });
44 }
45
46 static void LogWithoutThreadNames(benchmark::Bench& bench)
47 {
48 Logging(bench, {"-logthreadnames=0"}, [] { LogInfo("%s\n", "test"); });
49 }
50
51 static void LogWithoutWriteToFile(benchmark::Bench& bench)
52 {
53 // Disable writing the log to a file, as used for unit tests and fuzzing in `MakeNoLogFileContext`.
54 Logging(bench, {"-nodebuglogfile", "-debug=1"}, [] {
55 LogInfo("%s\n", "test");
56 LogDebug(BCLog::NET, "%s\n", "test");
57 });
58 }
59
60 BENCHMARK(LogWithDebug);
61 BENCHMARK(LogWithoutDebug);
62 BENCHMARK(LogWithThreadNames);
63 BENCHMARK(LogWithoutThreadNames);
64 BENCHMARK(LogWithoutWriteToFile);
65