From 5ab17fcd4662903d65407fbd287ef440829803e5 Mon Sep 17 00:00:00 2001 From: XMRig Date: Wed, 11 Dec 2019 17:58:44 +0700 Subject: [PATCH 01/10] v5.2.1 --- src/version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/version.h b/src/version.h index 8fa978c8..a17ed41e 100644 --- a/src/version.h +++ b/src/version.h @@ -28,7 +28,7 @@ #define APP_ID "xmrig" #define APP_NAME "XMRig" #define APP_DESC "XMRig miner" -#define APP_VERSION "5.2.0" +#define APP_VERSION "5.2.1" #define APP_DOMAIN "xmrig.com" #define APP_SITE "www.xmrig.com" #define APP_COPYRIGHT "Copyright (C) 2016-2019 xmrig.com" @@ -36,7 +36,7 @@ #define APP_VER_MAJOR 5 #define APP_VER_MINOR 2 -#define APP_VER_PATCH 0 +#define APP_VER_PATCH 1 #ifdef _MSC_VER # if (_MSC_VER >= 1920) From 4fb3086c1ce05c7ebd354310d8d7b5f549378891 Mon Sep 17 00:00:00 2001 From: XMRig Date: Wed, 11 Dec 2019 19:16:01 +0700 Subject: [PATCH 02/10] Fixed --randomx-wrmsr option without parameters. --- src/core/config/ConfigTransform.cpp | 4 ++++ src/core/config/Config_platform.h | 2 +- src/crypto/rx/RxConfig.cpp | 8 +++++++- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/core/config/ConfigTransform.cpp b/src/core/config/ConfigTransform.cpp index bc1ce7fc..0309fc59 100644 --- a/src/core/config/ConfigTransform.cpp +++ b/src/core/config/ConfigTransform.cpp @@ -170,6 +170,10 @@ void xmrig::ConfigTransform::transform(rapidjson::Document &doc, int key, const return set(doc, kRandomX, "1gb-pages", true); case IConfig::RandomXWrmsrKey: /* --randomx-wrmsr */ + if (arg == nullptr) { + return set(doc, kRandomX, "wrmsr", true); + } + return set(doc, kRandomX, "wrmsr", static_cast(strtol(arg, nullptr, 10))); # endif diff --git a/src/core/config/Config_platform.h b/src/core/config/Config_platform.h index 9b360b23..14ae5b2e 100644 --- a/src/core/config/Config_platform.h +++ b/src/core/config/Config_platform.h @@ -100,7 +100,7 @@ static const option options[] = { { "randomx-mode", 1, nullptr, IConfig::RandomXModeKey }, { "randomx-1gb-pages", 0, nullptr, IConfig::RandomX1GbPagesKey }, { "1gb-pages", 0, nullptr, IConfig::RandomX1GbPagesKey }, - { "randomx-wrmsr", 1, nullptr, IConfig::RandomXWrmsrKey }, + { "randomx-wrmsr", 2, nullptr, IConfig::RandomXWrmsrKey }, # endif # ifdef XMRIG_FEATURE_OPENCL { "opencl", 0, nullptr, IConfig::OclKey }, diff --git a/src/crypto/rx/RxConfig.cpp b/src/crypto/rx/RxConfig.cpp index cd8601a7..e11aaba6 100644 --- a/src/crypto/rx/RxConfig.cpp +++ b/src/crypto/rx/RxConfig.cpp @@ -109,7 +109,13 @@ rapidjson::Value xmrig::RxConfig::toJSON(rapidjson::Document &doc) const obj.AddMember(StringRef(kInit), m_threads, allocator); obj.AddMember(StringRef(kMode), StringRef(modeName()), allocator); obj.AddMember(StringRef(kOneGbPages), m_oneGbPages, allocator); - obj.AddMember(StringRef(kWrmsr), m_wrmsr < 0 ? Value(kFalseType) : Value(m_wrmsr), allocator); + + if (m_wrmsr < 0 || m_wrmsr == 6) { + obj.AddMember(StringRef(kWrmsr), m_wrmsr == 6, allocator); + } + else { + obj.AddMember(StringRef(kWrmsr), m_wrmsr, allocator); + } # ifdef XMRIG_FEATURE_HWLOC if (!m_nodeset.empty()) { From de7ed2b9682f984f1cbb8e157e2c9e75ef3abd4b Mon Sep 17 00:00:00 2001 From: XMRig Date: Wed, 11 Dec 2019 19:37:13 +0700 Subject: [PATCH 03/10] Added support for AMD specific MSR registers. --- src/crypto/rx/Rx_linux.cpp | 12 +++++++++--- src/version.h | 2 +- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/crypto/rx/Rx_linux.cpp b/src/crypto/rx/Rx_linux.cpp index a513d38a..df39b78b 100644 --- a/src/crypto/rx/Rx_linux.cpp +++ b/src/crypto/rx/Rx_linux.cpp @@ -88,7 +88,7 @@ static bool wrmsr_on_all_cpus(uint32_t reg, uint64_t value) free(namelist); if (errors) { - LOG_WARN(CLEAR "%s" YELLOW_BOLD_S "cannot set MSR 0x%04" PRIx32 " to 0x%04" PRIx64, rx_tag(), reg, value); + LOG_WARN(CLEAR "%s" YELLOW_BOLD_S "cannot set MSR 0x%08" PRIx32 " to 0x%08" PRIx64, rx_tag(), reg, value); } return errors == 0; @@ -100,7 +100,7 @@ static bool wrmsr_on_all_cpus(uint32_t reg, uint64_t value) void xmrig::Rx::osInit(const RxConfig &config) { - if (config.wrmsr() < 0 || Cpu::info()->vendor() != ICpuInfo::VENDOR_INTEL) { + if (config.wrmsr() < 0) { return; } @@ -110,5 +110,11 @@ void xmrig::Rx::osInit(const RxConfig &config) return; } - wrmsr_on_all_cpus(0x1a4, config.wrmsr()); + if (Cpu::info()->vendor() == ICpuInfo::VENDOR_AMD) { + wrmsr_on_all_cpus(0xC0011022, 0x510000); + wrmsr_on_all_cpus(0xC001102b, 0x1808cc16); + } + else if (Cpu::info()->vendor() == ICpuInfo::VENDOR_INTEL) { + wrmsr_on_all_cpus(0x1a4, config.wrmsr()); + } } diff --git a/src/version.h b/src/version.h index a17ed41e..ef7efff7 100644 --- a/src/version.h +++ b/src/version.h @@ -28,7 +28,7 @@ #define APP_ID "xmrig" #define APP_NAME "XMRig" #define APP_DESC "XMRig miner" -#define APP_VERSION "5.2.1" +#define APP_VERSION "5.2.1-dev" #define APP_DOMAIN "xmrig.com" #define APP_SITE "www.xmrig.com" #define APP_COPYRIGHT "Copyright (C) 2016-2019 xmrig.com" From 96ee721d21dff9662da4267519492be77934a4dc Mon Sep 17 00:00:00 2001 From: XMRig Date: Wed, 11 Dec 2019 20:09:25 +0700 Subject: [PATCH 04/10] Fixed MSR. --- src/config.json | 2 +- src/crypto/rx/Rx_linux.cpp | 23 ++++++++++++++++------- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/config.json b/src/config.json index 52afb4cb..fcdb9494 100644 --- a/src/config.json +++ b/src/config.json @@ -17,7 +17,7 @@ "init": -1, "mode": "auto", "1gb-pages": false, - "wrmsr": 6, + "wrmsr": true, "numa": true }, "cpu": { diff --git a/src/crypto/rx/Rx_linux.cpp b/src/crypto/rx/Rx_linux.cpp index df39b78b..82885137 100644 --- a/src/crypto/rx/Rx_linux.cpp +++ b/src/crypto/rx/Rx_linux.cpp @@ -95,6 +95,18 @@ static bool wrmsr_on_all_cpus(uint32_t reg, uint64_t value) } +static bool wrmsr_modprobe() +{ + if (system("/sbin/modprobe msr > /dev/null 2>&1") != 0) { + LOG_WARN(CLEAR "%s" YELLOW_BOLD_S "msr kernel module is not available", rx_tag()); + + return false; + } + + return true; +} + + } // namespace xmrig @@ -104,17 +116,14 @@ void xmrig::Rx::osInit(const RxConfig &config) return; } - if (system("/sbin/modprobe msr > /dev/null 2>&1") != 0) { - LOG_WARN(CLEAR "%s" YELLOW_BOLD_S "msr kernel module is not available", rx_tag()); + if (Cpu::info()->assembly() == Assembly::RYZEN && wrmsr_modprobe()) { + wrmsr_on_all_cpus(0xC0011022, 0x510000); + wrmsr_on_all_cpus(0xC001102b, 0x1808cc16); return; } - if (Cpu::info()->vendor() == ICpuInfo::VENDOR_AMD) { - wrmsr_on_all_cpus(0xC0011022, 0x510000); - wrmsr_on_all_cpus(0xC001102b, 0x1808cc16); - } - else if (Cpu::info()->vendor() == ICpuInfo::VENDOR_INTEL) { + if (Cpu::info()->vendor() == ICpuInfo::VENDOR_INTEL && wrmsr_modprobe()) { wrmsr_on_all_cpus(0x1a4, config.wrmsr()); } } From 1c58e281249ab2b264eaa26694406e2f326b7d6e Mon Sep 17 00:00:00 2001 From: XMRig Date: Wed, 11 Dec 2019 21:20:37 +0700 Subject: [PATCH 05/10] Don't build Rx_linux.cpp on ARM. --- cmake/randomx.cmake | 2 +- src/crypto/rx/Rx.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/randomx.cmake b/cmake/randomx.cmake index 5a225c00..74f4048e 100644 --- a/cmake/randomx.cmake +++ b/cmake/randomx.cmake @@ -79,7 +79,7 @@ if (WITH_RANDOMX) ) endif() - if (XMRIG_OS_LINUX) + if (XMRIG_OS_LINUX AND NOT XMRIG_ARM) list(APPEND SOURCES_CRYPTO src/crypto/rx/Rx_linux.cpp) endif() else() diff --git a/src/crypto/rx/Rx.cpp b/src/crypto/rx/Rx.cpp index 1de648c2..f6685fbf 100644 --- a/src/crypto/rx/Rx.cpp +++ b/src/crypto/rx/Rx.cpp @@ -115,7 +115,7 @@ void xmrig::Rx::init(IRxListener *listener) } -#ifndef XMRIG_OS_LINUX +#if !defined(XMRIG_OS_LINUX) || defined(XMRIG_ARM) void xmrig::Rx::osInit(const RxConfig &) { } From c62ac89081080d1f55b707ccaa9635bebaa439d8 Mon Sep 17 00:00:00 2001 From: XMRig Date: Thu, 12 Dec 2019 14:09:18 +0700 Subject: [PATCH 06/10] Fixed potential division by 0. --- src/base/net/stratum/Job.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/base/net/stratum/Job.h b/src/base/net/stratum/Job.h index 9e1f3bc9..ed369a16 100644 --- a/src/base/net/stratum/Job.h +++ b/src/base/net/stratum/Job.h @@ -99,7 +99,7 @@ public: # endif static inline uint32_t *nonce(uint8_t *blob) { return reinterpret_cast(blob + 39); } - static inline uint64_t toDiff(uint64_t target) { return 0xFFFFFFFFFFFFFFFFULL / target; } + static inline uint64_t toDiff(uint64_t target) { return target ? (0xFFFFFFFFFFFFFFFFULL / target) : 0; } inline bool operator!=(const Job &other) const { return !isEqual(other); } inline bool operator==(const Job &other) const { return isEqual(other); } From 7ff465053b0bff0504a004c2946b1c57981e90d9 Mon Sep 17 00:00:00 2001 From: XMRig Date: Thu, 12 Dec 2019 14:21:15 +0700 Subject: [PATCH 07/10] Added additional MSR registers for Ryzen CPUs. --- src/crypto/rx/Rx_linux.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/crypto/rx/Rx_linux.cpp b/src/crypto/rx/Rx_linux.cpp index 82885137..782467a7 100644 --- a/src/crypto/rx/Rx_linux.cpp +++ b/src/crypto/rx/Rx_linux.cpp @@ -119,6 +119,8 @@ void xmrig::Rx::osInit(const RxConfig &config) if (Cpu::info()->assembly() == Assembly::RYZEN && wrmsr_modprobe()) { wrmsr_on_all_cpus(0xC0011022, 0x510000); wrmsr_on_all_cpus(0xC001102b, 0x1808cc16); + wrmsr_on_all_cpus(0xC0011020, 0); + wrmsr_on_all_cpus(0xC0011021, 0x40); return; } From 8592561b7a1dcaa00af695ebcebca2759b1afd16 Mon Sep 17 00:00:00 2001 From: SChernykh Date: Thu, 12 Dec 2019 18:25:28 +0100 Subject: [PATCH 08/10] RandomX boost script for Linux --- scripts/randomx_boost.sh | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 scripts/randomx_boost.sh diff --git a/scripts/randomx_boost.sh b/scripts/randomx_boost.sh new file mode 100644 index 00000000..ab37829a --- /dev/null +++ b/scripts/randomx_boost.sh @@ -0,0 +1,20 @@ +#! /bin/bash + +modprobe msr + +if cat /proc/cpuinfo | grep "AMD Ryzen" > /dev/null; + then + echo "Detected Ryzen" + wrmsr -a 0xc0011022 0x510000 + wrmsr -a 0xc001102b 0x1808cc16 + wrmsr -a 0xc0011020 0 + wrmsr -a 0xc0011021 0x40 + echo "MSR register values for Ryzen applied" +elif cat /proc/cpuinfo | grep "Intel" > /dev/null; + then + echo "Detected Intel" + wrmsr -a 0x1a4 6 + echo "MSR register values for Intel applied" +else + echo "No supported CPU detected" +fi From 7d7459100b74d1c88e3118aa1dccc3832f8c6a76 Mon Sep 17 00:00:00 2001 From: XMRig Date: Fri, 13 Dec 2019 00:38:07 +0700 Subject: [PATCH 09/10] Removed extra space. --- scripts/randomx_boost.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) mode change 100644 => 100755 scripts/randomx_boost.sh diff --git a/scripts/randomx_boost.sh b/scripts/randomx_boost.sh old mode 100644 new mode 100755 index ab37829a..9f2a7bcb --- a/scripts/randomx_boost.sh +++ b/scripts/randomx_boost.sh @@ -1,4 +1,4 @@ -#! /bin/bash +#!/bin/bash modprobe msr From 8f2f3d73dfc0d18678da145c2ec834bb28c8fdab Mon Sep 17 00:00:00 2001 From: xmrig Date: Sat, 14 Dec 2019 02:27:19 +0700 Subject: [PATCH 10/10] Update CHANGELOG.md --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 70ab12cc..f3777102 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +# v5.2.1 +- [#1408](https://github.com/xmrig/xmrig/pull/1408) Added RandomX boost script for Linux (if you don't like run miner with root privileges). +- Added support for [AMD Ryzen MSR registers](https://www.reddit.com/r/MoneroMining/comments/e962fu/9526_hs_on_ryzen_7_3700x_xmrig_520_1gb_pages_msr/) (Linux only). +- Fixed command line option `--randomx-wrmsr` option without parameters. + # v5.2.0 - **[#1388](https://github.com/xmrig/xmrig/pull/1388) Added [1GB huge pages support](https://xmrig.com/docs/miner/hugepages#onegb-huge-pages) for Linux.** - Added new option `1gb-pages` in `randomx` object with command line equivalent `--randomx-1gb-pages`.