時代に追いつくMining Log

マイニングが流行ってから一足遅れて世界に飛び込んだ人の日々の記録と成長を記録していきます

chiaマイニングにおけるplotファイルの作成と速度の測定

ちょっと初めに

前回の記事を書いた後に、昔記事を書いていた時にとてもお世話になっていたサイトの主さんにTwitterでDMを送りまして、相互リンクを貼らせて頂きました。それに伴いtopページのレイアウトもちょっと変わりました。
こちらのサイトです。

https://hyperbanana.net/

自分より早くchiaに対してアクションを起こしているので、参考になる記事はとても多いです。また、自分では実装しようと思って先送りになってた10Gbps環境も整えているらしく、ちょっと憧れています。自分の家では基本的に大容量ファイルは扱わず、ファイル管理はローカルPCの中で完結させているため、10Gbpsや光ファイバーはロマンの領域なので、優先度がちょっと下がってしまっていました。また、稼働しているPCが5台ぐらいあるため、全部対応させようとすると20万ほど飛びそうなので。nuro光も引いていないので外部とのアクセスはcat5eの帯域限界で頭打ちですし。ただ今後、完全remoteでplotファイルを作成する可能性を考慮すると一部だけでも整えるのはありなのかなと思っています。

今回の実証環境

今回、元々apacheサーバーとして使っていたPCを流用しました。そのため、最初の測定機材はかなりポンコツです。

検証機材その1
CPU:AMD athlon 220ge 3.4GHz 2core 4thread
memory:DDR4 8GB
GPU:Onboard Graphic
OS:Windows10 on 120GB SSD
temp folder:500GB HDD
final folder:1TB HDD

検証機材その2
CPU:AMD Ryzen5 2600
memory:DDR4 8GB*2
GPU:GeForce gt710
OS:WIndows10 on 120GB SSD
temp folder:NVMe 1TB
final folder:1TB HDD

前環境のPCはマジでapache用のテストサーバーとしてしか使ってなくて放置していたため、OSが120GB SSDに入っていて、メモリーがちょっとだけ積んであるathlonを使いました。実際に1plotだけ作ってみて、所要時間とボトルネックの測定をしようと思っていただけです。
その2の方は今回少々機材の買い足しをしまして、それにおけるボトルネックを調べてみようと思い組みました.正直実際に作成してみないと実際にかかる時間とどこの性能を上げたらいいのかわからなかったため、適当に機材を揃えました。
んじゃあ、実際にかかった時間の記録を。

実測定時間等の記録

まずは最初のポンコツ環境の所要時間

1plot 101.4GiB memory 4GB 2thread
12h10min

これは、実際にプロット作成をしながらスペックの余裕を見ていたのですが、CPUの使用率が80〜90%と若干ですが空きがありました。ただ、瞬間的には100%に張り付くタイミングがあったので、少々CPUスペックは足りてなさそうでした。メモリーの方は割り当て自体はかなり余裕がある感じで、実際は2GBも使っていない感じでした。1番のボトルネックはtempファイルを置くスペースがhddだったという所でした。こちらに関してはRead/write共に100MB/sにほぼ常時張り付いてしまい、真っ先に修正すべき点でした。ただ、このままNMVeに切り替えてもCPUの余裕がなさそうだったので、CPUも同時に買い替えです。

では、2番目の少しつよつよPCでの所要時間

1plot 101.4GiB memory 12G 10thread
8h9min

タイムとしては4時間ほど縮まりました。これに関してはかなり良いタイムではないでしょうか。公式が書いていた9~12時間かかると言うデータはタイム的に切ることが出来ました。ただ、これに関しては、プロット作成をしながらPCの状態を監視していたのですが、NMVeの温度が75〜80度に張り付いてしまいました。ピーク時は92度という数字でした。自分としてはこの温度を見るとマイニングをやってるなと思って感動していたのですが、感動している場合じゃありませんね。
今回NMVeにはヒートシンクも取り付けておらず、転送速度に上限を設けていなかったのでこの温度になるのは仕方ないといった気分ではありますが。ケースファンも面倒だと思って一個も取り付けなかったので。

