40 argsman.
AddArg(
"-priority-level=<l1,l2,l3>",
strprintf(
"Run benchmarks of one or multiple priority level(s) (%s), default: '%s'",
46 std::stringstream ss(str);
47 std::vector<double> numbers;
68 std::vector<std::string>
args;
69 static std::vector<std::string> AVAILABLE_ARGS = {
"-testdatadir"};
70 for (
const std::string& arg_name : AVAILABLE_ARGS) {
71 auto op_arg = argsman.
GetArg(arg_name);
72 if (op_arg)
args.emplace_back(
strprintf(
"%s=%s", arg_name, *op_arg));
77 int main(
int argc,
char** argv)
84 tfm::format(std::cerr,
"Error parsing command line arguments: %s\n", error);
89 std::cout <<
"Usage: bench_bitcoin [options]\n" 94 " bench_bitcoin executes microbenchmarks. The quality of the benchmark results\n" 95 " highly depend on the stability of the machine. It can sometimes be difficult\n" 96 " to get stable, repeatable results, so here are a few tips:\n" 98 " * Use pyperf [1] to disable frequency scaling, turbo boost etc. For best\n" 99 " results, use CPU pinning and CPU isolation (see [2]).\n" 101 " * Each call of run() should do exactly the same work. E.g. inserting into\n" 102 " a std::vector doesn't do that as it will reallocate on certain calls. Make\n" 103 " sure each run has exactly the same preconditions.\n" 105 " * If results are still not reliable, increase runtime with e.g.\n" 106 " -min-time=5000 to let a benchmark run for at least 5 seconds.\n" 108 " * bench_bitcoin uses nanobench [3] for which there is extensive\n" 109 " documentation available online.\n" 111 "Environment Variables:\n" 113 " To attach a profiler you can run a benchmark in endless mode. This can be\n" 114 " done with the environment variable NANOBENCH_ENDLESS. E.g. like so:\n" 116 " NANOBENCH_ENDLESS=MuHash ./bench_bitcoin -filter=MuHash\n" 118 " In rare cases it can be useful to suppress stability warnings. This can be\n" 119 " done with the environment variable NANOBENCH_SUPPRESS_WARNINGS, e.g:\n" 121 " NANOBENCH_SUPPRESS_WARNINGS=1 ./bench_bitcoin\n" 126 " https://github.com/psf/pyperf\n" 128 " 2. CPU pinning & isolation\n" 129 " https://pyperf.readthedocs.io/en/latest/system.html\n" 132 " https://github.com/martinus/nanobench\n" 153 }
catch (
const std::exception& e) {
std::string SHA256AutoDetect(sha256_implementation::UseImplementation use_implementation)
Autodetect the best available SHA256 implementation.
void SetupCommonTestArgs(ArgsManager &argsman)
Register common test args.
fs::path GetPathArg(std::string arg, const fs::path &default_value={}) const
Return path argument or default value.
std::vector< std::string > SplitString(std::string_view str, char sep)
uint8_t StringToPriority(const std::string &str)
static std::vector< double > parseAsymptote(const std::string &str)
bool ParseParameters(int argc, const char *const argv[], std::string &error)
bool GetBoolArg(const std::string &strArg, bool fDefault) const
Return boolean argument or default value.
static constexpr int64_t DEFAULT_MIN_TIME_MS
std::string GetHelpMessage() const
Get the help string.
static const char * DEFAULT_BENCH_FILTER
static void SetupBenchArgs(ArgsManager &argsman)
static std::vector< std::string > parseTestSetupArgs(const ArgsManager &argsman)
std::string ListPriorities()
void AddArg(const std::string &name, const std::string &help, unsigned int flags, const OptionsCategory &cat)
Add argument.
static void RunAll(const Args &args)
void SetupHelpOptions(ArgsManager &args)
Add help options to the args manager.
static const std::string DEFAULT_PRIORITY
Priority level default value, run "all" priority levels.
int64_t GetIntArg(const std::string &strArg, int64_t nDefault) const
Return integer argument or default value.
std::string GetArg(const std::string &strArg, const std::string &strDefault) const
Return string argument or default value.
int main(int argc, char **argv)
bool HelpRequested(const ArgsManager &args)
static uint8_t parsePriorityLevel(const std::string &str)