Cleanup MoneroOcean patchset

This commit is contained in:
Tony Butler 2020-06-08 15:02:38 -06:00 committed by MoneroOcean
parent 42235a56da
commit 30fdc92884
28 changed files with 6138 additions and 6122 deletions

View file

@ -26,9 +26,10 @@
#include "net/Network.h"
#include "rapidjson/document.h"
#include "backend/common/interfaces/IBackend.h"
#include "backend/common/Hashrate.h"
#include <chrono>
namespace xmrig {
namespace xmrig {
Benchmark::Benchmark() : m_controller(nullptr), m_isNewBenchRun(true) {
for (BenchAlgo bench_algo = static_cast<BenchAlgo>(0); bench_algo != BenchAlgo::MAX; bench_algo = static_cast<BenchAlgo>(bench_algo + 1)) {
@ -59,6 +60,7 @@ void Benchmark::finish() {
}
m_bench_algo = BenchAlgo::INVALID;
m_controller->miner()->pause(); // do not compute anything before job from the pool
JobResults::stop();
JobResults::setListener(m_controller->network(), m_controller->config()->cpu().isHwAES());
m_controller->start();
}
@ -104,33 +106,39 @@ void Benchmark::read(const rapidjson::Value &value)
}
}
float Benchmark::get_algo_perf(Algorithm::Id algo) const {
double Benchmark::get_algo_perf(Algorithm::Id algo) const {
switch (algo) {
case Algorithm::CN_0: return m_bench_algo_perf[BenchAlgo::CN_R];
case Algorithm::CN_CCX: return m_bench_algo_perf[BenchAlgo::CN_CCX];
case Algorithm::CN_0: return m_bench_algo_perf[BenchAlgo::CN_CCX] / 2;
case Algorithm::CN_1: return m_bench_algo_perf[BenchAlgo::CN_R];
case Algorithm::CN_2: return m_bench_algo_perf[BenchAlgo::CN_R];
case Algorithm::CN_R: return m_bench_algo_perf[BenchAlgo::CN_R];
case Algorithm::CN_RTO: return m_bench_algo_perf[BenchAlgo::CN_R];
case Algorithm::CN_XAO: return m_bench_algo_perf[BenchAlgo::CN_R];
case Algorithm::CN_FAST: return m_bench_algo_perf[BenchAlgo::CN_R] * 2;
case Algorithm::CN_HALF: return m_bench_algo_perf[BenchAlgo::CN_R] * 2;
case Algorithm::CN_XAO: return m_bench_algo_perf[BenchAlgo::CN_R];
case Algorithm::CN_RTO: return m_bench_algo_perf[BenchAlgo::CN_R];
case Algorithm::CN_RWZ: return m_bench_algo_perf[BenchAlgo::CN_R] / 3 * 4;
case Algorithm::CN_ZLS: return m_bench_algo_perf[BenchAlgo::CN_R] / 3 * 4;
case Algorithm::CN_DOUBLE: return m_bench_algo_perf[BenchAlgo::CN_R] / 2;
case Algorithm::CN_GPU: return m_bench_algo_perf[BenchAlgo::CN_GPU];
case Algorithm::CN_LITE_0: return m_bench_algo_perf[BenchAlgo::CN_LITE_1];
case Algorithm::CN_LITE_1: return m_bench_algo_perf[BenchAlgo::CN_LITE_1];
case Algorithm::CN_HEAVY_0: return m_bench_algo_perf[BenchAlgo::CN_HEAVY_TUBE];
case Algorithm::CN_HEAVY_TUBE: return m_bench_algo_perf[BenchAlgo::CN_HEAVY_TUBE];
case Algorithm::CN_HEAVY_XHV: return m_bench_algo_perf[BenchAlgo::CN_HEAVY_TUBE];
case Algorithm::CN_PICO_0: return m_bench_algo_perf[BenchAlgo::CN_PICO_0];
case Algorithm::RX_LOKI: return m_bench_algo_perf[BenchAlgo::RX_0];
case Algorithm::RX_WOW: return m_bench_algo_perf[BenchAlgo::RX_WOW];
case Algorithm::RX_0: return m_bench_algo_perf[BenchAlgo::RX_0];
case Algorithm::DEFYX: return m_bench_algo_perf[BenchAlgo::DEFYX];
case Algorithm::RX_ARQ: return m_bench_algo_perf[BenchAlgo::RX_ARQ];
case Algorithm::CN_PICO_TLO: return m_bench_algo_perf[BenchAlgo::CN_PICO_0];
case Algorithm::CN_GPU: return m_bench_algo_perf[BenchAlgo::CN_GPU];
case Algorithm::AR2_CHUKWA: return m_bench_algo_perf[BenchAlgo::AR2_CHUKWA];
case Algorithm::AR2_WRKZ: return m_bench_algo_perf[BenchAlgo::AR2_WRKZ];
case Algorithm::ASTROBWT_DERO: return m_bench_algo_perf[BenchAlgo::ASTROBWT_DERO];
case Algorithm::KAWPOW_RVN: return m_bench_algo_perf[BenchAlgo::KAWPOW_RVN];
case Algorithm::RX_0: return m_bench_algo_perf[BenchAlgo::RX_0];
case Algorithm::RX_LOKI: return m_bench_algo_perf[BenchAlgo::RX_0];
case Algorithm::RX_SFX: return m_bench_algo_perf[BenchAlgo::RX_0];
case Algorithm::RX_WOW: return m_bench_algo_perf[BenchAlgo::RX_WOW];
case Algorithm::RX_ARQ: return m_bench_algo_perf[BenchAlgo::RX_ARQ];
case Algorithm::RX_KEVA: return m_bench_algo_perf[BenchAlgo::RX_KEVA];
case Algorithm::RX_DEFYX: return m_bench_algo_perf[BenchAlgo::RX_DEFYX];
default: return 0.0f;
}
}
@ -189,9 +197,23 @@ void Benchmark::onJobResult(const JobResult& result) {
LOG_ALERT(" ===> Starting benchmark of %s algo", Algorithm(ba2a[m_bench_algo]).shortName());
m_bench_start = now; // time of measurements start (in ms)
} else if (now - m_bench_start > static_cast<unsigned>(m_controller->config()->benchAlgoTime()*1000)) { // end of benchmark round for m_bench_algo
const float hashrate = static_cast<float>(m_hash_count) * result.diff / (now - m_bench_start) * 1000.0f;
double t[3] = { 0.0 };
for (auto backend : m_controller->miner()->backends()) {
const Hashrate *hr = backend->hashrate();
if (!hr) {
continue;
}
t[0] += hr->calc(Hashrate::ShortInterval);
t[1] += hr->calc(Hashrate::MediumInterval);
t[2] += hr->calc(Hashrate::LargeInterval);
}
double hashrate = 0.0f;
if (!(hashrate = t[2]))
if (!(hashrate = t[1]))
if (!(hashrate = t[0]))
hashrate = static_cast<double>(m_hash_count) * result.diff / (now - m_bench_start) * 1000.0f;
m_bench_algo_perf[m_bench_algo] = hashrate; // store hashrate result
LOG_ALERT(" ===> %s hasrate: %f", Algorithm(ba2a[m_bench_algo]).shortName(), hashrate);
LOG_ALERT(" ===> %s hashrate: %f", Algorithm(ba2a[m_bench_algo]).shortName(), hashrate);
run_next_bench_algo(m_bench_algo);
}
}
@ -201,4 +223,4 @@ uint64_t Benchmark::get_now() const { // get current time in ms
return time_point_cast<milliseconds>(high_resolution_clock::now()).time_since_epoch().count();
}
} // namespace xmrig
} // namespace xmrig