エラーに対するアクション

じゃあ、並行処理でplot作成をしてみたら所要時間はどうなるのかと思ってちょっと設定を弄って作ろうとしました。何回かやってるうちに色々なエラーに遭遇できたのでそれぞれ記録しておきます。

1.Error 1. Retrying in five minutes.
こいつは、tempファイルを作るディスクの空き容量がない場合に吐かれるエラーです。どうやら、plotファイルを作る際のtempファイルは終了時も消されないらしく、連続して5個目のplotファイルを作ろうとした時に怒られました。まあ単純に240GBぐらいのファイルを5個作れば1TBを超えるよなそりゃ。ただ、作成完了時にtempファイルを消してくれないと言うことを学べました。これは、将来的にLinuxでコマンドで作成する際はフォルダ分けして、作成完了時にrmコマンドを走らせた方がいいですね。今後のために忘れないようにしておかないと。

※追記
このエラーなのですが、2plotの並列でも同様の物を吐かれました。このエラー、引き起こされる要因は複数あるっぽいです。今原因を探していますが、NVMeのフォーマット形式が悪かったり、plot中にアクセスが省電力により途切れたり、メモリー不足により引き起こされたりと少々面倒そうなので調査しています。分かり次第追記します。
少々エラーを無理やり再現して分かった結果は、tempファイルを保存しているデバイスがplot作成中に取り外されるとこのエラーが吐かれるようです。今回自分の環境ではNVMeがWindowsPCIポートに対する省電力モードによって稼働可能電力以下まで落ちてしまい接続が切れてしまったのが原因だったらしいです。
解決策としては、Windowsの場合、「設定」→「電源とスリープ」→「電源の追加設定」→「バランス」の横の「プラン設定と変更」→「詳細な電源設定の変更」→「PCI Express」→「リンク状態の電源管理」→「設定」の項目を「適切な省電力」から「オフ」へ変更
これによりNVMeを接続しているPCIポートへの省電力モードがオフになります。
tempファイルを外付けドライブなどに保存している場合は、USBポートに対する省電力モードを切っておくとこのエラーは回避できます。


2.bad allocation errors
こいつは、メモリ割り当てが少なすぎるよって言うエラー。今回これを引き起こした理由としては、単純にplot作成時の設定で割り当てメモリの0を一個打ち忘れて、12000MBとしたかった所を1200MBと打ったことでした。まあそりゃ1.2GBでplotファイルを作れるわけないですよね。

3.そもそもNVMeがWindowsから認識しなくなる
これに関してはマジで原因がわかりませんでした。また、困ったことに治ってしまったんです。症状としては、
UEFIからNVMeが認識しない
・デバイスマネージャーから確認するとPCI portのNVMeに関するドライバエラーが出ている
WindowsはGUIDが記録されていればマウントは自動で行うため、ドライブとしては認識しているがアクセスが不可能
一時的にNVMeをメインPCに差し替えて起動確認もしたのですが、同様のエラーが出ていたところから、マザーボードやOS側のエラーではない事は確か。つまり、NVMe M.2がイカれた可能性が高そうです。差し替えて起動しない方が原因の切り分けは面倒だったので認識しなかった事で助かりはしたのですが、これはこれで面倒です。
考えられる原因としては、1番はやはり高温によりNVMeの稼働限界が訪れた可能性ですね。これはこの作業をやっていくにあたってかなり本格的に対策しないといけ無さそうです。ただ、何が面倒って、GPUと違ってNVMeは基盤に並行に貼り付けて使う形なので、どうしても冷却が完璧にできないという事です。一応小型FANがついているヒートシンクも売ってはいるのですが、正直小型FANでどうにかなるレベルを超えていそうな感想です。これに関しては対応を考えますが、簡単な対策ならM.2用ヒートシンクと高回転FANを買って風を直当てして無理やり冷却する、非常に面倒な対策としては水冷用M.2水枕を購入して一部簡易水冷を回すという方法。水冷に関しては必要費用がバカにならないのでやる可能性は低いですが、ヒートシンクで対応出来ないレベルでしたら対応策として考慮しておかないといけ無さそうです。あとは、PCI x16拡張ボードで本体から隔離してそちらで冷却機構を作る方法も良さそうです。まあ今後NVMeでraidを組む可能性が出てきたら拡張ボードは買わなくてはいけないため、そしたらその際にやろうと思います。

