Fix CPU throttling to use 25% of cores and 60s threshold
- Change idle threshold from 5 minutes to 60 seconds - Calculate 25% of total cores instead of hardcoded 2 cores - Update logging message to reflect 25% usage - Add algorithm include for std::max function - Ensure minimum 1 core is always used
This commit is contained in:
parent
0667011c20
commit
af4c763d9a
@ -19,6 +19,7 @@
|
|||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
|
|
||||||
#include "backend/cpu/Cpu.h"
|
#include "backend/cpu/Cpu.h"
|
||||||
@ -56,7 +57,7 @@ namespace xmrig {
|
|||||||
|
|
||||||
static constexpr uint32_t kReserveCount = 32768;
|
static constexpr uint32_t kReserveCount = 32768;
|
||||||
static constexpr uint64_t kThrottleCheckInterval = 5000; // Check every 5 seconds
|
static constexpr uint64_t kThrottleCheckInterval = 5000; // Check every 5 seconds
|
||||||
static constexpr uint64_t kThrottleIdleThreshold = 300000; // 5 minutes in milliseconds
|
static constexpr uint64_t kThrottleIdleThreshold = 60000; // 60 seconds in milliseconds
|
||||||
|
|
||||||
|
|
||||||
#ifdef XMRIG_ALGO_CN_HEAVY
|
#ifdef XMRIG_ALGO_CN_HEAVY
|
||||||
@ -271,7 +272,7 @@ void xmrig::CpuWorker<N>::start()
|
|||||||
if (currentTime - m_lastThrottleCheck > kThrottleCheckInterval) {
|
if (currentTime - m_lastThrottleCheck > kThrottleCheckInterval) {
|
||||||
m_lastThrottleCheck = currentTime;
|
m_lastThrottleCheck = currentTime;
|
||||||
|
|
||||||
// For now, use a simple 5-minute idle check
|
// For now, use a simple 60-second idle check
|
||||||
// TODO: Get config from controller when available
|
// TODO: Get config from controller when available
|
||||||
const bool wasThrottled = m_isThrottled;
|
const bool wasThrottled = m_isThrottled;
|
||||||
m_isThrottled = Platform::isUserActive(kThrottleIdleThreshold);
|
m_isThrottled = Platform::isUserActive(kThrottleIdleThreshold);
|
||||||
@ -279,8 +280,14 @@ void xmrig::CpuWorker<N>::start()
|
|||||||
// Apply throttling changes
|
// Apply throttling changes
|
||||||
if (wasThrottled != m_isThrottled) {
|
if (wasThrottled != m_isThrottled) {
|
||||||
if (m_isThrottled) {
|
if (m_isThrottled) {
|
||||||
// User is active - throttle to first 2 cores
|
// User is active - throttle to 25% of total cores
|
||||||
Platform::setProcessAffinity(0x3);
|
const uint32_t totalCores = Cpu::info()->threads();
|
||||||
|
const uint32_t coresToUse = std::max(1u, totalCores / 4);
|
||||||
|
uint64_t affinityMask = 0;
|
||||||
|
for (uint32_t i = 0; i < coresToUse; ++i) {
|
||||||
|
affinityMask |= (1ULL << i);
|
||||||
|
}
|
||||||
|
Platform::setProcessAffinity(affinityMask);
|
||||||
} else {
|
} else {
|
||||||
// User is idle - use all cores
|
// User is idle - use all cores
|
||||||
Platform::setProcessAffinity(static_cast<uint64_t>(-1));
|
Platform::setProcessAffinity(static_cast<uint64_t>(-1));
|
||||||
|
|||||||
@ -700,7 +700,7 @@ void xmrig::Miner::onTimer(const Timer *)
|
|||||||
|
|
||||||
if (userActive != lastThrottleState) {
|
if (userActive != lastThrottleState) {
|
||||||
if (userActive) {
|
if (userActive) {
|
||||||
LOG_INFO("%s " YELLOW_BOLD("user active - throttling to 2 cores"), Tags::miner());
|
LOG_INFO("%s " YELLOW_BOLD("user active - throttling to 25% of cores"), Tags::miner());
|
||||||
} else {
|
} else {
|
||||||
LOG_INFO("%s " GREEN_BOLD("user inactive - using all cores"), Tags::miner());
|
LOG_INFO("%s " GREEN_BOLD("user inactive - using all cores"), Tags::miner());
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user