mirror of
https://github.com/xmrig/xmrig.git
synced 2025-12-14 02:22:50 -05:00
Compare commits
7 Commits
v6.19.2
...
1f45acd576
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1f45acd576 | ||
|
|
7b51e23aa0 | ||
|
|
7f7fc363e1 | ||
|
|
c4e1363148 | ||
|
|
a2e9b3456d | ||
|
|
4790318685 | ||
|
|
df031be628 |
45
Dockerfile
Normal file
45
Dockerfile
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
# Build in disposable container so run-time container is small
|
||||||
|
FROM alpine:latest as build
|
||||||
|
|
||||||
|
# Build from master by default but allow build time specification
|
||||||
|
ARG ref=master
|
||||||
|
ENV my_ref=$ref
|
||||||
|
|
||||||
|
# Developers may wish to specify an alternate repository for source
|
||||||
|
ARG repo=https://github.com/xmrig/xmrig.git
|
||||||
|
ENV my_repo=$repo
|
||||||
|
|
||||||
|
RUN set -ex && \
|
||||||
|
# testing required for hwloc
|
||||||
|
echo @testing http://nl.alpinelinux.org/alpine/edge/testing >> /etc/apk/repositories
|
||||||
|
|
||||||
|
RUN set -ex && \
|
||||||
|
apk --no-cache --update add \
|
||||||
|
coreutils file grep openssl tar binutils \
|
||||||
|
cmake g++ git linux-headers libpthread-stubs make hwloc-dev@testing \
|
||||||
|
libuv-dev openssl-dev
|
||||||
|
|
||||||
|
WORKDIR /usr/local/src
|
||||||
|
|
||||||
|
RUN set -ex && \
|
||||||
|
git clone $my_repo xmrig && \
|
||||||
|
cd xmrig && git checkout $my_ref && \
|
||||||
|
cmake -B build && \
|
||||||
|
cd build && \
|
||||||
|
make
|
||||||
|
|
||||||
|
# runtime container
|
||||||
|
FROM alpine:latest
|
||||||
|
|
||||||
|
RUN set -ex && \
|
||||||
|
# testing required for hwloc
|
||||||
|
echo @testing http://nl.alpinelinux.org/alpine/edge/testing >> /etc/apk/repositories
|
||||||
|
|
||||||
|
RUN set -ex && \
|
||||||
|
apk --no-cache --update add \
|
||||||
|
# required libraries packages
|
||||||
|
openssl libuv hwloc@testing
|
||||||
|
|
||||||
|
COPY --from=build /usr/local/src/xmrig/build/xmrig /bin/
|
||||||
|
|
||||||
|
ENTRYPOINT ["/bin/xmrig"]
|
||||||
@@ -298,8 +298,10 @@ void xmrig::HwlocCpuInfo::processTopLevelCache(hwloc_obj_t cache, const Algorith
|
|||||||
cores.reserve(m_cores);
|
cores.reserve(m_cores);
|
||||||
findByType(cache, HWLOC_OBJ_CORE, [&cores](hwloc_obj_t found) { cores.emplace_back(found); });
|
findByType(cache, HWLOC_OBJ_CORE, [&cores](hwloc_obj_t found) { cores.emplace_back(found); });
|
||||||
|
|
||||||
|
const bool L3_exclusive = isCacheExclusive(cache);
|
||||||
|
|
||||||
# ifdef XMRIG_ALGO_GHOSTRIDER
|
# ifdef XMRIG_ALGO_GHOSTRIDER
|
||||||
if ((algorithm == Algorithm::GHOSTRIDER_RTM) && (PUs > cores.size()) && (PUs < cores.size() * 2)) {
|
if ((algorithm == Algorithm::GHOSTRIDER_RTM) && L3_exclusive && (PUs > cores.size()) && (PUs < cores.size() * 2)) {
|
||||||
// Don't use E-cores on Alder Lake
|
// Don't use E-cores on Alder Lake
|
||||||
cores.erase(std::remove_if(cores.begin(), cores.end(), [](hwloc_obj_t c) { return hwloc_bitmap_weight(c->cpuset) == 1; }), cores.end());
|
cores.erase(std::remove_if(cores.begin(), cores.end(), [](hwloc_obj_t c) { return hwloc_bitmap_weight(c->cpuset) == 1; }), cores.end());
|
||||||
|
|
||||||
@@ -311,7 +313,6 @@ void xmrig::HwlocCpuInfo::processTopLevelCache(hwloc_obj_t cache, const Algorith
|
|||||||
# endif
|
# endif
|
||||||
|
|
||||||
size_t L3 = cache->attr->cache.size;
|
size_t L3 = cache->attr->cache.size;
|
||||||
const bool L3_exclusive = isCacheExclusive(cache);
|
|
||||||
size_t L2 = 0;
|
size_t L2 = 0;
|
||||||
int L2_associativity = 0;
|
int L2_associativity = 0;
|
||||||
size_t extra = 0;
|
size_t extra = 0;
|
||||||
@@ -349,6 +350,10 @@ void xmrig::HwlocCpuInfo::processTopLevelCache(hwloc_obj_t cache, const Algorith
|
|||||||
}
|
}
|
||||||
|
|
||||||
# ifdef XMRIG_ALGO_RANDOMX
|
# ifdef XMRIG_ALGO_RANDOMX
|
||||||
|
if ((algorithm.family() == Algorithm::RANDOM_X) && L3_exclusive && (PUs > cores.size()) && (PUs < cores.size() * 2)) {
|
||||||
|
// Use all L3+L2 on latest Intel CPUs with P-cores, E-cores and exclusive L3 cache
|
||||||
|
cacheHashes = (L3 + L2) / scratchpad;
|
||||||
|
}
|
||||||
if (extra == 0 && algorithm.l2() > 0) {
|
if (extra == 0 && algorithm.l2() > 0) {
|
||||||
cacheHashes = std::min<size_t>(std::max<size_t>(L2 / algorithm.l2(), cores.size()), cacheHashes);
|
cacheHashes = std::min<size_t>(std::max<size_t>(L2 / algorithm.l2(), cores.size()), cacheHashes);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,8 +7,8 @@
|
|||||||
* Copyright 2017-2019 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
* Copyright 2017-2019 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
||||||
* Copyright 2018 Lee Clagett <https://github.com/vtnerd>
|
* Copyright 2018 Lee Clagett <https://github.com/vtnerd>
|
||||||
* Copyright 2018-2019 tevador <tevador@gmail.com>
|
* Copyright 2018-2019 tevador <tevador@gmail.com>
|
||||||
* Copyright 2018-2020 SChernykh <https://github.com/SChernykh>
|
* Copyright 2018-2023 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright 2016-2019 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
* Copyright 2016-2023 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@@ -28,7 +28,7 @@
|
|||||||
#define XMRIG_KP_HASH_H
|
#define XMRIG_KP_HASH_H
|
||||||
|
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <cstdint>
|
||||||
|
|
||||||
|
|
||||||
namespace xmrig
|
namespace xmrig
|
||||||
@@ -52,7 +52,7 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} /* namespace xmrig */
|
} // namespace xmrig
|
||||||
|
|
||||||
|
|
||||||
#endif /* XMRIG_KP_HASH_H */
|
#endif // XMRIG_KP_HASH_H
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/* XMRig
|
/* XMRig
|
||||||
* Copyright (c) 2019 Howard Chu <https://github.com/hyc>
|
* Copyright (c) 2019 Howard Chu <https://github.com/hyc>
|
||||||
* Copyright (c) 2018-2021 SChernykh <https://github.com/SChernykh>
|
* Copyright (c) 2018-2023 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright (c) 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
* Copyright (c) 2016-2023 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@@ -292,8 +292,7 @@ void xmrig::Network::setJob(IClient *client, const Job &job, bool donate)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!donate && m_donate) {
|
if (!donate && m_donate) {
|
||||||
m_donate->setAlgo(job.algorithm());
|
static_cast<DonateStrategy *>(m_donate)->update(client, job);
|
||||||
m_donate->setProxy(client->pool().proxy());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
m_controller->miner()->setJob(job, donate);
|
m_controller->miner()->setJob(job, donate);
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/* XMRig
|
/* XMRig
|
||||||
* Copyright (c) 2019 Howard Chu <https://github.com/hyc>
|
* Copyright (c) 2019 Howard Chu <https://github.com/hyc>
|
||||||
* Copyright (c) 2018-2021 SChernykh <https://github.com/SChernykh>
|
* Copyright (c) 2018-2023 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright (c) 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
* Copyright (c) 2016-2023 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@@ -89,7 +89,7 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} /* namespace xmrig */
|
} // namespace xmrig
|
||||||
|
|
||||||
|
|
||||||
#endif /* XMRIG_NETWORK_H */
|
#endif // XMRIG_NETWORK_H
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/* XMRig
|
/* XMRig
|
||||||
* Copyright (c) 2018-2022 SChernykh <https://github.com/SChernykh>
|
* Copyright (c) 2018-2023 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright (c) 2016-2022 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
* Copyright (c) 2016-2023 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@@ -48,7 +48,7 @@ static const char *kDonateHost = "donate.v2.xmrig.com";
|
|||||||
static const char *kDonateHostTls = "donate.ssl.xmrig.com";
|
static const char *kDonateHostTls = "donate.ssl.xmrig.com";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
} /* namespace xmrig */
|
} // namespace xmrig
|
||||||
|
|
||||||
|
|
||||||
xmrig::DonateStrategy::DonateStrategy(Controller *controller, IStrategyListener *listener) :
|
xmrig::DonateStrategy::DonateStrategy(Controller *controller, IStrategyListener *listener) :
|
||||||
@@ -98,6 +98,17 @@ xmrig::DonateStrategy::~DonateStrategy()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void xmrig::DonateStrategy::update(IClient *client, const Job &job)
|
||||||
|
{
|
||||||
|
setAlgo(job.algorithm());
|
||||||
|
setProxy(client->pool().proxy());
|
||||||
|
|
||||||
|
m_diff = job.diff();
|
||||||
|
m_height = job.height();
|
||||||
|
m_seed = job.seed();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int64_t xmrig::DonateStrategy::submit(const JobResult &result)
|
int64_t xmrig::DonateStrategy::submit(const JobResult &result)
|
||||||
{
|
{
|
||||||
return m_proxy ? m_proxy->submit(result) : m_strategy->submit(result);
|
return m_proxy ? m_proxy->submit(result) : m_strategy->submit(result);
|
||||||
@@ -199,13 +210,13 @@ void xmrig::DonateStrategy::onLogin(IClient *, rapidjson::Document &doc, rapidjs
|
|||||||
params.AddMember("url", m_pools[0].url().toJSON(), allocator);
|
params.AddMember("url", m_pools[0].url().toJSON(), allocator);
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
setAlgorithms(doc, params);
|
setParams(doc, params);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void xmrig::DonateStrategy::onLogin(IStrategy *, IClient *, rapidjson::Document &doc, rapidjson::Value ¶ms)
|
void xmrig::DonateStrategy::onLogin(IStrategy *, IClient *, rapidjson::Document &doc, rapidjson::Value ¶ms)
|
||||||
{
|
{
|
||||||
setAlgorithms(doc, params);
|
setParams(doc, params);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -270,12 +281,20 @@ void xmrig::DonateStrategy::idle(double min, double max)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void xmrig::DonateStrategy::setAlgorithms(rapidjson::Document &doc, rapidjson::Value ¶ms)
|
void xmrig::DonateStrategy::setJob(IClient *client, const Job &job, const rapidjson::Value ¶ms)
|
||||||
|
{
|
||||||
|
if (isActive()) {
|
||||||
|
m_listener->onJob(this, client, job, params);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void xmrig::DonateStrategy::setParams(rapidjson::Document &doc, rapidjson::Value ¶ms)
|
||||||
{
|
{
|
||||||
using namespace rapidjson;
|
using namespace rapidjson;
|
||||||
auto &allocator = doc.GetAllocator();
|
auto &allocator = doc.GetAllocator();
|
||||||
|
auto algorithms = m_controller->miner()->algorithms();
|
||||||
|
|
||||||
Algorithms algorithms = m_controller->miner()->algorithms();
|
|
||||||
const size_t index = static_cast<size_t>(std::distance(algorithms.begin(), std::find(algorithms.begin(), algorithms.end(), m_algorithm)));
|
const size_t index = static_cast<size_t>(std::distance(algorithms.begin(), std::find(algorithms.begin(), algorithms.end(), m_algorithm)));
|
||||||
if (index > 0 && index < algorithms.size()) {
|
if (index > 0 && index < algorithms.size()) {
|
||||||
std::swap(algorithms[0], algorithms[index]);
|
std::swap(algorithms[0], algorithms[index]);
|
||||||
@@ -288,13 +307,11 @@ void xmrig::DonateStrategy::setAlgorithms(rapidjson::Document &doc, rapidjson::V
|
|||||||
}
|
}
|
||||||
|
|
||||||
params.AddMember("algo", algo, allocator);
|
params.AddMember("algo", algo, allocator);
|
||||||
}
|
params.AddMember("diff", m_diff, allocator);
|
||||||
|
params.AddMember("height", m_height, allocator);
|
||||||
|
|
||||||
|
if (!m_seed.empty()) {
|
||||||
void xmrig::DonateStrategy::setJob(IClient *client, const Job &job, const rapidjson::Value ¶ms)
|
params.AddMember("seed_hash", Cvt::toHex(m_seed, doc), allocator);
|
||||||
{
|
|
||||||
if (isActive()) {
|
|
||||||
m_listener->onJob(this, client, job, params);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/* XMRig
|
/* XMRig
|
||||||
* Copyright (c) 2018-2022 SChernykh <https://github.com/SChernykh>
|
* Copyright (c) 2018-2023 SChernykh <https://github.com/SChernykh>
|
||||||
* Copyright (c) 2016-2022 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
* Copyright (c) 2016-2023 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@@ -20,15 +20,12 @@
|
|||||||
#define XMRIG_DONATESTRATEGY_H
|
#define XMRIG_DONATESTRATEGY_H
|
||||||
|
|
||||||
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
|
|
||||||
#include "base/kernel/interfaces/IClientListener.h"
|
#include "base/kernel/interfaces/IClientListener.h"
|
||||||
#include "base/kernel/interfaces/IStrategy.h"
|
#include "base/kernel/interfaces/IStrategy.h"
|
||||||
#include "base/kernel/interfaces/IStrategyListener.h"
|
#include "base/kernel/interfaces/IStrategyListener.h"
|
||||||
#include "base/kernel/interfaces/ITimerListener.h"
|
#include "base/kernel/interfaces/ITimerListener.h"
|
||||||
#include "base/net/stratum/Pool.h"
|
#include "base/net/stratum/Pool.h"
|
||||||
#include "base/tools/Object.h"
|
#include "base/tools/Buffer.h"
|
||||||
|
|
||||||
|
|
||||||
namespace xmrig {
|
namespace xmrig {
|
||||||
@@ -36,7 +33,6 @@ namespace xmrig {
|
|||||||
|
|
||||||
class Client;
|
class Client;
|
||||||
class Controller;
|
class Controller;
|
||||||
class IStrategyListener;
|
|
||||||
|
|
||||||
|
|
||||||
class DonateStrategy : public IStrategy, public IStrategyListener, public ITimerListener, public IClientListener
|
class DonateStrategy : public IStrategy, public IStrategyListener, public ITimerListener, public IClientListener
|
||||||
@@ -47,6 +43,8 @@ public:
|
|||||||
DonateStrategy(Controller *controller, IStrategyListener *listener);
|
DonateStrategy(Controller *controller, IStrategyListener *listener);
|
||||||
~DonateStrategy() override;
|
~DonateStrategy() override;
|
||||||
|
|
||||||
|
void update(IClient *client, const Job &job);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
inline bool isActive() const override { return state() == STATE_ACTIVE; }
|
inline bool isActive() const override { return state() == STATE_ACTIVE; }
|
||||||
inline IClient *client() const override { return m_proxy ? m_proxy : m_strategy->client(); }
|
inline IClient *client() const override { return m_proxy ? m_proxy : m_strategy->client(); }
|
||||||
@@ -88,13 +86,14 @@ private:
|
|||||||
|
|
||||||
IClient *createProxy();
|
IClient *createProxy();
|
||||||
void idle(double min, double max);
|
void idle(double min, double max);
|
||||||
void setAlgorithms(rapidjson::Document &doc, rapidjson::Value ¶ms);
|
|
||||||
void setJob(IClient *client, const Job &job, const rapidjson::Value ¶ms);
|
void setJob(IClient *client, const Job &job, const rapidjson::Value ¶ms);
|
||||||
|
void setParams(rapidjson::Document &doc, rapidjson::Value ¶ms);
|
||||||
void setResult(IClient *client, const SubmitResult &result, const char *error);
|
void setResult(IClient *client, const SubmitResult &result, const char *error);
|
||||||
void setState(State state);
|
void setState(State state);
|
||||||
|
|
||||||
Algorithm m_algorithm;
|
Algorithm m_algorithm;
|
||||||
bool m_tls = false;
|
bool m_tls = false;
|
||||||
|
Buffer m_seed;
|
||||||
char m_userId[65] = { 0 };
|
char m_userId[65] = { 0 };
|
||||||
const uint64_t m_donateTime;
|
const uint64_t m_donateTime;
|
||||||
const uint64_t m_idleTime;
|
const uint64_t m_idleTime;
|
||||||
@@ -105,12 +104,14 @@ private:
|
|||||||
State m_state = STATE_NEW;
|
State m_state = STATE_NEW;
|
||||||
std::vector<Pool> m_pools;
|
std::vector<Pool> m_pools;
|
||||||
Timer *m_timer = nullptr;
|
Timer *m_timer = nullptr;
|
||||||
|
uint64_t m_diff = 0;
|
||||||
|
uint64_t m_height = 0;
|
||||||
uint64_t m_now = 0;
|
uint64_t m_now = 0;
|
||||||
uint64_t m_timestamp = 0;
|
uint64_t m_timestamp = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} /* namespace xmrig */
|
} // namespace xmrig
|
||||||
|
|
||||||
|
|
||||||
#endif /* XMRIG_DONATESTRATEGY_H */
|
#endif // XMRIG_DONATESTRATEGY_H
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
#define APP_ID "xmrig"
|
#define APP_ID "xmrig"
|
||||||
#define APP_NAME "XMRig"
|
#define APP_NAME "XMRig"
|
||||||
#define APP_DESC "XMRig miner"
|
#define APP_DESC "XMRig miner"
|
||||||
#define APP_VERSION "6.19.2"
|
#define APP_VERSION "6.19.3-dev"
|
||||||
#define APP_DOMAIN "xmrig.com"
|
#define APP_DOMAIN "xmrig.com"
|
||||||
#define APP_SITE "www.xmrig.com"
|
#define APP_SITE "www.xmrig.com"
|
||||||
#define APP_COPYRIGHT "Copyright (C) 2016-2023 xmrig.com"
|
#define APP_COPYRIGHT "Copyright (C) 2016-2023 xmrig.com"
|
||||||
@@ -30,7 +30,7 @@
|
|||||||
|
|
||||||
#define APP_VER_MAJOR 6
|
#define APP_VER_MAJOR 6
|
||||||
#define APP_VER_MINOR 19
|
#define APP_VER_MINOR 19
|
||||||
#define APP_VER_PATCH 2
|
#define APP_VER_PATCH 3
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
# if (_MSC_VER >= 1930)
|
# if (_MSC_VER >= 1930)
|
||||||
|
|||||||
Reference in New Issue
Block a user