diff --git a/src/backend/cpu/CpuConfig.cpp b/src/backend/cpu/CpuConfig.cpp index e9abd9e66..7ebe904bd 100644 --- a/src/backend/cpu/CpuConfig.cpp +++ b/src/backend/cpu/CpuConfig.cpp @@ -38,6 +38,7 @@ static const char *kHwAes = "hw-aes"; static const char *kMaxThreadsHint = "max-threads-hint"; static const char *kMemoryPool = "memory-pool"; static const char *kPriority = "priority"; +static const char *kYield = "yield"; #ifdef XMRIG_FEATURE_ASM static const char *kAsm = "asm"; @@ -70,6 +71,7 @@ rapidjson::Value xmrig::CpuConfig::toJSON(rapidjson::Document &doc) const obj.AddMember(StringRef(kHwAes), m_aes == AES_AUTO ? Value(kNullType) : Value(m_aes == AES_HW), allocator); obj.AddMember(StringRef(kPriority), priority() != -1 ? Value(priority()) : Value(kNullType), allocator); obj.AddMember(StringRef(kMemoryPool), m_memoryPool < 1 ? Value(m_memoryPool < 0) : Value(m_memoryPool), allocator); + obj.AddMember(StringRef(kYield), m_yield, allocator); if (m_threads.isEmpty()) { obj.AddMember(StringRef(kMaxThreadsHint), m_limit, allocator); @@ -120,6 +122,7 @@ void xmrig::CpuConfig::read(const rapidjson::Value &value) m_enabled = Json::getBool(value, kEnabled, m_enabled); m_hugePages = Json::getBool(value, kHugePages, m_hugePages); m_limit = Json::getUint(value, kMaxThreadsHint, m_limit); + m_yield = Json::getBool(value, kYield, m_yield); setAesMode(Json::getValue(value, kHwAes)); setPriority(Json::getInt(value, kPriority, -1)); diff --git a/src/backend/cpu/CpuConfig.h b/src/backend/cpu/CpuConfig.h index fa48e07bf..404b08fb4 100644 --- a/src/backend/cpu/CpuConfig.h +++ b/src/backend/cpu/CpuConfig.h @@ -55,6 +55,7 @@ public: inline bool isEnabled() const { return m_enabled; } inline bool isHugePages() const { return m_hugePages; } inline bool isShouldSave() const { return m_shouldSave; } + inline bool isYield() const { return m_yield; } inline const Assembly &assembly() const { return m_assembly; } inline const String &argon2Impl() const { return m_argon2Impl; } inline const Threads &threads() const { return m_threads; } @@ -72,6 +73,7 @@ private: bool m_enabled = true; bool m_hugePages = true; bool m_shouldSave = false; + bool m_yield = false; int m_memoryPool = 0; int m_priority = -1; String m_argon2Impl; diff --git a/src/backend/cpu/CpuLaunchData.cpp b/src/backend/cpu/CpuLaunchData.cpp index bbfc6bba9..76da267c1 100644 --- a/src/backend/cpu/CpuLaunchData.cpp +++ b/src/backend/cpu/CpuLaunchData.cpp @@ -38,6 +38,7 @@ xmrig::CpuLaunchData::CpuLaunchData(const Miner *miner, const Algorithm &algorit assembly(config.assembly()), hugePages(config.isHugePages()), hwAES(config.isHwAES()), + yield(config.isYield()), priority(config.priority()), affinity(thread.affinity()), miner(miner), diff --git a/src/backend/cpu/CpuLaunchData.h b/src/backend/cpu/CpuLaunchData.h index 586738447..6a1ee30e4 100644 --- a/src/backend/cpu/CpuLaunchData.h +++ b/src/backend/cpu/CpuLaunchData.h @@ -60,6 +60,7 @@ public: const Assembly assembly; const bool hugePages; const bool hwAES; + const bool yield; const int priority; const int64_t affinity; const Miner *miner; diff --git a/src/backend/cpu/CpuWorker.cpp b/src/backend/cpu/CpuWorker.cpp index 7584b6867..2e223a31e 100644 --- a/src/backend/cpu/CpuWorker.cpp +++ b/src/backend/cpu/CpuWorker.cpp @@ -58,6 +58,7 @@ xmrig::CpuWorker::CpuWorker(size_t id, const CpuLaunchData &data) : m_algorithm(data.algorithm), m_assembly(data.assembly), m_hwAES(data.hwAES), + m_yield(data.yield), m_av(data.av()), m_miner(data.miner), m_ctx() @@ -236,6 +237,10 @@ void xmrig::CpuWorker::start() } m_count += N; + + if (m_yield) { + std::this_thread::yield(); + } } consumeJob(); diff --git a/src/backend/cpu/CpuWorker.h b/src/backend/cpu/CpuWorker.h index 31819de97..11aba0478 100644 --- a/src/backend/cpu/CpuWorker.h +++ b/src/backend/cpu/CpuWorker.h @@ -71,6 +71,7 @@ private: const Algorithm m_algorithm; const Assembly m_assembly; const bool m_hwAES; + const bool m_yield; const CnHash::AlgoVariant m_av; const Miner *m_miner; cryptonight_ctx *m_ctx[N]; diff --git a/src/config.json b/src/config.json index fbbf8225b..26a7288a3 100644 --- a/src/config.json +++ b/src/config.json @@ -25,6 +25,7 @@ "hw-aes": null, "priority": null, "memory-pool": false, + "yield": false, "max-threads-hint": 100, "asm": true, "argon2-impl": null,