From 9df9275120cd4b6133fa8c9882bfce2881d40973 Mon Sep 17 00:00:00 2001 From: XMRig Date: Sat, 27 Jul 2019 21:31:11 +0700 Subject: [PATCH] Return correct hugePages count if NUMA mode used. --- src/backend/cpu/CpuBackend.cpp | 9 +++------ src/crypto/rx/Rx.cpp | 23 +++++++++++++++++++++-- src/crypto/rx/Rx.h | 2 ++ src/crypto/rx/RxDataset.cpp | 2 +- 4 files changed, 27 insertions(+), 9 deletions(-) diff --git a/src/backend/cpu/CpuBackend.cpp b/src/backend/cpu/CpuBackend.cpp index 539ab1f1..3ab06b46 100644 --- a/src/backend/cpu/CpuBackend.cpp +++ b/src/backend/cpu/CpuBackend.cpp @@ -295,12 +295,9 @@ rapidjson::Value xmrig::CpuBackend::toJSON(rapidjson::Document &doc) const # ifdef XMRIG_ALGO_RANDOMX if (d_ptr->algo.family() == Algorithm::RANDOM_X) { - RxDataset *dataset = Rx::dataset(0); // FIXME - if (dataset) { - const auto rxPages = dataset->hugePages(); - pages[0] += rxPages.first; - pages[1] += rxPages.second; - } + const auto rxPages = Rx::hugePages(); + pages[0] += rxPages.first; + pages[1] += rxPages.second; } # endif diff --git a/src/crypto/rx/Rx.cpp b/src/crypto/rx/Rx.cpp index 94d1f30b..cc89fe34 100644 --- a/src/crypto/rx/Rx.cpp +++ b/src/crypto/rx/Rx.cpp @@ -146,7 +146,6 @@ static RxPrivate *d_ptr = new RxPrivate(); } // namespace xmrig - bool xmrig::Rx::isReady(const Job &job, uint32_t nodeId) { d_ptr->lock(); @@ -157,7 +156,6 @@ bool xmrig::Rx::isReady(const Job &job, uint32_t nodeId) } - xmrig::RxDataset *xmrig::Rx::dataset(uint32_t nodeId) { d_ptr->lock(); @@ -168,6 +166,27 @@ xmrig::RxDataset *xmrig::Rx::dataset(uint32_t nodeId) } +std::pair xmrig::Rx::hugePages() +{ + std::pair pages(0, 0); + d_ptr->lock(); + + for (auto const &item : d_ptr->datasets) { + if (!item.second) { + continue; + } + + const auto p = item.second->hugePages(); + pages.first += p.first; + pages.second += p.second; + } + + d_ptr->unlock(); + + return pages; +} + + void xmrig::Rx::init(const Job &job, int initThreads, bool hugePages, bool numa) { if (job.algorithm().family() != Algorithm::RANDOM_X) { diff --git a/src/crypto/rx/Rx.h b/src/crypto/rx/Rx.h index 815c8690..43e4be1c 100644 --- a/src/crypto/rx/Rx.h +++ b/src/crypto/rx/Rx.h @@ -29,6 +29,7 @@ #include +#include namespace xmrig @@ -45,6 +46,7 @@ class Rx public: static bool isReady(const Job &job, uint32_t nodeId); static RxDataset *dataset(uint32_t nodeId); + static std::pair hugePages(); static void init(const Job &job, int initThreads, bool hugePages, bool numa); static void stop(); diff --git a/src/crypto/rx/RxDataset.cpp b/src/crypto/rx/RxDataset.cpp index 603cf578..617b9200 100644 --- a/src/crypto/rx/RxDataset.cpp +++ b/src/crypto/rx/RxDataset.cpp @@ -112,7 +112,7 @@ bool xmrig::RxDataset::isReady(const void *seed, const Algorithm &algorithm) con std::pair xmrig::RxDataset::hugePages() const { - constexpr size_t twoMiB = 2u * 1024u * 1024u; + constexpr size_t twoMiB = 2u * 1024u * 1024u; constexpr const size_t total = (VirtualMemory::align(size(), twoMiB) + VirtualMemory::align(RxCache::size(), twoMiB)) / twoMiB; size_t count = 0;