mirror of
https://github.com/xmrig/xmrig.git
synced 2024-11-18 10:01:06 +00:00
Added "memory-pool" option.
This commit is contained in:
parent
c4170fbb86
commit
9dce868fb9
5 changed files with 32 additions and 9 deletions
|
@ -36,6 +36,7 @@ static const char *kEnabled = "enabled";
|
||||||
static const char *kHugePages = "huge-pages";
|
static const char *kHugePages = "huge-pages";
|
||||||
static const char *kHwAes = "hw-aes";
|
static const char *kHwAes = "hw-aes";
|
||||||
static const char *kMaxThreadsHint = "max-threads-hint";
|
static const char *kMaxThreadsHint = "max-threads-hint";
|
||||||
|
static const char *kMemoryPool = "memory-pool";
|
||||||
static const char *kPriority = "priority";
|
static const char *kPriority = "priority";
|
||||||
|
|
||||||
#ifdef XMRIG_FEATURE_ASM
|
#ifdef XMRIG_FEATURE_ASM
|
||||||
|
@ -90,6 +91,7 @@ rapidjson::Value xmrig::CpuConfig::toJSON(rapidjson::Document &doc) const
|
||||||
obj.AddMember(StringRef(kHugePages), m_hugePages, allocator);
|
obj.AddMember(StringRef(kHugePages), m_hugePages, allocator);
|
||||||
obj.AddMember(StringRef(kHwAes), m_aes == AES_AUTO ? Value(kNullType) : Value(m_aes == AES_HW), allocator);
|
obj.AddMember(StringRef(kHwAes), m_aes == AES_AUTO ? Value(kNullType) : Value(m_aes == AES_HW), allocator);
|
||||||
obj.AddMember(StringRef(kPriority), priority() != -1 ? Value(priority()) : Value(kNullType), allocator);
|
obj.AddMember(StringRef(kPriority), priority() != -1 ? Value(priority()) : Value(kNullType), allocator);
|
||||||
|
obj.AddMember(StringRef(kMemoryPool), m_memoryPool < 1 ? Value(m_memoryPool < 0) : Value(m_memoryPool), allocator);
|
||||||
|
|
||||||
if (m_threads.isEmpty()) {
|
if (m_threads.isEmpty()) {
|
||||||
obj.AddMember(StringRef(kMaxThreadsHint), m_limit, allocator);
|
obj.AddMember(StringRef(kMaxThreadsHint), m_limit, allocator);
|
||||||
|
@ -109,6 +111,12 @@ rapidjson::Value xmrig::CpuConfig::toJSON(rapidjson::Document &doc) const
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
size_t xmrig::CpuConfig::memPoolSize() const
|
||||||
|
{
|
||||||
|
return m_memoryPool < 0 ? Cpu::info()->threads() : m_memoryPool;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
std::vector<xmrig::CpuLaunchData> xmrig::CpuConfig::get(const Miner *miner, const Algorithm &algorithm) const
|
std::vector<xmrig::CpuLaunchData> xmrig::CpuConfig::get(const Miner *miner, const Algorithm &algorithm) const
|
||||||
{
|
{
|
||||||
std::vector<CpuLaunchData> out;
|
std::vector<CpuLaunchData> out;
|
||||||
|
@ -137,6 +145,7 @@ void xmrig::CpuConfig::read(const rapidjson::Value &value, uint32_t version)
|
||||||
|
|
||||||
setAesMode(Json::getValue(value, kHwAes));
|
setAesMode(Json::getValue(value, kHwAes));
|
||||||
setPriority(Json::getInt(value, kPriority, -1));
|
setPriority(Json::getInt(value, kPriority, -1));
|
||||||
|
setMemoryPool(Json::getValue(value, kMemoryPool));
|
||||||
|
|
||||||
# ifdef XMRIG_FEATURE_ASM
|
# ifdef XMRIG_FEATURE_ASM
|
||||||
m_assembly = Json::getValue(value, kAsm);
|
m_assembly = Json::getValue(value, kAsm);
|
||||||
|
@ -205,12 +214,23 @@ void xmrig::CpuConfig::generateArgon2()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void xmrig::CpuConfig::setAesMode(const rapidjson::Value &aesMode)
|
void xmrig::CpuConfig::setAesMode(const rapidjson::Value &value)
|
||||||
{
|
{
|
||||||
if (aesMode.IsBool()) {
|
if (value.IsBool()) {
|
||||||
m_aes = aesMode.GetBool() ? AES_HW : AES_SOFT;
|
m_aes = value.GetBool() ? AES_HW : AES_SOFT;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
m_aes = AES_AUTO;
|
m_aes = AES_AUTO;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void xmrig::CpuConfig::setMemoryPool(const rapidjson::Value &value)
|
||||||
|
{
|
||||||
|
if (value.IsBool()) {
|
||||||
|
m_memoryPool = value.GetBool() ? -1 : 0;
|
||||||
|
}
|
||||||
|
else if (value.IsInt()) {
|
||||||
|
m_memoryPool = value.GetInt();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -48,6 +48,7 @@ public:
|
||||||
|
|
||||||
bool isHwAES() const;
|
bool isHwAES() const;
|
||||||
rapidjson::Value toJSON(rapidjson::Document &doc) const;
|
rapidjson::Value toJSON(rapidjson::Document &doc) const;
|
||||||
|
size_t memPoolSize() const;
|
||||||
std::vector<CpuLaunchData> get(const Miner *miner, const Algorithm &algorithm) const;
|
std::vector<CpuLaunchData> get(const Miner *miner, const Algorithm &algorithm) const;
|
||||||
void read(const rapidjson::Value &value, uint32_t version);
|
void read(const rapidjson::Value &value, uint32_t version);
|
||||||
|
|
||||||
|
@ -62,7 +63,8 @@ public:
|
||||||
private:
|
private:
|
||||||
void generate();
|
void generate();
|
||||||
void generateArgon2();
|
void generateArgon2();
|
||||||
void setAesMode(const rapidjson::Value &aesMode);
|
void setAesMode(const rapidjson::Value &value);
|
||||||
|
void setMemoryPool(const rapidjson::Value &value);
|
||||||
|
|
||||||
inline void setPriority(int priority) { m_priority = (priority >= -1 && priority <= 5) ? priority : -1; }
|
inline void setPriority(int priority) { m_priority = (priority >= -1 && priority <= 5) ? priority : -1; }
|
||||||
|
|
||||||
|
@ -71,6 +73,7 @@ private:
|
||||||
bool m_enabled = true;
|
bool m_enabled = true;
|
||||||
bool m_hugePages = true;
|
bool m_hugePages = true;
|
||||||
bool m_shouldSave = false;
|
bool m_shouldSave = false;
|
||||||
|
int m_memoryPool = 0;
|
||||||
int m_priority = -1;
|
int m_priority = -1;
|
||||||
String m_argon2Impl;
|
String m_argon2Impl;
|
||||||
Threads<CpuThreads> m_threads;
|
Threads<CpuThreads> m_threads;
|
||||||
|
|
|
@ -52,7 +52,7 @@ int xmrig::Controller::init()
|
||||||
{
|
{
|
||||||
Base::init();
|
Base::init();
|
||||||
|
|
||||||
VirtualMemory::init(config()->cpu().isHugePages(), -1);
|
VirtualMemory::init(config()->cpu().memPoolSize(), config()->cpu().isHugePages());
|
||||||
|
|
||||||
m_network = new Network(this);
|
m_network = new Network(this);
|
||||||
|
|
||||||
|
|
|
@ -110,7 +110,7 @@ void xmrig::VirtualMemory::destroy()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void xmrig::VirtualMemory::init(bool hugePages, int poolSize)
|
void xmrig::VirtualMemory::init(size_t poolSize, bool hugePages)
|
||||||
{
|
{
|
||||||
if (!pool) {
|
if (!pool) {
|
||||||
osInit();
|
osInit();
|
||||||
|
@ -118,10 +118,10 @@ void xmrig::VirtualMemory::init(bool hugePages, int poolSize)
|
||||||
|
|
||||||
# ifdef XMRIG_FEATURE_HWLOC
|
# ifdef XMRIG_FEATURE_HWLOC
|
||||||
if (Cpu::info()->nodes() > 1) {
|
if (Cpu::info()->nodes() > 1) {
|
||||||
pool = new NUMAMemoryPool(align(poolSize < 0 ? Cpu::info()->threads() : poolSize, Cpu::info()->nodes()), hugePages);
|
pool = new NUMAMemoryPool(align(poolSize, Cpu::info()->nodes()), hugePages);
|
||||||
} else
|
} else
|
||||||
# endif
|
# endif
|
||||||
{
|
{
|
||||||
pool = new MemoryPool(poolSize < 0 ? Cpu::info()->threads() : poolSize, hugePages);
|
pool = new MemoryPool(poolSize, hugePages);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,7 +64,7 @@ public:
|
||||||
static void destroy();
|
static void destroy();
|
||||||
static void flushInstructionCache(void *p, size_t size);
|
static void flushInstructionCache(void *p, size_t size);
|
||||||
static void freeLargePagesMemory(void *p, size_t size);
|
static void freeLargePagesMemory(void *p, size_t size);
|
||||||
static void init(bool hugePages, int poolSize);
|
static void init(size_t poolSize, bool hugePages);
|
||||||
static void protectExecutableMemory(void *p, size_t size);
|
static void protectExecutableMemory(void *p, size_t size);
|
||||||
static void unprotectExecutableMemory(void *p, size_t size);
|
static void unprotectExecutableMemory(void *p, size_t size);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue