XMRigによるマイニング
M1 Mac miniでXMRigを使用して、KAWPOW(Ravencoin)でのGPUマイニング、CryptoNightRでのCPU&GPUマイニング、RandomX(Monero)のCPUマイニングを試してみました。
現時点(2021/5/10)では、XMRigのRandomX CPUマイニングとKAWPOW GPUマイニングを組み合わせると、nicehashでは一日0.00000576〜0.00001152BTC(36.1〜72.2円)程度得られるようです。消費電力はサンワのワットモニターで測ると25Wで1kWh30円とすると電気代一日18円になるので、一日18〜54円の収益が得られることになります。ethminerやkawpowminerのマイニングより効率的かと思います。
ethminerよりUselethMinerによるマイニングの方が効率的のようです(2022/2/1追記)。
更新履歴
- 2022/2/1 UselethMinerについて追記
- 2021/6/21 v6.12.2の情報追加
- 2021/6/10 XMRigのIssueより参考資料追加
XMRigの公式バイナリ (2021/6/21追加)
XMRigのGithubのReleaseページよりダウンロードできます。
v6.12.2は公式バイナリそのままでKAWPOWのGPUマイニングやRandomXのCPUは問題なく動作するのでビルド不要です。
XMRigのビルド
そのままではAMD拡張を含むOpenCLコードを実行しようとしてしまうため、M1ではKAWPOWは動かないです。
KAWPOWを動くようにしたパッチを作りました。OpenCLをAMD GPUとして動かさないようにする変更と変更内容をkawpow_cl.hへ反映させるパッチです。 (v6.12.2以降は何もせず問題なく動作します)(2021/6/21追記)
XMRigのOpenCLでは、kawpow.clを直接読み込むのではなく、generate_cl.jsを使用してコンパクトに変換したkawpow_cl.hを使用します。RandomXでも同様です。OpenCLのコードを変更した場合、XMRigのトップで
$ node scripts/generate_cl.js
を実行する必要があります(要Node.js、brew等でインストール)。OpenCLのコードを変更しただけだとビルドしてもXMRigに反映されないので気をつけてください。
上記のパッチにはkawpow.clへの変更を含んでいるのでnode scripts/generate_cl.js
の実行は不要です。
準備
ターミナルを起動してください。~/Downloads/以下で作業します。
$ cd ~/Downloads/
XcodeとCommand line tools for Xcodeが未インストールならばApp StoreからXcodeをインストールし、ターミナル上でCommand line tools for Xcodeをインストールしてください。
$ xcode-select --install
brewとcmakeが未インストールならbrewをインストールし、brew経由でcmakeをインストールしてください。
$ arch -arm64e /bin/bash -c "$(curl -fsSL $ https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
$ export PATH=/opt/homebrew/bin:$PATH
$ brew install cmake
XMRigのビルド
git経由でファイルを取得します。
$ git clone https://github.com/xmrig/xmrig.git
$ cd xmrig
パッチをcurlコマンドで取得し当てます。
$ curl -o xmrig-kawpow-m1.patch https://gist.githubusercontent.com/asfdrwe/24e5c4d9703e167e6b1707a6caa6e6a3/raw/abfb4e11ff3d5dba11d007f67aab1cd58241cddb/xmrig-kawpow-m1.patch
$ patch -p1 < xmrig-kawpow-m1.patch
cmakeでビルドします。
$ mkdir build
$ cd build
$ cmake ..
$ make
XMRigの実行
XMRig GPUマイニングの実行時の注意
そのまま実行しようとすると、ethminerやkawpowminerと同様にcl2Metalにバグがあるようで、日本語環境下ではOpenCLコードのバックスラッシュを円記号として扱ってしまい、正常に動作しないようです。
システム環境設定の言語と地域から英語環境を入れて優先する言語を英語にして実行するか、環境変数__CF_USER_TEXT_ENCODING
を英語設定にしてください。
uidをidコマンドで確認し__CF_USER_TEXT_ENCODING
の内容をechoやenvで確認します。uidが501(16進数で0x1F5)の場合はこうなります。
$ id
uid=501(asfdrwe) gid=20(staff) groups=20(staff),...
$ env | grep __CF_USER_TEXT_ENCODING
__CF_USER_TEXT_ENCODING=0x1F5:0x1:0xE
idが501(0x1F5)ならば__CF_USER_TEXT_ENCODING
を0x1F5:0x1:0xE
から__CF_USER_TEXT_ENCODING
を0x1F5:0x0:0x0
にすればcl2Metalのバグを回避できます。envコマンドかexportで__CF_USER_TEXT_ENCODING
の値を変更してxmrigを実行してください。
$ export __CF_USER_TEXT_ENCODING=0x1F5:0x0:0x0
KAWPOW GPUマイニング
nicehashで実行する場合は次のようになります。
$ ./xmrig -o kawpow.usa-west.nicehash.com:3385 -u 『NiceHashの自分の報酬ビットコインアドレス』 -a kawpow --nicehash --rig-id=『NiceHashの自分のWorker名(何でもいい、反映されない?)』 --opencl --no-cpu
実行ログ
* ABOUT XMRig/6.12.1 clang/12.0.5
* LIBS libuv/1.41.0 OpenSSL/1.1.1k hwloc/2.4.1
* HUGE PAGES unavailable
* 1GB PAGES unavailable
* CPU Apple M1 (1) 64-bit AES
L2:16.0 MB L3:0.0 MB 8C/8T NUMA:1
* MEMORY 5.5/8.0 GB (69%)
* DONATE 0%
* POOL #1 kawpow.usa-west.nicehash.com:3385 algo kawpow
* COMMANDS hashrate, pause, resume, results, connection
* OPENCL #0 Apple/OpenCL 1.2 (Feb 28 2021 03:51:21)
* OPENCL GPU #0 n/a Apple M1 1000 MHz cu:8 mem:1024/5461 MB
* CUDA disabled
[2021-05-10 15:01:17.952] net use pool kawpow.usa-west.nicehash.com:3385 172.65.247.93
[2021-05-10 15:01:17.953] net new job from kawpow.usa-west.nicehash.com:3385 diff 364M algo kawpow height 1747506
[2021-05-10 15:01:17.955] opencl use profile kawpow (1 thread) scratchpad 32 KB
| # | GPU | BUS ID | INTENSITY | WSIZE | MEMORY | NAME
| 0 | 0 | n/a | 2097152 | 256 | 2933 | Apple M1
[2021-05-10 15:01:17.957] opencl GPU #0 compiling...
[2021-05-10 15:01:18.141] opencl GPU #0 compilation completed (184 ms)
[2021-05-10 15:01:18.142] opencl READY threads 1/1 (187 ms)
[2021-05-10 15:01:19.183] opencl KawPow program for period 582502 compiled (1040ms)
[2021-05-10 15:01:19.567] net new job from kawpow.usa-west.nicehash.com:3385 diff 364M algo kawpow height 1747507
[2021-05-10 15:01:20.269] opencl KawPow program for period 582503 compiled (1086ms)
[2021-05-10 15:01:22.706] miner KawPow light cache for epoch 233 calculated (3523ms)
[2021-05-10 15:02:04.237] net new job from kawpow.usa-west.nicehash.com:3385 diff 364M algo kawpow height 1747507
[2021-05-10 15:02:08.425] opencl KawPow DAG for epoch 233 calculated (45715ms)
[2021-05-10 15:02:14.673] net new job from kawpow.usa-west.nicehash.com:3385 diff 364M algo kawpow height 1747507
[2021-05-10 15:02:19.492] miner speed 10s/60s/15m n/a n/a n/a H/s max n/a H/s
[2021-05-10 15:03:09.752] net new job from kawpow.usa-west.nicehash.com:3385 diff 364M algo kawpow height 1747507
[2021-05-10 15:03:13.074] net new job from kawpow.usa-west.nicehash.com:3385 diff 364M algo kawpow height 1747508
[2021-05-10 15:03:17.279] net new job from kawpow.usa-west.nicehash.com:3385 diff 364M algo kawpow height 1747508
[2021-05-10 15:03:20.381] miner speed 10s/60s/15m 1.49 1.49 n/a MH/s max 1.49 MH/s
[2021-05-10 15:04:05.310] net new job from kawpow.usa-west.nicehash.com:3385 diff 182M algo kawpow height 1747508
[2021-05-10 15:04:08.214] net new job from kawpow.usa-west.nicehash.com:3385 diff 182M algo kawpow height 1747508
[2021-05-10 15:04:17.519] opencl accepted (1/0) diff 182M (172 ms)
[2021-05-10 15:04:21.353] miner speed 10s/60s/15m 1.46 1.47 n/a MH/s max 1.51 MH/s
...
ハッシュレートは1.5MH/sで消費電力はサンワのワットモニター測定で12-14Wぐらいです。kawpowminerは1MH/sで13-19Wなので、xmrigの方が効率が良いようです。
CryptoNightR CPU&GPUマイニング
CryptoNightRはパッチなしでも動きます。
$ ./xmrig -o cryptonightr.usa-west.nicehash.com:3375 -u 『NiceHashの自分の報酬ビットコインアドレス』 -a cn/r --nicehash --opencl --rig-id=『NiceHashの自分のWorker名』
実行ログ
* ABOUT XMRig/6.12.1 clang/12.0.5
* LIBS libuv/1.41.0 OpenSSL/1.1.1k hwloc/2.4.1
* HUGE PAGES unavailable
* 1GB PAGES unavailable
* CPU Apple M1 (1) 64-bit AES
L2:16.0 MB L3:0.0 MB 8C/8T NUMA:1
* MEMORY 3.5/8.0 GB (44%)
* DONATE 0%
* POOL #1 cryptonightr.usa-west.nicehash.com:3375 algo cn/r
* COMMANDS hashrate, pause, resume, results, connection
* OPENCL #0 Apple/OpenCL 1.2 (Feb 28 2021 03:51:21)
* OPENCL GPU #0 n/a Apple M1 1000 MHz cu:8 mem:1024/5461 MB
* CUDA disabled
[2021-05-10 15:10:59.612] net use pool cryptonightr.usa-west.nicehash.com:3375 172.65.247.93
[2021-05-10 15:10:59.612] net new job from cryptonightr.usa-west.nicehash.com:3375 diff 50000 algo cn/r height 543545
[2021-05-10 15:10:59.612] cpu use profile cn (8 threads) scratchpad 2048 KB
[2021-05-10 15:10:59.614] opencl use profile cn/2 (1 thread) scratchpad 2048 KB
| # | GPU | BUS ID | INTENSITY | WSIZE | MEMORY | NAME
| 0 | 0 | n/a | 384 | 8 | 768 | Apple M1
[2021-05-10 15:10:59.645] opencl GPU #0 compiling...
[2021-05-10 15:11:00.619] cpu READY threads 8/8 (8) huge pages 0% 0/8 memory 16384 KB (1007 ms)
[2021-05-10 15:11:02.729] opencl GPU #0 compilation completed (3083 ms)
[2021-05-10 15:11:02.732] opencl READY threads 1/1 (3107 ms)
[2021-05-10 15:12:00.137] miner speed 10s/60s/15m 232.1 219.0 n/a H/s max 239.2 H/s
[2021-05-10 15:12:50.485] net new job from cryptonightr.usa-west.nicehash.com:3375 diff 50000 algo cn/r height 543545
[2021-05-10 15:13:00.694] miner speed 10s/60s/15m 235.4 235.2 n/a H/s max 239.2 H/s
[2021-05-10 15:14:01.227] miner speed 10s/60s/15m 235.6 235.5 n/a H/s max 239.2 H/s
[2021-05-10 15:14:16.812] cpu accepted (1/0) diff 50000 (140 ms)
[2021-05-10 15:14:40.819] opencl accepted (2/0) diff 50000 (138 ms)
[2021-05-10 15:14:52.479] net new job from cryptonightr.usa-west.nicehash.com:3375 diff 50000 algo cn/r height 543545
[2021-05-10 15:15:01.826] miner speed 10s/60s/15m 237.2 235.8 n/a H/s max 239.2 H/s
[2021-05-10 15:15:30.626] opencl accepted (3/0) diff 50000 (162 ms)
[2021-05-10 15:15:54.217] cpu accepted (4/0) diff 50000 (144 ms)
[2021-05-10 15:16:02.385] miner speed 10s/60s/15m 239.6 239.3 n/a H/s max 240.0 H/s
[2021-05-10 15:16:54.472] net new job from cryptonightr.usa-west.nicehash.com:3375 diff 50000 algo cn/r height 543545
[2021-05-10 15:17:03.298] miner speed 10s/60s/15m 238.3 238.6 n/a H/s max 240.5 H/s
[2021-05-10 15:18:04.255] miner speed 10s/60s/15m 237.7 237.2 n/a H/s max 240.5 H/s
[2021-05-10 15:18:54.496] net new job from cryptonightr.usa-west.nicehash.com:3375 diff 50000 algo cn/r height 543545
[2021-05-10 15:19:05.232] miner speed 10s/60s/15m 237.4 237.3 n/a H/s max 240.5 H/s
[2021-05-10 15:19:07.850] net new job from cryptonightr.usa-west.nicehash.com:3375 diff 50000 algo cn/r height 543546
[2021-05-10 15:20:06.254] miner speed 10s/60s/15m 237.8 237.0 n/a H/s max 240.5 H/s
[2021-05-10 15:21:07.233] miner speed 10s/60s/15m 237.7 237.7 n/a H/s max 240.5 H/s
[2021-05-10 15:21:08.469] net new job from cryptonightr.usa-west.nicehash.com:3375 diff 50000 algo cn/r height 543546
[2021-05-10 15:22:08.283] miner speed 10s/60s/15m 236.9 237.4 n/a H/s max 240.5 H/s
[2021-05-10 15:23:08.471] net new job from cryptonightr.usa-west.nicehash.com:3375 diff 50000 algo cn/r height 543546
[2021-05-10 15:23:09.149] miner speed 10s/60s/15m 236.6 236.9 n/a H/s max 240.5 H/s
[2021-05-10 15:23:28.096] net new job from cryptonightr.usa-west.nicehash.com:3375 diff 50000 algo cn/r height 543547
[2021-05-10 15:24:10.194] miner speed 10s/60s/15m 243.0 240.3 n/a H/s max 243.3 H/s
[2021-05-10 15:25:11.197] miner speed 10s/60s/15m 242.4 242.7 n/a H/s max 243.4 H/s
[2021-05-10 15:25:28.466] net new job from cryptonightr.usa-west.nicehash.com:3375 diff 50000 algo cn/r height 543547
...
ハッシュレートは243H/sですが消費電力は27-29Wで電力消費が大きいです。収益はよくわかりませんが一日0.00000288BTC程度は入るのではないかと思います。
RandomX CPUマイニング
RandomXでのCPUマイニングはパッチなしで動きます。
$ xmrig -o randomxmonero.usa-west.nicehash.com:3380 -u 『NiceHashの自分の報酬ビットコインアドレス』 -a randomx --nicehash --rig-id=『NiceHashの自分のWorker名』
実行ログ
* ABOUT XMRig/6.12.1 clang/12.0.5
* LIBS libuv/1.41.0 OpenSSL/1.1.1k hwloc/2.4.1
* HUGE PAGES unavailable
* 1GB PAGES unavailable
* CPU Apple M1 (1) 64-bit AES
L2:16.0 MB L3:0.0 MB 8C/8T NUMA:1
* MEMORY 3.9/8.0 GB (49%)
* DONATE 0%
* POOL #1 randomxmonero.usa-west.nicehash.com:3380 algo rx/0
* COMMANDS hashrate, pause, resume, results, connection
* OPENCL disabled
* CUDA disabled
[2021-05-10 15:28:17.780] net use pool randomxmonero.usa-west.nicehash.com:3380 172.65.247.93
[2021-05-10 15:28:17.781] net new job from randomxmonero.usa-west.nicehash.com:3380 diff 320903 algo rx/0 height 2357700
[2021-05-10 15:28:17.781] cpu use argon2 implementation default
[2021-05-10 15:28:17.781] randomx init dataset algo rx/0 (8 threads) seed d2e97cf50201e5f9...
[2021-05-10 15:28:17.781] randomx allocated 2336 MB (2080+256) huge pages 0% 0/1168 +JIT (1 ms)
[2021-05-10 15:28:22.629] randomx dataset ready (4847 ms)
[2021-05-10 15:28:22.629] cpu use profile rx (8 threads) scratchpad 2048 KB
[2021-05-10 15:28:22.629] cpu READY threads 8/8 (8) huge pages 0% 0/8 memory 16384 KB (0 ms)
[2021-05-10 15:28:40.165] net new job from randomxmonero.usa-west.nicehash.com:3380 diff 320903 algo rx/0 height 2357701
[2021-05-10 15:29:03.428] net new job from randomxmonero.usa-west.nicehash.com:3380 diff 320903 algo rx/0 height 1517846
[2021-05-10 15:29:03.432] cpu stopped (4 ms)
[2021-05-10 15:29:03.432] randomx init dataset algo rx/0 (8 threads) seed 72c17680437427a6...
[2021-05-10 15:29:08.143] randomx dataset ready (4711 ms)
[2021-05-10 15:29:08.143] cpu use profile rx (8 threads) scratchpad 2048 KB
[2021-05-10 15:29:08.143] cpu READY threads 8/8 (8) huge pages 0% 0/8 memory 16384 KB (0 ms)
[2021-05-10 15:29:23.192] miner speed 10s/60s/15m 2388.8 n/a n/a H/s max 2392.4 H/s
[2021-05-10 15:29:30.797] cpu accepted (1/0) diff 320903 (119 ms)
[2021-05-10 15:29:31.212] net new job from randomxmonero.usa-west.nicehash.com:3380 diff 320903 algo rx/0 height 1517847
[2021-05-10 15:29:40.766] net new job from randomxmonero.usa-west.nicehash.com:3380 diff 320903 algo rx/0 height 2357701
[2021-05-10 15:29:40.770] cpu stopped (4 ms)
[2021-05-10 15:29:40.770] randomx init dataset algo rx/0 (8 threads) seed d2e97cf50201e5f9...
[2021-05-10 15:29:45.460] randomx dataset ready (4690 ms)
[2021-05-10 15:29:45.460] cpu use profile rx (8 threads) scratchpad 2048 KB
[2021-05-10 15:29:45.460] cpu READY threads 8/8 (8) huge pages 0% 0/8 memory 16384 KB (0 ms)
[2021-05-10 15:30:06.467] net new job from randomxmonero.usa-west.nicehash.com:3380 diff 320903 algo rx/0 height 2357701
[2021-05-10 15:30:23.716] miner speed 10s/60s/15m 2382.1 n/a n/a H/s max 2393.6 H/s
[2021-05-10 15:30:33.364] cpu accepted (2/0) diff 320903 (119 ms)
[2021-05-10 15:30:48.059] net new job from randomxmonero.usa-west.nicehash.com:3380 diff 320903 algo rx/0 height 2357701
[2021-05-10 15:31:24.244] miner speed 10s/60s/15m 2393.5 2393.3 n/a H/s max 2398.0 H/s
...
ハッシュレートは2393H/sで消費電力は19-20Wです。
RandomX GPUマイニング(動かない)
そのままではOpenCLのコードで符号付きと符号なしの比較に関するWarningが出て動かないです。ちゃんとcastするように修正したパッチを作ってみたのですが、その場合でもCL_INVALID_KERNELエラーが出て動かないです。仮に動くようになったとしても、現時点では、AMDのVegaとNavi以外のGPUでは仮想CPUのコードをインタプリタで解釈して動くようなので、あまり高速には動かないと思います(OclWorkerの対応箇所、randomx_jit.cl等、randomx_vm.cl)。
$ xmrig -o randomxmonero.usa-west.nicehash.com:3380 -u 『NiceHashの自分の報酬ビットコインアドレス』 -a randomx --nicehash --rig-id=『NiceHashの自分のWorker名』 --opencl --no-cpu
実行ログ
* ABOUT XMRig/6.12.1 clang/12.0.5
* LIBS libuv/1.41.0 OpenSSL/1.1.1k hwloc/2.4.1
* HUGE PAGES unavailable
* 1GB PAGES unavailable
* CPU Apple M1 (1) 64-bit AES
L2:16.0 MB L3:0.0 MB 8C/8T NUMA:1
* MEMORY 3.9/8.0 GB (49%)
* DONATE 1%
* POOL #1 randomxmonero.usa-west.nicehash.com:3380 algo rx/0
* COMMANDS hashrate, pause, resume, results, connection
* OPENCL #0 Apple/OpenCL 1.2 (Feb 28 2021 03:51:21)
* OPENCL GPU #0 n/a Apple M1 1000 MHz cu:8 mem:1024/5461 MB
* CUDA disabled
[2021-05-10 15:27:44.756] net use pool randomxmonero.usa-west.nicehash.com:3380 172.65.247.93
[2021-05-10 15:27:44.756] net new job from randomxmonero.usa-west.nicehash.com:3380 diff 320903 algo rx/0 height 1517844
[2021-05-10 15:27:44.756] cpu use argon2 implementation default
[2021-05-10 15:27:44.756] randomx init dataset algo rx/0 (8 threads) seed 72c17680437427a6...
[2021-05-10 15:27:44.757] randomx allocated 2336 MB (2080+256) huge pages 0% 0/1168 +JIT (1 ms)
[2021-05-10 15:27:49.606] randomx dataset ready (4849 ms)
[2021-05-10 15:27:49.606] opencl use profile rx (1 thread) scratchpad 2048 KB
| # | GPU | BUS ID | INTENSITY | WSIZE | MEMORY | NAME
| 0 | 0 | n/a | 128 | 8 | 256 | Apple M1
UNSUPPORTED (log once): createKernel: newComputePipelineState failed
[2021-05-10 15:27:50.125] opencl error CL_INVALID_KERNEL when calling clCreateKernel for kernel execute_vm
[2021-05-10 15:27:50.125] opencl thread #0 failed with error CL_INVALID_KERNEL
[2021-05-10 15:27:50.125] opencl thread #0 self-test failed
[2021-05-10 15:27:50.125] opencl disabled (failed to start threads)
RandomX CPUマイニングとKAWPOW GPUマイニングの同時実行
KAWPOWは2.5GBでRandomXは2.3GBの消費メモリ量なので、8GBのMac Miniでも同時に動かすことが可能です。Ethereumは4GB以上メモリを消費するので、Ethereum+RandomXは8GBのMac Miniではうまく動きませんでした。
ターミナルを複数起動してそれぞれでRandomXとKAWPOWを実行します。
同時に動かしたときのRandomX CPU ハッシュレート
[2021-05-10 15:36:37.490] miner speed 10s/60s/15m 1879.1 1885.2 n/a H/s max 1914.5 H/s
KAWPOW GPU ハッシュレート
[2021-05-10 15:36:27.165] miner speed 10s/60s/15m 1.30 1.36 n/a MH/s max 1.39 MH/s
同時に動かすと10%前後ハッシュレートが落ちますが、消費電力は25W程度で済みます。RandomXは単独でも20Wなので、25Wで1.8倍程度の収益になるのならば、GPUマイニングと組み合わせて同時実行させるのが良いかと思います。
参考資料(2021/6/10追記)
大部分は自分のパッチと同じような内容なのですが、16K Pageを使えるようにしてもRandomXのハッシュレートは変わらなかったという点は興味深いと思います。