モネロのマイニングをノートパソコンで評価してみた


日付: 2021-04-25 閲覧数: 184



モネロは一番好きな仮想通貨です。なぜかと言えば、たくさんのお金をかけてマイニングリグを組む必要がなく、日常用途向けのノートパソコンでも手軽にマイニングリグ出来るからです。先日、モネロの採掘に使われているソフトを使ってみて、一番時間のかかるステップを探ることを目的にし、研究を行って参りました。モネロのマイニングの為にさまざまなソフトが存在していますが、一番人気なのはWindowsでもLinuxでも使用できるxmrigというツールだと思います。それではモネロの採掘を分析していきましょう。


まずは、xmrigをGithubからダウンロードして、Intel(R) Core(TM) i5-8265UのCPUを搭載するノートパソコンに導入しました。この日常用途向けCPUにL2レベルキャッシュ1Mb、L3レベルキャッシュ6Mbがあり、仮想通貨マイニングに向いていると言えません。それにもかかわらず、xmrigを入れてあげて、CPUのベンチマークを行うことでxmrigのボトルネックに照明を当ててみました。


xmrig-6.10.0をGithubから次のURLを使ってダウンロードしました:https://github.com/xmrig/xmrig/releases。ダウンロード後、Github上にある説明書に従って、cmakeとmakeを使ってxmrigをコンパイルしました。そして電子ウォレットも作成し、マイニングプールへの接続を成立させたのです。今回はmonerohash.comというプールに接続し、自分のパソコンで検証作業を開始しました。


そして、モネロのトランザクションデータの検証方法として採用されたRandomX algorithm方法を理解しようとし、ソースコードの深堀りを始めました。今回の研究の目的は、検証時に行われれ情報処理とxmrig.comで公開されているハッシュレートの関係性を明らかにすることでした。


xmrigの一番時間のかかる段階を見つけたいなら、まずはRandomX法を理解する必要があります。その為に、Github上にあるソースコードを参考にしましょう:src/crypto/randomx/randomx.cpp


今回分かったのは、検証時に起動される仮想マシンに関わる情報処理の計算時間がマイニングにかかる時間の大半を占めるということでした。検証時に情報暗号化のステップも時間がかかると思いましたが、結局それほど時間がかからないと分かりました。仮想マシンの起動と実行にかかる時間はマイニング作業に必要な時間の9割以上を占めている様でした。


ボトルネックが次のところにあります:src/crypto/randomx/vm_compiled.cpp。ここは仮想マシンの起動と実行が行われているところです。この辺に実行時間を計測するコードを入れて、compiler.getProgramFunc()関数の呼び出しと実行にかかる時間を計測してみました。今回は1万回呼び出されたgetProgramFunc()関数の実行時間の平均値を計算し、200µsという結果になりました。これで、 Intel(R) Core(TM) i5-8265UのCPUで仮想マシンの起動と実行にかかる時間はおよそ200µsであると推測しました。1000回呼び出した関数の実行の結果を次の図でご覧になれます。


1000回呼び出したgetProgramFunc()関数と実行時間


上の図で示している通り、getProgramFunc()の実行時間が200µsの当たりで変動しているが、時に650µsまで上がってしまうこともあります。この理由はまだ不明です。


randomx.cppを開いて、1つのハッシュ関数の値を計算する時に、仮想マシンを8回起動させる必要があると分かります。つまり、仮に仮想マシン以外の情報処理にかかる計算時間を全く無視すれば、このノートパソコンで1つのハッシュを計算するにはだいたい1200µsがかかると導くことが出来ます。つまりこのCPUのハッシュレートは833 Hs/sくらいになります。正確に言えば、この値を少し下回る感じですね。ということで、getProgramFunc()の実行はモネロのマイニングのボトルネックになっていると分かりました。xmrigの最適化を目指しているなら、getProgramFunc()の中にある情報処理を実現する部分に集中した方が良いではないかと思います。最後まで読んで頂きありがとうございます。


出典:Mining and profiling monero on a laptop




コメント (0)


記事特選