From 28b86148ed02324f7620ece094740ee7f61ab650 Mon Sep 17 00:00:00 2001 From: Tony Butler Date: Thu, 23 Sep 2021 14:40:41 -0600 Subject: [PATCH] Add algo-min-time option same as meta-miner --- src/base/kernel/config/BaseConfig.cpp | 2 ++ src/base/kernel/config/BaseConfig.h | 3 +++ src/base/kernel/config/BaseTransform.cpp | 4 ++++ src/base/kernel/interfaces/IConfig.h | 1 + src/core/config/Config.cpp | 7 ++++--- src/core/config/Config_platform.h | 1 + src/core/config/usage.h | 7 +++++++ src/net/Network.cpp | 5 +++++ 8 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/base/kernel/config/BaseConfig.cpp b/src/base/kernel/config/BaseConfig.cpp index 5c02a7b5..1117cfc7 100644 --- a/src/base/kernel/config/BaseConfig.cpp +++ b/src/base/kernel/config/BaseConfig.cpp @@ -48,6 +48,7 @@ namespace xmrig { #ifdef XMRIG_FEATURE_MO_BENCHMARK +const char *BaseConfig::kAlgoMinTime = "algo-min-time"; const char *BaseConfig::kAlgoPerf = "algo-perf"; #endif const char *BaseConfig::kApi = "api"; @@ -109,6 +110,7 @@ bool xmrig::BaseConfig::read(const IJsonReader &reader, const char *fileName) Log::setColors(reader.getBool(kColors, Log::isColors())); # ifdef XMRIG_FEATURE_MO_BENCHMARK m_benchAlgoTime = reader.getInt(kBenchAlgoTime, m_benchAlgoTime); + m_algoMinTime = reader.getInt(kAlgoMinTime, m_algoMinTime); # endif setVerbose(reader.getValue(kVerbose)); diff --git a/src/base/kernel/config/BaseConfig.h b/src/base/kernel/config/BaseConfig.h index 9d1ab9d9..4d7b1e26 100644 --- a/src/base/kernel/config/BaseConfig.h +++ b/src/base/kernel/config/BaseConfig.h @@ -41,6 +41,7 @@ class BaseConfig : public IConfig { public: # ifdef XMRIG_FEATURE_MO_BENCHMARK + static const char *kAlgoMinTime; static const char *kAlgoPerf; # endif static const char *kApi; @@ -87,6 +88,7 @@ public: # ifdef XMRIG_FEATURE_MO_BENCHMARK inline bool isRebenchAlgo() const { return m_rebenchAlgo; } inline int benchAlgoTime() const { return m_benchAlgoTime; } + inline int algoMinTime() const { return m_algoMinTime; } # endif # ifdef XMRIG_FEATURE_TLS @@ -122,6 +124,7 @@ protected: # ifdef XMRIG_FEATURE_MO_BENCHMARK bool m_rebenchAlgo = false; int m_benchAlgoTime = 10; + int m_algoMinTime = 0; # endif # ifdef XMRIG_FEATURE_TLS diff --git a/src/base/kernel/config/BaseTransform.cpp b/src/base/kernel/config/BaseTransform.cpp index 5d5a8ec4..e7d4b156 100644 --- a/src/base/kernel/config/BaseTransform.cpp +++ b/src/base/kernel/config/BaseTransform.cpp @@ -244,6 +244,7 @@ void xmrig::BaseTransform::transform(rapidjson::Document &doc, int key, const ch case IConfig::RetriesKey: /* --retries */ # ifdef XMRIG_FEATURE_MO_BENCHMARK case IConfig::BenchAlgoTimeKey: /* --bench-algo-time */ + case IConfig::AlgoMinTimeKey: /* --algo-min-time */ # endif case IConfig::RetryPauseKey: /* --retry-pause */ case IConfig::PrintTimeKey: /* --print-time */ @@ -383,6 +384,9 @@ void xmrig::BaseTransform::transformUint64(rapidjson::Document &doc, int key, ui # ifdef XMRIG_FEATURE_MO_BENCHMARK case IConfig::BenchAlgoTimeKey: /* --bench-algo-time */ return set(doc, BaseConfig::kBenchAlgoTime, arg); + + case IConfig::AlgoMinTimeKey: /* --algo-min-time */ + return set(doc, BaseConfig::kAlgoMinTime, arg); # endif default: diff --git a/src/base/kernel/interfaces/IConfig.h b/src/base/kernel/interfaces/IConfig.h index 84b271ef..604de68d 100644 --- a/src/base/kernel/interfaces/IConfig.h +++ b/src/base/kernel/interfaces/IConfig.h @@ -96,6 +96,7 @@ public: # ifdef XMRIG_FEATURE_MO_BENCHMARK RebenchAlgoKey = 10001, BenchAlgoTimeKey = 10002, + AlgoMinTimeKey = 10003, # endif // xmrig cpu diff --git a/src/core/config/Config.cpp b/src/core/config/Config.cpp index d983676b..9028f3e0 100644 --- a/src/core/config/Config.cpp +++ b/src/core/config/Config.cpp @@ -202,7 +202,7 @@ bool xmrig::Config::isShouldSave() const } # endif -# ifdef XMRIG_FEATURE_BENCHMARK +# ifdef XMRIG_FEATURE_MO_BENCHMARK if (m_benchmark.isNewBenchRun()) { return true; } @@ -245,7 +245,7 @@ bool xmrig::Config::read(const IJsonReader &reader, const char *fileName) d_ptr->healthPrintTime = reader.getUint(kHealthPrintTime, d_ptr->healthPrintTime); # endif -# ifdef XMRIG_FEATURE_BENCHMARK +# ifdef XMRIG_FEATURE_MO_BENCHMARK m_benchmark.read(reader.getValue(kAlgoPerf)); # endif @@ -314,9 +314,10 @@ void xmrig::Config::getJSON(rapidjson::Document &doc) const doc.AddMember(StringRef(kVerbose), Log::verbose(), allocator); doc.AddMember(StringRef(kWatch), m_watch, allocator); -# ifdef XMRIG_FEATURE_BENCHMARK +# ifdef XMRIG_FEATURE_MO_BENCHMARK doc.AddMember(StringRef(kRebenchAlgo), isRebenchAlgo(), allocator); doc.AddMember(StringRef(kBenchAlgoTime), benchAlgoTime(), allocator); + doc.AddMember(StringRef(kAlgoMinTime), algoMinTime(), allocator); doc.AddMember(StringRef(kAlgoPerf), m_benchmark.toJSON(doc), allocator); # endif diff --git a/src/core/config/Config_platform.h b/src/core/config/Config_platform.h index 312a1f73..40c70870 100644 --- a/src/core/config/Config_platform.h +++ b/src/core/config/Config_platform.h @@ -68,6 +68,7 @@ static const option options[] = { # ifdef XMRIG_FEATURE_MO_BENCHMARK { "rebench-algo", 0, nullptr, IConfig::RebenchAlgoKey }, { "bench-algo-time", 1, nullptr, IConfig::BenchAlgoTimeKey }, + { "algo-min-time", 1, nullptr, IConfig::AlgoMinTimeKey }, # endif { "no-color", 0, nullptr, IConfig::ColorKey }, { "no-huge-pages", 0, nullptr, IConfig::HugePagesKey }, diff --git a/src/core/config/usage.h b/src/core/config/usage.h index 6cd599c9..0649e2f9 100644 --- a/src/core/config/usage.h +++ b/src/core/config/usage.h @@ -204,6 +204,13 @@ static inline const std::string &usage() u += " --no-dmi disable DMI/SMBIOS reader\n"; # endif +# ifdef XMRIG_FEATURE_MO_BENCHMARK + u += "\nMoneroOcean Benchmark (algo-perf):\n"; + u += " --rebench-algo run algo-perf benchmark (default if config contains no algo-perf)\n"; + u += " --bench-algo-time=N run algo-perf benchmark this many seconds per algo (default: 10)\n"; + u += " --algo-min-time=N when mining, avoid switching more often than every N seconds (default: 0/disabled)\n"; +# endif + return u; } diff --git a/src/net/Network.cpp b/src/net/Network.cpp index a0b4f779..0fd0665f 100644 --- a/src/net/Network.cpp +++ b/src/net/Network.cpp @@ -214,6 +214,11 @@ void xmrig::Network::onLogin(IStrategy *, IClient *client, rapidjson::Document & } params.AddMember("algo-perf", algo_perf, allocator); + + int algo_min_time = m_controller->config()->algoMinTime(); + if (algo_min_time > 0) { + params.AddMember("algo-min-time", algo_min_time, allocator); + } # endif }