2022-12-24 23:49:50 +00:00
|
|
|
// Copyright (c) 2020-2022 The Bitcoin Core developers
|
2020-04-29 15:05:41 +02:00
|
|
|
// Distributed under the MIT software license, see the accompanying
|
|
|
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
|
|
|
|
|
|
#include <bench/bench.h>
|
|
|
|
|
#include <logging.h>
|
|
|
|
|
#include <test/util/setup_common.h>
|
2024-08-26 17:27:54 +02:00
|
|
|
|
|
|
|
|
#include <functional>
|
|
|
|
|
#include <vector>
|
2020-04-29 15:05:41 +02:00
|
|
|
|
2023-01-23 07:49:46 -08:00
|
|
|
// All but 2 of the benchmarks should have roughly similar performance:
|
|
|
|
|
//
|
2024-08-08 10:56:58 +02:00
|
|
|
// LogWithoutDebug should be ~3 orders of magnitude faster, as nothing is logged.
|
2023-01-23 07:49:46 -08:00
|
|
|
//
|
|
|
|
|
// LogWithoutWriteToFile should be ~2 orders of magnitude faster, as it avoids disk writes.
|
2020-04-29 15:05:41 +02:00
|
|
|
|
|
|
|
|
static void Logging(benchmark::Bench& bench, const std::vector<const char*>& extra_args, const std::function<void()>& log)
|
|
|
|
|
{
|
2023-01-30 07:21:36 -08:00
|
|
|
// Reset any enabled logging categories from a previous benchmark run.
|
|
|
|
|
LogInstance().DisableCategory(BCLog::LogFlags::ALL);
|
|
|
|
|
|
2020-04-29 15:05:41 +02:00
|
|
|
TestingSetup test_setup{
|
2023-04-17 22:20:59 +02:00
|
|
|
ChainType::REGTEST,
|
2024-07-08 15:45:56 +02:00
|
|
|
{.extra_args = extra_args},
|
2020-04-29 15:05:41 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
bench.run([&] { log(); });
|
|
|
|
|
}
|
|
|
|
|
|
2024-08-08 10:56:58 +02:00
|
|
|
static void LogWithDebug(benchmark::Bench& bench)
|
2020-04-29 15:05:41 +02:00
|
|
|
{
|
2024-08-08 10:49:13 +02:00
|
|
|
Logging(bench, {"-logthreadnames=0", "-debug=net"}, [] { LogDebug(BCLog::NET, "%s\n", "test"); });
|
2020-04-29 15:05:41 +02:00
|
|
|
}
|
2022-07-11 11:23:45 +02:00
|
|
|
|
2024-08-08 10:56:58 +02:00
|
|
|
static void LogWithoutDebug(benchmark::Bench& bench)
|
2020-04-29 15:05:41 +02:00
|
|
|
{
|
2024-08-08 10:49:13 +02:00
|
|
|
Logging(bench, {"-logthreadnames=0", "-debug=0"}, [] { LogDebug(BCLog::NET, "%s\n", "test"); });
|
2020-04-29 15:05:41 +02:00
|
|
|
}
|
2022-07-11 11:23:45 +02:00
|
|
|
|
2024-09-02 16:39:21 +02:00
|
|
|
static void LogWithThreadNames(benchmark::Bench& bench)
|
2022-07-11 11:23:45 +02:00
|
|
|
{
|
2024-09-02 16:39:21 +02:00
|
|
|
Logging(bench, {"-logthreadnames=1"}, [] { LogInfo("%s\n", "test"); });
|
2022-07-11 11:23:45 +02:00
|
|
|
}
|
|
|
|
|
|
2024-09-02 16:39:21 +02:00
|
|
|
static void LogWithoutThreadNames(benchmark::Bench& bench)
|
2022-07-11 11:23:45 +02:00
|
|
|
{
|
2024-09-02 16:39:21 +02:00
|
|
|
Logging(bench, {"-logthreadnames=0"}, [] { LogInfo("%s\n", "test"); });
|
2022-07-11 11:23:45 +02:00
|
|
|
}
|
|
|
|
|
|
2022-07-11 11:15:26 +02:00
|
|
|
static void LogWithoutWriteToFile(benchmark::Bench& bench)
|
2020-04-29 15:05:41 +02:00
|
|
|
{
|
2023-01-23 07:49:46 -08:00
|
|
|
// Disable writing the log to a file, as used for unit tests and fuzzing in `MakeNoLogFileContext`.
|
2020-04-29 15:05:41 +02:00
|
|
|
Logging(bench, {"-nodebuglogfile", "-debug=1"}, [] {
|
2024-09-02 16:39:21 +02:00
|
|
|
LogInfo("%s\n", "test");
|
2024-08-08 10:49:13 +02:00
|
|
|
LogDebug(BCLog::NET, "%s\n", "test");
|
2020-04-29 15:05:41 +02:00
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2024-08-08 10:56:58 +02:00
|
|
|
BENCHMARK(LogWithDebug, benchmark::PriorityLevel::HIGH);
|
|
|
|
|
BENCHMARK(LogWithoutDebug, benchmark::PriorityLevel::HIGH);
|
2024-09-02 16:39:21 +02:00
|
|
|
BENCHMARK(LogWithThreadNames, benchmark::PriorityLevel::HIGH);
|
|
|
|
|
BENCHMARK(LogWithoutThreadNames, benchmark::PriorityLevel::HIGH);
|
2022-07-11 11:15:26 +02:00
|
|
|
BENCHMARK(LogWithoutWriteToFile, benchmark::PriorityLevel::HIGH);
|