aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/bench/logging.cpp67
-rw-r--r--src/init/common.cpp2
2 files changed, 56 insertions, 13 deletions
diff --git a/src/bench/logging.cpp b/src/bench/logging.cpp
index c38552f0b8..9aedb26236 100644
--- a/src/bench/logging.cpp
+++ b/src/bench/logging.cpp
@@ -6,9 +6,17 @@
#include <logging.h>
#include <test/util/setup_common.h>
+// All but 2 of the benchmarks should have roughly similar performance:
+//
+// LogPrintWithoutCategory should be ~3 orders of magnitude faster, as nothing is logged.
+//
+// LogWithoutWriteToFile should be ~2 orders of magnitude faster, as it avoids disk writes.
static void Logging(benchmark::Bench& bench, const std::vector<const char*>& extra_args, const std::function<void()>& log)
{
+ // Reset any enabled logging categories from a previous benchmark run.
+ LogInstance().DisableCategory(BCLog::LogFlags::ALL);
+
TestingSetup test_setup{
CBaseChainParams::REGTEST,
extra_args,
@@ -17,32 +25,67 @@ static void Logging(benchmark::Bench& bench, const std::vector<const char*>& ext
bench.run([&] { log(); });
}
-static void LoggingYoThreadNames(benchmark::Bench& bench)
+static void LogPrintLevelWithThreadNames(benchmark::Bench& bench)
{
- Logging(bench, {"-logthreadnames=1"}, [] { LogPrintf("%s\n", "test"); });
+ Logging(bench, {"-logthreadnames=1", "-debug=net"}, [] {
+ LogPrintLevel(BCLog::NET, BCLog::Level::Error, "%s\n", "test"); });
}
-static void LoggingNoThreadNames(benchmark::Bench& bench)
+
+static void LogPrintLevelWithoutThreadNames(benchmark::Bench& bench)
{
- Logging(bench, {"-logthreadnames=0"}, [] { LogPrintf("%s\n", "test"); });
+ Logging(bench, {"-logthreadnames=0", "-debug=net"}, [] {
+ LogPrintLevel(BCLog::NET, BCLog::Level::Error, "%s\n", "test"); });
}
-static void LoggingYoCategory(benchmark::Bench& bench)
+
+static void LogPrintWithCategory(benchmark::Bench& bench)
{
Logging(bench, {"-logthreadnames=0", "-debug=net"}, [] { LogPrint(BCLog::NET, "%s\n", "test"); });
}
-static void LoggingNoCategory(benchmark::Bench& bench)
+
+static void LogPrintWithoutCategory(benchmark::Bench& bench)
{
Logging(bench, {"-logthreadnames=0", "-debug=0"}, [] { LogPrint(BCLog::NET, "%s\n", "test"); });
}
-static void LoggingNoFile(benchmark::Bench& bench)
+
+static void LogPrintfCategoryWithThreadNames(benchmark::Bench& bench)
+{
+ Logging(bench, {"-logthreadnames=1", "-debug=net"}, [] {
+ LogPrintfCategory(BCLog::NET, "%s\n", "test");
+ });
+}
+
+static void LogPrintfCategoryWithoutThreadNames(benchmark::Bench& bench)
+{
+ Logging(bench, {"-logthreadnames=0", "-debug=net"}, [] {
+ LogPrintfCategory(BCLog::NET, "%s\n", "test");
+ });
+}
+
+static void LogPrintfWithThreadNames(benchmark::Bench& bench)
+{
+ Logging(bench, {"-logthreadnames=1"}, [] { LogPrintf("%s\n", "test"); });
+}
+
+static void LogPrintfWithoutThreadNames(benchmark::Bench& bench)
+{
+ Logging(bench, {"-logthreadnames=0"}, [] { LogPrintf("%s\n", "test"); });
+}
+
+static void LogWithoutWriteToFile(benchmark::Bench& bench)
{
+ // Disable writing the log to a file, as used for unit tests and fuzzing in `MakeNoLogFileContext`.
Logging(bench, {"-nodebuglogfile", "-debug=1"}, [] {
LogPrintf("%s\n", "test");
LogPrint(BCLog::NET, "%s\n", "test");
});
}
-BENCHMARK(LoggingYoThreadNames, benchmark::PriorityLevel::HIGH);
-BENCHMARK(LoggingNoThreadNames, benchmark::PriorityLevel::HIGH);
-BENCHMARK(LoggingYoCategory, benchmark::PriorityLevel::HIGH);
-BENCHMARK(LoggingNoCategory, benchmark::PriorityLevel::HIGH);
-BENCHMARK(LoggingNoFile, benchmark::PriorityLevel::HIGH);
+BENCHMARK(LogPrintLevelWithThreadNames, benchmark::PriorityLevel::HIGH);
+BENCHMARK(LogPrintLevelWithoutThreadNames, benchmark::PriorityLevel::HIGH);
+BENCHMARK(LogPrintWithCategory, benchmark::PriorityLevel::HIGH);
+BENCHMARK(LogPrintWithoutCategory, benchmark::PriorityLevel::HIGH);
+BENCHMARK(LogPrintfCategoryWithThreadNames, benchmark::PriorityLevel::HIGH);
+BENCHMARK(LogPrintfCategoryWithoutThreadNames, benchmark::PriorityLevel::HIGH);
+BENCHMARK(LogPrintfWithThreadNames, benchmark::PriorityLevel::HIGH);
+BENCHMARK(LogPrintfWithoutThreadNames, benchmark::PriorityLevel::HIGH);
+BENCHMARK(LogWithoutWriteToFile, benchmark::PriorityLevel::HIGH);
diff --git a/src/init/common.cpp b/src/init/common.cpp
index 791424f5f6..a7829c5d99 100644
--- a/src/init/common.cpp
+++ b/src/init/common.cpp
@@ -23,7 +23,7 @@
namespace init {
void AddLoggingArgs(ArgsManager& argsman)
{
- argsman.AddArg("-debuglogfile=<file>", strprintf("Specify location of debug log file. Relative paths will be prefixed by a net-specific datadir location. (-nodebuglogfile to disable; default: %s)", DEFAULT_DEBUGLOGFILE), ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS);
+ argsman.AddArg("-debuglogfile=<file>", strprintf("Specify location of debug log file (default: %s). Relative paths will be prefixed by a net-specific datadir location. Pass -nodebuglogfile to disable writing the log to a file.", DEFAULT_DEBUGLOGFILE), ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS);
argsman.AddArg("-debug=<category>", "Output debug and trace logging (default: -nodebug, supplying <category> is optional). "
"If <category> is not supplied or if <category> = 1, output all debug and trace logging. <category> can be: " + LogInstance().LogCategoriesString() + ". This option can be specified multiple times to output multiple categories.",
ArgsManager::ALLOW_ANY, OptionsCategory::DEBUG_TEST);