ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

XMRig GhostRider(Raptoreum)挖矿实战:自动调优原理、线程配置与源码级解析

XMRig GhostRider(Raptoreum)挖矿实战:自动调优原理、线程配置与源码级解析 XMRig GhostRiderRaptoreum挖矿实战自动调优原理、线程配置与源码级解析【免费下载链接】xmrigRandomX, KawPow, CryptoNight and GhostRider unified CPU/GPU miner and RandomX benchmark项目地址: https://gitcode.com/GitHub_Trending/xm/xmrig本篇技术指南围绕 XMRig 对 GhostRider 算法Raptoreum 链的原生支持展开覆盖从 v6.16.0 引入的算法支持、命令行与批处理模板的快速接入、线程配置的正确姿势到免调优自动配置背后的性能原理与底层实现。读完本文你将掌握如何在 XMRig 中正确启动 GhostRider 挖矿、理解其独特的一个哈希批次由多线程协同计算的调度模型并能从源码层面定位相关实现路径。GhostRider 算法与 XMRig 的支持方式GhostRider 是 RaptoreumRTM采用的 PoW 算法属于一种混合型算法它由15 个经典哈希函数Blake、BMW、Groestl、JH、Keccak、Skein、Luffa、Cubehash、Shavite、SIMD、Echo、Hamsi、Fugue、Shabal、Whirlpool与6 个 Cryptonight 变体组合而成。XMRig 从v6.16.0版本开始原生支持该算法无需任何外部依赖或插件。在源码中该算法被定义为GHOSTRIDER_RTM别名ghostrider、ghostrider/rtm、gr其内部使用的 6 个 Cryptonight 变体依次对应 Algorithm.h 中的枚举值枚举字符串名称内存大小说明CN_GR_0cn/dark512 KBGhostRider 专用变体CN_GR_1cn/dark-lite256 KBGhostRider 专用变体CN_GR_2cn/fast2 MBGhostRider 专用变体CN_GR_3cn/lite1 MBGhostRider 专用变体CN_GR_4cn/turtle256 KBGhostRider 专用变体CN_GR_5cn/turtle-lite128 KBGhostRider 专用变体以上内存大小对应 ghostrider.cpp 中的cn_sizes数组注释。在 CnAlgo.h 中还可以看到每个变体的迭代次数特化CN_ITER / 4、CN_ITER / 2、CN_ITER / 8以及cn/dark-lite、cn/turtle-lite的特殊掩码这些细节决定了各变体在单次计算中的工作量差异。从构建角度看GhostRider 是一个可选的独立模块CMake 通过WITH_GHOSTRIDER选项控制是否编译开启后会定义XMRIG_ALGO_GHOSTRIDER宏并构建静态库ghostrider见 cmake/ghostrider.cmake其模块级 CMake 配置位于 src/crypto/ghostrider/CMakeLists.txt其中对全部sph_*哈希源文件使用-OsMSVC 下为/O1 /Oi /Os编译以控制二进制体积与缓存友好度。快速上手命令行与批处理模板GhostRider 的启动方式与 XMRig 其他算法一致只需要在命令行指定-a gr。官方 READMEsrc/crypto/ghostrider/README.md给出了两种典型场景的示例。非 SSL 端口示例xmrig -a gr -o raptoreumemporium.com:3008 -u WALLET_ADDRESS -p xSSL 端口示例xmrig -a gr -o rtm.suprnova.cc:4273 --tls -u WALLET_ADDRESS -p x两者的区别仅在于池端口与是否追加--tls参数。字段含义为-a gr指定使用 GhostRider 算法等价于--algoghostrider-o host:port矿池的 stratum 地址与端口-u wallet矿池用户名对大多数 Raptoreum 矿池而言就是你的 RTM 钱包地址-p x矿池密码多数矿池填写x即可。仓库同时提供了开箱即用的 Windows 批处理模板 scripts/rtm_ghostrider_example.cmd其核心命令与 README 完全一致xmrig.exe -a gr -o raptoreumemporium.com:3008 -u WALLET_ADDRESS -p x该脚本还包含一段注释说明了pool address、pool port、pool username/wallet、pool password四个字段的填写规则并建议选择排名靠后的矿池以帮助 Raptoreum 网络去中心化。实际使用时只需把WALLET_ADDRESS替换为你自己的地址即可。线程配置为什么官方不建议使用 --threadsREADME 明确给出了一条重要建议不要使用--threads-t参数因为它会关闭 XMRig 内置的高级自动配置逻辑。如果你确实想调整 GhostRider 的线程数量官方推荐的命令行方式是--cpu-max-threads-hintN其中N的取值范围是0 到 100表示 CPU 线程使用率上限的百分比。例如设置--cpu-max-threads-hint75即让自动配置最多使用约 75% 的可用线程。在源码中该选项对应的配置键为max-threads-hint见 CpuConfig.cpp在config.json里位于cpu段下与命令行等价。如果需要进行更精细的线程规划例如按 NUMA 节点或物理核心数精确控制建议改用 config.json 而不是命令行通过cpu段的threads配置手工指定线程拓扑——这样可以在保留自动调优结果的基础上做局部微调。性能原理自动配置与细粒度线程调度GhostRider 的性能亮点在于其独特的调度模型。README 指出尽管单个算法的实现并未做极致优化XMRig 通过更好的自动配置与更细粒度的线程调度获得了更高的综合算力——核心思路是对缓存需求不大的计算部分可以用 2 个线程协同计算同一个哈希批次。以典型的 Intel CPU每个核心 2 MB 缓存为例cn/fast2 MB 内存需要完整占用核心缓存因此每个核心只运行 1 个线程而其他更小的 Cryptonight 变体如 512 KB、256 KB、128 KB缓存需求低可以在同一批次中让每个核心运行 2 个线程分担计算从而始终把 CPU 负载维持在 50% 以上。反过来在 Ryzen 3000/5000 系列 CPU 上如果系统检测到某些变体每核心 1 线程反而更快XMRig 也允许 CPU 负载略低于 100%——这正是自动调优根据实测数据做出的取舍。这一机制的源码实现集中在 ghostrider.cpphelper 线程HelperThreadcreate_helper_thread()通过 hwloc 在物理核心的剩余逻辑线程上创建辅助线程ghostrider.cpp主线程与辅助线程通过uv_mutex/uv_cond完成任务投递与同步ghostrider.cpp。运行时决策hash_octa()每次计算 8 个哈希N 8。当三个 Cryptonight 变体在调优表中都被标记为threads 2时会把 8 个哈希拆成前 4 个 后 4 个分别交给主线程和 helper 线程并行计算ghostrider.cpp否则退化为单线程逐部分计算。自动调优benchmark()会在挖矿前对不同变体、不同 step1/2/4组合进行实测维护tuneDefault与tune8MB两张调优表并依据 CPU 的 L3 缓存容量每核心是否达到 8 MB选择最优参数ghostrider.cpp。这解释了 README 中无需手动调优的结论——调优动作在启动时已由程序自动完成。调用链的入口位于 CpuWorker.cpp创建 helper 线程与 CpuWorker.cpp对 GHOSTRIDER 家族算法调用ghostrider::hash_octa接口声明见 ghostrider.h。哈希流水线15 个核心哈希与 6 个 CN 变体的组合了解调度之外GhostRider 的哈希构造也值得拆解。hash_octa()的流程如下ghostrider.cpp选取算法组合从 Blob 中[4; 36)字节即 PrevBlockHashGhostRider 的种子逐 nibble 采样通过select_indices()无重复地选出 15 个核心哈希索引core_indices[15]与 6 个 CN 变体索引cn_indices[6]。三段流水线整批计算被分为 3 个 part每个 part 依次执行5 个核心哈希 1 个 Cryptonight 变体——前一轮的输出32 字节哈希 32 字节零填充作为下一轮的输入形成 64 字节的中间缓冲tmp[64 * N]。输出最终得到每个输入的 32 字节结果写入output。15 个核心哈希函数由宏CORE_HASH批量生成ghostrider.cpp包括blake512、bmw512、groestl512、jh512、keccak512、skein512、luffa512、cubehash512、shavite512、simd512、echo512、hamsi512、fugue512、shabal512、whirlpool对应源码目录下对应的sph_*.c/sph_*.h文件。由于每个 part 的 CN 变体由种子动态决定同一批 8 个哈希可能混用不同内存大小的 scratchpadhash_octa()会按step参数重新分配ctx内存区见 ghostrider.cpp这也是细粒度调度能够生效的物理前提。需要说明的是在未启用 hwlocXMRIG_FEATURE_HWLOC或 ARM/RISC-V 平台上benchmark()与 helper 线程相关接口会退化为空实现hash_octa()使用固定的 step 数组{4, 4, 1, 2, 4, 4}以单线程方式执行ghostrider.cpp此时将无法获得 x86 平台上的多线程协同加速。性能测试数据README 中附带了作者实测的性能对比表。以下为Windows 平台XMRig v6.16.2 MSVC 构建 vs cpuminer-gr-avx2 1.2.4.1 调优版的对比结果CPUcpuminer-gr-avx2调优后, h/sXMRig v6.16.2MSVC, h/s提速AMD Ryzen 7 4700U632.6733.115.89%Intel Core i7-2600496.4554.611.72%AMD Ryzen 7 3700X 4.1 GHz2453.02496.51.77%AMD Ryzen 5 5600X 4.65 GHz2112.62337.510.65%此外还有一组Linux 平台数据XMRig v6.16.0 GCC 构建由社区成员 Delgon 测试README 已明确标注该组数据过时仅供参考CPUcpuminer-gr-avx2调优后, h/sXMRig v6.16.0GCC, h/s提速AMD Ryzen 9 3900X3746.513604.89-3.78%2x Intel Xeon E5-2698v32563.42638.382.925%从数据可见XMRig 在中小缓存 CPU 上的优势尤其明显如 Ryzen 7 4700U 与 Core i7-2600 均超过 11%这与前述2 线程协同计算低缓存变体的调度策略直接相关。需要强调的是这些数字是特定版本、特定 CPU 上的历史实测值实际算力会随 CPU 型号、编译选项MSVC/GCC/Clang、内存与散热环境而变化请以你本机的实测结果为准。相关源码索引如需深入阅读可按以下路径继续探索算法定义与别名src/base/crypto/Algorithm.h、src/base/crypto/Algorithm.cppCryptonight 变体参数特化src/crypto/cn/CnAlgo.hGhostRider 核心实现与自动调优src/crypto/ghostrider/ghostrider.cpp、src/crypto/ghostrider/ghostrider.h15 个核心哈希源码src/crypto/ghostrider/ 下的sph_*.c/sph_*.h模块构建开关cmake/ghostrider.cmake、src/crypto/ghostrider/CMakeLists.txt工作线程调用入口src/backend/cpu/CpuWorker.cpp启动模板scripts/rtm_ghostrider_example.cmd官方说明src/crypto/ghostrider/README.md【免费下载链接】xmrigRandomX, KawPow, CryptoNight and GhostRider unified CPU/GPU miner and RandomX benchmark项目地址: https://gitcode.com/GitHub_Trending/xm/xmrig创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表