RandomX: don't restart mining threads when the seed changes

It helps to not loose huge pages when the seed changes (every 2048 blocks, ~2.8 days).
This commit is contained in:
SChernykh 2021-12-25 13:39:15 +01:00
parent 5747ccfafc
commit 7f2f50a8d9
3 changed files with 11 additions and 3 deletions

View file

@ -134,7 +134,7 @@ void xmrig::CpuWorker<N>::allocateRandomX_VM()
RxDataset *dataset = Rx::dataset(m_job.currentJob(), node()); RxDataset *dataset = Rx::dataset(m_job.currentJob(), node());
while (dataset == nullptr) { while (dataset == nullptr) {
std::this_thread::sleep_for(std::chrono::milliseconds(200)); std::this_thread::sleep_for(std::chrono::milliseconds(20));
if (Nonce::sequence(Nonce::CPU) == 0) { if (Nonce::sequence(Nonce::CPU) == 0) {
return; return;
@ -246,7 +246,7 @@ void xmrig::CpuWorker<N>::start()
while (Nonce::sequence(Nonce::CPU) > 0) { while (Nonce::sequence(Nonce::CPU) > 0) {
if (Nonce::isPaused()) { if (Nonce::isPaused()) {
do { do {
std::this_thread::sleep_for(std::chrono::milliseconds(200)); std::this_thread::sleep_for(std::chrono::milliseconds(20));
} }
while (Nonce::isPaused() && Nonce::sequence(Nonce::CPU) > 0); while (Nonce::isPaused() && Nonce::sequence(Nonce::CPU) > 0);

View file

@ -553,8 +553,14 @@ void xmrig::Miner::setJob(const Job &job, bool donate)
# ifdef XMRIG_ALGO_RANDOMX # ifdef XMRIG_ALGO_RANDOMX
if (job.algorithm().family() == Algorithm::RANDOM_X && !Rx::isReady(job)) { if (job.algorithm().family() == Algorithm::RANDOM_X && !Rx::isReady(job)) {
if (d_ptr->algorithm != job.algorithm()) {
stop(); stop();
} }
else {
Nonce::pause(true);
Nonce::touch();
}
}
# endif # endif
d_ptr->algorithm = job.algorithm(); d_ptr->algorithm = job.algorithm();

View file

@ -154,6 +154,8 @@ void xmrig::RxQueue::backgroundInit()
continue; continue;
} }
// Update seed here again in case there was more than one item in the queue
m_seed = item.seed;
m_state = STATE_IDLE; m_state = STATE_IDLE;
m_async->send(); m_async->send();
} }