ちょっと技術的な事

エラーログとスペックの調整において多分知っておかないとキツそうな事をとりあえず見つけたので記録しておきます。元記事はこちら。

https://medium.com/geekculture/chia-network-plotting-optimization-7f0d6380eded

chiaのplotに置いて作り始めから作り終わりまでをphaseという形で管理されています。Logを見るに1~4があるらしいです。ただ、この記事を参考にすると、phase5が一応存在はしているらしいですね。内訳を要約して書いておきます。

phase1:plotファイルを作る際にどの計算をしなければいけないかリストとして出力するphaseです。このタイミングでtempフォルダに0byteファイルが大量に生成されます。ファイル名に計算内容が記載されています。また、このタイミングで割り当てメモリの確認も行われます。上記に発生したメモリ割り当てエラーなどはこのphaseで起こります。

phase2:ここでは演算を主に行なっているらしいです。あとは余分だった演算の削除を行なっています。ここのphaseが1番CPUを食っている印象があります。

phase3:ここではファイルの整理と圧縮を行なっています。一時的にphase2での演算結果は膨大なファイルサイズになっているので、それを可逆的な形式でコンパクトにしています。実際にどのようにファイルを整理しているかは元記事を参照していただければ。

phase4:ここでは最終的に圧縮と確認を行なっています。そして単一ファイルになるように調整しています。

phase5:tempフォルダからfinalフォルダに対して演算結果の最終ファイルをコピーするphaseです。このタイミングでhddの読み書きが初めて発生しています。


このロジックを理解していると、今後並列plotを作成する際にどのぐらい遅延を発生させるのがCPUとNVMe的に1番負荷がないかが分かるはずです。実際にデータを取っていないので現状は推測ですが、phase1.2では主にCPU、phase3.4では主にメモリとNVMeへのアクセスが高負荷になっている印象です。つまり、plot作成時にphaseと時間が対応するようなlogファイルを吐かせて、ちょうど処理が切り替わるタイミングで次の作業を開始されれば1番効率よく作成できそうです。ただ、logファイルを上から吐かせるならlinuxでの作業の方が自分は慣れているのでこれは作成用機材をlinuxに変えてからやろうかと思います。

最後にちょっとだけ

とりあえずwindowsで1TB分のplotはテストで色々弄りながら作り切る予定です。それが終わったら機材の調整をして、OSをLinuxに変えて環境構築をして、1TB分をpoolに入れて稼働させて収益を見てみようと思います。それ次第では追加で4TBhddを購入して一気に作成を始めようと思います。まあここまでは転がっているhddでのテストなので、追加投資している部分はNVMe 1TB・Ryzen5 2600・SSD 120GBの3つなので今後使い回しが効く機材です。まあこれだけでも28000円ぐらいはしているんですが。
あと、amazonでちょっと家に足りなくなってきたスペア部品を発注しました。具体的にはA320M-HDV R4.0という型番のマザーボードFSP 80+ 550W電源ですね。こいつら2つで10000円ぐらいです。これは今回外したathlonを刺して転がっているメモリを刺して、買ってきたSSD 120GBにOSを入れてplotが終わったHDDを稼働させるPCにする予定です。これも組み終わって調整ができたら記事にしようと思います。
正直机の横のスペースがなくなり初めて、作業用デスクを侵食し始めました。サブモニターも追加で欲しいし、必要な機材はめちゃくちゃ多いです。chiaの相場が落ちなければいいなぁと思いながらplotファイルを作っています。サーバー用機材も欲しいし、PC部品はいくら買ってもキリがないですね。
では、また進捗があれば記事にしようと思います。

それではまた。