View file

@ -31,38 +31,46 @@ class Job;
class Benchmark : public IJobResultListener {
enum BenchAlgo : int {
AR2_CHUKWA, // "argon2/chukwa"
RX_0, // "rx/0" RandomX (Monero).
RX_WOW, // "rx/wow" RandomWOW (Wownero).
DEFYX, // "defyx DefyX.
RX_ARQ, // "rx/arq" RandomARQ (Arqma).
CN_R, // "cn/r" CryptoNightR (Monero's variant 4).
CN_GPU, // "cn/gpu" CryptoNight-GPU (Ryo).
CN_LITE_1, // "cn-lite/1" CryptoNight-Lite variant 1.
CN_HEAVY_TUBE, // "cn-heavy/tube" CryptoNight-Heavy (modified, TUBE only).
CN_PICO_0, // "cn-pico" CryptoNight Turtle (TRTL)
ASTROBWT_DERO, // "astrobwt" AstroBWT (Dero)
CN_PICO_0, // "cn-pico" CryptoNight-Pico.
CN_CCX, // "cn/ccx" Conceal (CCX).
CN_GPU, // "cn/gpu" CryptoNight-GPU (Ryo).
AR2_CHUKWA, // "argon2/chukwa" Argon2id (Chukwa).
AR2_WRKZ, // "argon2/wrkz" Argon2id (WRKZ).
ASTROBWT_DERO, // "astrobwt" AstroBWT (Dero).
KAWPOW_RVN, // "kawpow/rvn" KawPow (RVN).
RX_0, // "rx/0" RandomX (Monero).
RX_WOW, // "rx/wow" RandomWOW (Wownero).
RX_ARQ, // "rx/arq" RandomARQ (Arqma).
RX_KEVA, // "rx/keva" RandomKEVA (Keva).
RX_DEFYX, // "defyx DefyX.
MAX,
MIN = 0,
INVALID = -1,
};
const Algorithm::Id ba2a[BenchAlgo::MAX] = {
Algorithm::AR2_CHUKWA,
Algorithm::RX_0,
Algorithm::RX_WOW,
Algorithm::DEFYX,
Algorithm::RX_ARQ,
Algorithm::CN_R,
Algorithm::CN_GPU,
Algorithm::CN_LITE_1,
Algorithm::CN_HEAVY_TUBE,
Algorithm::CN_PICO_0,
Algorithm::CN_CCX,
Algorithm::CN_GPU,
Algorithm::AR2_CHUKWA,
Algorithm::AR2_WRKZ,
Algorithm::ASTROBWT_DERO,
Algorithm::KAWPOW_RVN,
Algorithm::RX_0,
Algorithm::RX_WOW,
Algorithm::RX_ARQ,
Algorithm::RX_KEVA,
Algorithm::RX_DEFYX,
};
Job* m_bench_job[BenchAlgo::MAX];
float m_bench_algo_perf[BenchAlgo::MAX];
double m_bench_algo_perf[BenchAlgo::MAX];
Controller* m_controller; // to get access to config and network
bool m_isNewBenchRun; // true if benchmark is need to be executed or was executed
@ -74,7 +82,7 @@ class Benchmark : public IJobResultListener {
std::set<uint32_t> m_backends_started; // id of backend started for benchmark
uint64_t get_now() const; // get current time in ms
float get_algo_perf(Algorithm::Id algo) const; // get algo perf based on m_bench_algo_perf
double get_algo_perf(Algorithm::Id algo) const; // get algo perf based on m_bench_algo_perf
void start(const Benchmark::BenchAlgo); // start benchmark for specified perf algo
void finish(); // end of benchmarks, switch to jobs from the pool (network), fill algo_perf
void onJobResult(const JobResult&) override; // onJobResult is called after each computed benchmark hash
@ -89,7 +97,7 @@ class Benchmark : public IJobResultListener {
void start(); // start benchmarks
bool isNewBenchRun() const { return m_isNewBenchRun; }
float algo_perf[Algorithm::MAX];
double algo_perf[Algorithm::MAX];
rapidjson::Value toJSON(rapidjson::Document &doc) const;
void read(const rapidjson::Value &value);

View file

@ -59,15 +59,20 @@ int xmrig::Controller::init()
return 0;
}
#ifdef XMRIG_FEATURE_BENCHMARK
void xmrig::Controller::pre_start()
{
m_miner = new Miner(this);
}
#endif
void xmrig::Controller::start()
{
Base::start();
#ifndef XMRIG_FEATURE_BENCHMARK
m_miner = new Miner(this);
#endif
network()->connect();
}

View file

@ -47,7 +47,9 @@ public:
~Controller() override;
int init() override;
# ifdef XMRIG_FEATURE_BENCHMARK
void pre_start();
# endif
void start() override;
void stop() override;

View file

@ -166,7 +166,13 @@ bool xmrig::Config::isShouldSave() const
}
# endif
return (m_upgrade || cpu().isShouldSave() || m_benchmark.isNewBenchRun());
# ifdef XMRIG_FEATURE_BENCHMARK
if (m_benchmark.isNewBenchRun()) {
return true;
}
# endif
return (m_upgrade || cpu().isShouldSave());
}
@ -177,7 +183,6 @@ bool xmrig::Config::read(const IJsonReader &reader, const char *fileName)
}
d_ptr->cpu.read(reader.getValue(kCPU));
m_benchmark.read(reader.getValue("algo-perf"));
# ifdef XMRIG_ALGO_RANDOMX
if (!d_ptr->rx.read(reader.getValue(kRandomX))) {
@ -197,6 +202,10 @@ bool xmrig::Config::read(const IJsonReader &reader, const char *fileName)
d_ptr->healthPrintTime = reader.getUint(kHealthPrintTime, d_ptr->healthPrintTime);
# endif
# ifdef XMRIG_FEATURE_BENCHMARK
m_benchmark.read(reader.getValue(kAlgoPerf));
# endif
return true;
}
@ -254,7 +263,9 @@ void xmrig::Config::getJSON(rapidjson::Document &doc) const
doc.AddMember(StringRef(kVerbose), Log::verbose(), allocator);
doc.AddMember(StringRef(kWatch), m_watch, allocator);
doc.AddMember("algo-perf", m_benchmark.toJSON(doc), allocator);
doc.AddMember("rebench-algo", isRebenchAlgo(), allocator);
doc.AddMember("bench-algo-time", benchAlgoTime(), allocator);
# ifdef XMRIG_FEATURE_BENCHMARK
doc.AddMember(StringRef(kRebenchAlgo), isRebenchAlgo(), allocator);
doc.AddMember(StringRef(kBenchAlgoTime), benchAlgoTime(), allocator);
doc.AddMember(StringRef(kAlgoPerf), m_benchmark.toJSON(doc), allocator);
# endif
}

View file

@ -33,7 +33,9 @@
#include "backend/cpu/CpuConfig.h"
#include "base/kernel/config/BaseConfig.h"
#include "base/tools/Object.h"
#ifdef XMRIG_FEATURE_BENCHMARK
#include "core/Benchmark.h"
#endif
namespace xmrig {
@ -59,7 +61,6 @@ public:
# ifdef XMRIG_FEATURE_OPENCL
const OclConfig &cl() const;
# endif
inline Benchmark &benchmark() { return m_benchmark; }
# ifdef XMRIG_FEATURE_CUDA
const CudaConfig &cuda() const;
@ -79,9 +80,15 @@ public:
bool read(const IJsonReader &reader, const char *fileName) override;
void getJSON(rapidjson::Document &doc) const override;
# ifdef XMRIG_FEATURE_BENCHMARK
inline Benchmark &benchmark() { return m_benchmark; }
# endif
private:
ConfigPrivate *d_ptr;
# ifdef XMRIG_FEATURE_BENCHMARK
Benchmark m_benchmark;
# endif
};