時代に追いつくMining Log

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

chia plot作成におけるphaseごとのCPU/Memory使用率とhdd書き込み量の測定と考察

はじめに

今回は技術的な考察です。今回新規でplotファイル作成時のlogを取り、解析をかけたので参考になれば幸いです。ある程度しっかり考察を行い、最低スペックに対する考えなどをまとめようと思います。

まずは事前に参考にしたデータとサイト

現状、ネットに上がっているplot作成時の処理能力の変動とファイルサイズの推移などがあります。

www.reddit.com

Redditに一応上がっているやつですね。ただ今回、このデータが本当に正しいか、1.0.4の頃から1.1.7にアップデートして処理などが変わっていないかなどを含めて再度log取りをしてみました。また、このデータはplot作成に9時間弱かかっているのですが、今回1plot作成に7時間ちょいで終わったのでそれに関する比較なども出来たらと思います。他にも、このグラフをplotしたPCのスペックなども書いていなかったので、その辺も記載して比較出来たらと。ただ、データ解析は本職ではないので適当に書き連ねるだけです。

まずはplotLogを

f:id:takaindex:20210609102800j:plain
今回作成したデータはこのようになりました。データを取ったコマンドは以下の物を使っています。

pidstat -udhr -p **** | grep chia
cat /proc/cpuinfo | grep "cpu MHz"

pidstatでメモリーや記録デバイスのRead/Writeを取得しながらcpuinfoのlogファイルから全体のCPUの使用率を取得しています。取得してデータに変えたexcelファイルはこちらになるので、直接データを見て考察して頂いても構いません。

docs.google.com

ログを取った後に適当に平均値や数値を整えてグラフに起こしました。これと以前調べたphaseごとの処理内容を含めて考察していきます。

plot作成に使用したPCのスペックは以下の通りです。
CPU:Ryzen5 2600 (3.4GHz/TC3.9GHz)
Memory:DDR4 2133 16GB
tempFile:ADATA SC6000PNP 1TB NVMe
finalFile:ST4000DM004-2CV104 4.0TB HDD

なお、chiaに対して割り当てた性能は13Thread,13000MBとなっております。

考察

それでは考察をしていこうと思うのですが、各々のグラフに関してそれぞれ書いていこうと思います。

CPU

上から2つのグラフですね。上のグラフは12threadの使用率を平均とってグラフに起こしています。このデータにはchia以外にOSなどの処理も含まれております。そのため、余裕があるタイミングでも最低限回っている量があります。逆に下のグラフはchiaのプロセスのみのグラフになっています。ただ、pidstatでの%CPUの数値なので、要求時間などに関する数値です。そのため、2つのグラフを合わせながらデータを見ていきます。
以前phaseに関して調べた際、phase1のみマルチスレッド対応という記事は出てきました。このデータは公式なので間違っていないでしょう。実際pidstatで使用しているthreadを見ていると複数使用している記録が見れました。
逆にphase2~4はシングルスレッドしか使用していませんでした。ただ、どのthreadを使用するかはOSによる自動割り当てを使用しているらしく、定期的に使用しているthread番号が移動していました。多分余裕のあるthreadに移動しているんだと思います。

CPUを一番使用しているphaseは1なので、結局並列plotをする際はphase1が被らないようにdelayを指定するのは必須だと思われます。実際にphase1を複数同時に回すとCPUの性能的にplot作成時間は3割増しになります。その他のphaseはCPUはかなり余裕がある感じに見えるので、そのタイミングに次のphase1をぶつけるのは問題なさそうです。phase4で一瞬CPUが跳ね上がっているタイミングがあります。正直これは%CPUのグラフと比較すると外れ値だとは思います。考えられる可能性はほかのプロセスが一瞬暴れたとかそんなところだと思います。

phase2~4ではphase1の2割程度の性能しか使ってないので、本当に1threadだけ全力で回っている感じだと思います。

時間的にもphase1とphase3が同等の時間を使っており、その2つが一番時間がかかっているので、並列処理に関してはphase1を基準にずらしていくのが正解に思えます。
設定するthreadの量は全体の9割程度でいいと思われます。他のphaseではあまり使用しませんし、結局はphase1以外は1threadしか使わないため、1~2thread開けておけば余裕はありそうです。

Memory

モリーは3番目のグラフですね。メモリーも結局phase1が1番使ってますね。ただ、意外なのはphase3でもそこそこ使っていました。それに比べて、phase2では意外にも使用率が減っていました。メモリはphase1とphase3で使用していると考えると、遅延の時間を考えると使用率は1jobに対して全体の6割程度で収めておくとphase1とphase3がぶつかったタイミングでちょうど9割超えになりそうですね。phase2は処理時間が比較的短めのため、あまり他のphaseと重なることは考慮しなくて良さそうです。

plotファイル作成に関してメモリーは快適な最低限量などはありそうですが、無理に増やしても処理速度が上がるという訳ではなさそうですね。合わせて8~12GB程度あれば十分そうです。

read/write

読み込みに関しては、phase1ではそんなに行っていません。ただ計算結果を淡々と書き込んでいるだけっぽです。phase1の開始直後のWriteと終わり間際のReadのスパイクはredditの方のグラフでも同様のスパイクを起こしています。多分最初の書き込みのスパイクは書き込み用のファイルを量産している所でしょう。その後に順番に中身を書き込んでいるので、その後のWriteはある程度の量を維持しながら移動しています。
Readのスパイクに関しては何が起こっているのかわかりませんでした。ただ、phase1の最後に行ってからphase2に突入しているため、phase1が終わってから次のjobのphase1が開始するようにすればNVMeへの負荷が減るはずです。
phase2に関してはちょっと面白く、読み込みと書き込みを交互に行なっているっぽいです。phase2は末尾から逆方向に内容の確認と編集を行なっているため、部分ごとに読み込んで確認して書き込みを行なっているのでしょう。
phase3に関しては、データの圧縮を行なっているため、定期的に書き込みへのアクセスが発生しています。圧縮と書き込みを交互に行なっているのでしょう。phase1とphase3を同時に行うと書き込みの帯域が足りなくなる可能性が出てきそうですね。raid0で一応対応はできそうですが、コストに見合った速度が出るか疑問です。
phase4では特に何もして無いですね。最後に少し読み書きしているぐらいです。むしろ最初はアクセスをしていなさそうです。メモリー内のbufferだけで処理しているんでしょうね。
phase5はデータの移行phaseなので読み書き両方がしっかり出てきます。ここの速度はhddの方に引っ張られるためそこまで高い数値は出なかったです。

結局何が足を引っ張ってるのか

実際に実機でグラフを作ってみて分かった事ですが、NVMeに変えたことでボトルネックはCPUとなっていました。thread数はphase1にしか効かないため、1threadの処理能力がphase3で時間をかけてしまっているっぽです。そのため、chiaに合っているCPUはintel i3の第10世代などの低Coreで高周波数出るタイプなのでしょう。どうしてもphase1は時間がかかってしまいますが、phase3の時間を縮められると思います。あとは、正直plot作成用のPCを数用意するのが1番早いと思います。結局CPU1個の速度限界があるため、並行して複数PCを回すのが1番早そうです。最終的にできるplotファイルはネットワーク越しに別のPCに飛ばすようにすればplot作成用のPCはコンパクトに済みます。ただPC自体の寿命はどうしても縮むので、中古で買って使い捨てるのが良さそうですね。
あとは、OCをして無理やり高周波数を出す方法もありそうです。ただ、Ryzen系列はOCをした際に指数的に消費電力と発熱が上がるという欠点が昔からあります。そう考えると、OCをした際の排熱対策と電源容量の観点からOCしてまでやることかなぁって思います。

最後に

実際にLogを取ってグラフにした事で、ボトルネックが分かったり、遅延をどれぐらい入れれば最適かはわかった気がします。また、今後このログ作成に使ったshellスクリプト関係はgithubにあげて公開しようと思います。他にも、ログファイルからグラフを作るようにpythonでソフトも書こうかなぁと思っています。暇だったらですが。
自分の機材でログを取ることで、頭打ちになっている項目がわかるので機材の調整がしやすくなりました。今後どういう方向で機材の追加をしていくかなんとなくですがビジョンが見えたので良かったです。
ただ、plot作成が一時的にでも止まったのでちょっと今後は控えたいですね。作業量が増えました。

それではまた。

本日のお買い物と性能チェック、記録媒体の瞬間転送速度の測定方法

お買い物の内容

秋葉原にお買い物をしに行ってきました。買ってきたものはこちら
f:id:takaindex:20210605193034j:plain

上に並んでいるfanは8cmFanと12cmFanです。これらはインバースでジャンクで購入しました。各200円と安かったので合計6個買ってきてしまいました。帰宅して調べたのですが、8cmFanにはInWinのラベルが貼ってありました。ただ、表記してある型番をいくら調べても検索に引っかからなかったので回転数などは分りませんでした。一応Pinは4pinなので回転数制御は可能かと思います。本当は回転数を知りたかったのですが、分からないのでは仕方ありません。
もう一つの12cmFanはよくジャンクで買うと出てくるPowerYear製のFanなので調べたら結構データがありました。1800RPMの3pinFanでした。12cmFanはあまり高回転の物を求めていなかったのでちょうどいい感じですね。

予定ではペリフェラルから直接fan端子に変えるケーブルを使って電源から直接取り、hddに対するエアフローを作ってあげるイメージをしています。うまくhddとfanを置ける土台も作ってあげられればいいなと思っています。まあそれもhddの量が多くなってきたらにしようと思っています。

そして、今回の本命はM.2 SSD用クーラーです。AINEX製のfan付ヒートシンクですね。小型fanが付いているm.2ヒートシンクでは多分有名なやつです。値段は税込み1,958円でした。ネットならもう少し安く買えたのですが、出来るだけ早めに入手したかったので現地で買いました。早速取り付けて温度変化を見てみます。

f:id:takaindex:20210605211634j:plain

nvmeに取り付けられたのでマザーボードに取り付けて起動し、実際にplotファイルを作成してみようと思います。作成中のplotファイルは再起動後に再開することは出来ないので、切りのいいタイミングで再起動することをお勧めします。Swarを使用している場合、python manager.py stopのコマンドを使用すると条件を満たしても次のplotファイルの作成を実行せずに止まってくれます。stopを打ってから現在進行中のplotが終了するのを待つのが一番いいと思います。ちなみに、強制シャットダウンなどで中断されてしまった場合は、バグ回避のためにもtempファイル内は全部消しておくと良いかもしれません。

温度と転送速度の測定

温度は前回の記事で書いたxsensorsで監視します。転送速度はiostatコマンドで確認します。自分は確認する際のコマンドは以下のようにしています。

iostat -dmt -p /dev/nvme0n1 5

これで5秒ごとに情報が更新されます。

  • dは使用中デバイスのみを表示するオプション。
  • mは表示単位をkBからMBに変更するオプション。
  • tは上部に表示したタイミングの時間を追加表示してくれるオプション。
  • pは指定デバイスのみを表示するオプション。

末尾の5は5秒間隔で表示を繰り返してくれるという指定です。

これを繰り返し表示することでとりあえず現状の速度を見ることが出来ます。なんとなく便利ですね。解析用ログの出力もこれで行う予定です。

ちなみに、実際にヒートシンクを付けた結果、nvmeの温度は45度前後で安定していて、読み書き速度は瞬間的に360MB/sが出ています。ちなみに、サーマルスロットリングが発動していた時は150MB/sまでしか出ていなかったので一応速度は上がっています。ただ、これ多分まだ別の要素があって速度が出きっていない可能性がありそうですね。もう少し調べてみようと思います。

ただ、これに関してはもう少し解析に時間かかりそうだなぁ。記録デバイスの解析ってあんま慣れてなくて。

終わりに

とりあえず今回はヒートシンクを取り付けた結果温度が十分下がり、転送速度もしっかりと出たという事でした。また、瞬間転送速度の測定方法に関する記事がほとんどなかったのでそれについてまとめてみました。
ssd 性能測定」などで検索をするとベンチマーク関係の記事が多く引っかかってしまいます。ただ、Windowsのタスクマネージャーみたいな転送速度を確認したい場合はiostatコマンドで確認するしかなさそうなので、今回まとめました。参考になれば幸いです。

それではまた。

Swarの導入と設定、温度管理と今後の課題

Swarの導入

結局OSを色々往復した結果、plot機はUbuntu20.04に落ち着きました。今のところはですが。んで、何を使ってplotファイルを作成しようかという話。plot作成自体はchiaの公式ソフトをしようしているのですが、並列作成の管理をするソフトです。現状有名になって情報が揃っている物はSwar-Chia-Plot-Managerとplotmanという2つっぽいです。各々良い点はあります。plotmanは非常に細かく現状を把握でき、plot作成時のデータを解析に回せやすいように出力してくれているらしいです。Swarの方はWindows/Mac/Linuxでのクロスプラットフォームに対応しており、config.yamlが共通で使えます。そのため、plot機を複数用意する場合は導入手順が共通のため慣れにより高速化することが出来ます。また、plotの進行度の表示はかなりコンパクトにまとめられている為ssh経由で複数管理する場合かなり見やすくなると思います。それぞれ良い点はありますね。今回はSwarの導入をしてみました。状況次第でもう一台plot機を作成した場合はplotmanを入れてみようとは思っています。解析が楽しそうなので。

今回の導入において参考にしたサイトが複数あったので、そちらを下に貼っておきます。

こちらは導入の手順
hyperbanana.net

こちらは大まかなconfig.yamlの内容確認
hyperbanana.net

そして内容の細かな確認用に見たサイト
github.com

最後のは公式のgithubですね。結局最後には公式documentに落ち着くと。ただ、細かな英語が怪しかったので大まかに設定を把握できたのは助かりました。今回導入の手順に関しては上記サイトがかなり細かく書かれているので省略しようと思います。自分は追加で行った設定項目や、それ以外に追加でインストールしたソフトに関して書いていこうと思います。

Swarのconfig.yamlに関して

chia_location

これの場所なんですが、Ubuntuに関してchiaを導入する際はgithubをcloneするはずです。cloneした際、cloneコマンドを打ったディレクトリにchia-blockchainが生成されます。その下の/chia-blockchain/venv/bin/chiaにあります。plotする際のソフトウェアがこれですね。管理系ソフトはこいつをバックグラウンドプロセスで走らせるように作ってあります。

manager:check_interval

新しいplot作成を開始する前に待機する時間ですね。自分は処理が止まっているかどうかを頻繁に確認したいのでここを20秒に変えましたが、特に変えなくても問題ないです。

view:check_interval

Swarというソフトは、python manager.py viewでplotの進行状況を確認できますが、これが何をしているのかというと、Swarが作成したlogファイルを定期的にconsoleに出力している作りになっています。このログファイルの作成とconsoleの更新をどの頻度で行うかという設定です。標準は60秒で、60秒でも特に問題はないのですが、自分はlogファイルはかなり細かく確認するタイプなので20秒に変更しました。

global:maz_concurrent,global:minimum_minutes_between_jobs

自分はここの項目はmax_concurrentを5,minimum_minutes_between_jobsを5にしています。同時並行の処理の上限値の設定なので、特に設定をしておく必要はないのですが、現状1TBNVmeを使用しているため、tempファイルが200GB*5で容量がいっぱいになってしまいます。それの対策をするためにこの数字で上限をかけています。
一時ファイルは200~250GBまで一時的に膨れ上がります。今後実測値での最大値を把握しておきたいと思います。

jobs:memory_buffer,threads

使用するメモリとスレッド数の指定項目ですね。これはjobの項目ごとに管理されているので、threadに関してはjob間の合計数が上限を超えていても問題ないのですが、memory_bufferに関してはjob間合計値が最大容量を超えた場合bad_allocationを吐く可能性があります。一応気を付けて設定した方がよさそうです。

jobs:enable_cpu_affinity,cpu_affinity

ここの項目は手動で使用するcpuのスレッドを指定する項目です。自分は事前にOSやその他ソフトでのcpu使用率を調べた結果、0threadの使用率がちょっと高めだったので、1~10番目のthreadを手動で割り当てています。もしchiaに自動で割り当てて貰いたい場合はenable_cpu_affinityをfalseにしておくと自動で指定してくれます。


自分が追加で設定した項目はこの辺りでした。もちろんtempDirectoryやfinalDirectoryは設定しました。他の項目はかなり色々な記事にまとまっているため、そちらを参考にしていただければ。

温度管理とCPU使用率、メモリ使用率の監視

Windowsならタスクマネージャーなどで使用率を監視しますが、Linuxだとそうはいきません。一応システムモニターというソフトが標準で入っていて、こいつを使えば見れなくはないのですが、ちょっと見ずらいんですよね。なので、追加でソフトを何個か入れました。

xsensors

まずは温度管理のソフト。GUIで見やすくコンパクトにまとまっているソフトです。インストールから。

sudo apt install xsensors

これをインストールするとこのソフトのベースとなっているCUIで確認できるsensorsというソフトもインストールされます。どちらか見やすい方を使ってください。そしてら起動します。
GUIの起動

xsensors

CUIの起動

sensors

GUIは起動すると以下のようなWindowで情報を確認できます。
f:id:takaindex:20210604175336p:plain
ここでちょっとあれなのですが、Ryzen系列のCPUのCore温度はk10tempという表記で表示されます。
Windows用ソフトCoreTempほどいろいろな情報がみれるという訳ではないですが、非常にコンパクトなサイズで確認できるので、画面上で邪魔にならずに確認できます。

topコマンド

CUIによるプロセスごとのCPU使用率を確認できるパッケージです。Terminalでtopと打つとプロセス一覧と大まかなCPUやメモリー状態が表示されます。Coreごとに監視したい場合はtopを押した後に1を押してください。そうすればCoreごとの表示に切り替わります。これによりchiaが実際どれぐらいのcpuを使用しているか、止まっている際はこちらからでも把握することが出来ます。
topコマンド
f:id:takaindex:20210604225535p:plain
Swarでのview
f:id:takaindex:20210604225546p:plain

また、ここにおけるpidという項目はplotファイルの作成をしているchiaプログラムのプロセスIDとなっているので一致しています。そのため、どのフェーズでCPUを食っているかというのをこのpidを比較しながら把握することが出来ます。

今後の課題

温度を監視していると、nvmeが75度を往復していました。そして転送速度が150MB/s前後まで落ちていました。色々記事を探していると、50度後半あたりからnvmeにはサーマルスロットリングが発動するらしいです。サーマルスロットリングとは、高負荷により温度が一定以上になってしまった場合にCPUやnvmeにおいて発動する機能で、転送速度やCore周波数を制限する機能です。オーバーヒートによる故障を防ぐ安全装置みたいなものですね。自分は未だにヒートシンクを買いに行く時間が無くて、裸運用をしています。そのため温度を逃がす部分がないのでしょう。そのため早急にヒートシンクを買おうと思います。
また、それによりplot作成が遅れています。早く2tb分のplotを作ってhpoolにいれたいなぁ。

それではまた。

hpoolの状態とplot用PCのOS入れ替え、マイニングPCの作成など

初めにhpoolの状態

この前、hpoolは一時的に新規会員登録を停止していました。ただ、それは翌日には解消されていました。そして6/1現在、新規rigの登録を再開しました。どうやら二重マイニングの件を解決しきったらしいです。自分も新しく組んだPCを追加してみましたが無事登録することが出来ました。

公式poolに関して

公式poolに関してはgithubの更新を読んでいたのですが、相変わらず延期していました。portable plotは6月中のtestnetに公開、その安定稼働を確認した後に本番環境に移行するらしいです。まあ、まったりと待つしかないですね。公開され次第触ってみようと思っています。

OSに関して

plotを作成するためにUbuntuを入れたPCですが、入れ替えを決意した経緯を箇条書きしましと、
1.npmをアップデート来てるけど出来てないよっていう通知が出ました
2.バージョンを確認したらアップデートできていて、どうやらconfigフォルダを読み込めていないらしい
3.ディレクトリ権限を変更したのに同じエラーが出ます
4.configファイルごと消せばいけるよっていうredditを見つけたので消してみた
5.npmが認識しなくなった
6.git cloneからやり直さなければいけなくなった
7.nodeの更新をもう一回やらなければいけない未来が見えた
8.手に負え無さそうだし、Windowsに戻すか
こんな感じでした。ここまで1時間、インストールに1時間、Ubuntuの理論ボリュームを消すのに手間取って1時間、トータル3時間かけてWindowsに入れ替わりました。おかえり。

そして、hpoolの公開しているツール類ですが、こいつら、Linuxだとserviceとして起動しなければいけないらしいです。自分としてはserviceとdeamon関係って今までちょっと苦手で触ってこなかったんですね。若干食わず嫌い感はあるのですが。まあ、マイニングする側のPCは別にスペックもOSもこだわりがないので素直にWindowsを入れました。Windowsのインストール、chia関係だけで6回はやってるぞこれ。

マイニング機の作成

構成は以下のような感じです。
CPU:athlon 220GE
MB:A320M-HDV R4.0
Memory:DDR4 16GB 2133
SSD:ADATA 120GB
GPU:onboard
Power:FSP 80+ 550W
本当に最小構成ですね。メモリはこれしか転がっていなかったので、1枚適当に刺しました。予備のメモリを購入したら差し替えようと思っています。問題はこのマザーボードSATAポートが4本しかなく将来的には足りなくなりそうです。まあ5718円なので仕方ないですね。近々PCIe拡張カードSATAポート増設用ボードを購入する予定です。まあそれもhddが増えてきたら買う予定ですが。PCIeの帯域が足りなくなったら、次はUSB3.0SATA変換基盤の登場ですかね。先に拡張ボードが優先だと思います。電源もつかなぁ。ちなみにPCを置いている場所ですが、ATXケースしか余っていなかったので、サーバーラックの前に2台ケースが並んでいます。非常に邪魔。もう一箇所PC用の場所を作らないと。また、それ用にジャンクの安いモニターも買いたいなぁ。

plotを作成していてエラーで怒られたこと

chia公式のツールでWindowsでplotをparallelで作成していた際、Runtime error:bad allocationと怒られました。今回はメモリ割り当ての桁は間違っていません。なんでやねんって調べました。
どうやら原因は、
「parallelで作成する際の割り当てメモリは1plotあたりの割り当てメモリ量」
という所でした。今回実機は16GBRAMで、割り当ては12GB割り当てました。そしてdelayは90minで指定。1個目がメモリをフルで使っているタイミングで2個目のplotが作成開始しました。その際に追加で12GBを毟り取ってしましました。結果、1plot目が12BGを割けなくなってbad allocationを吐いたらしいです。
メモリぐらいトータルで割り当てられる量で指定させてくれよ!って感じですが、確かにperPlotで指定できた方が融通効くもんなぁって気分でplotを全部リセットして再開しました。このエラーの吐かれ方は想定外でした。ただまあ、前回bad allocationのエラーはメモリー関連で引き起こされるってことを調べておいて良かったです。それを知らなかったらもっと詰まっていた気がします。

それでもLinuxでchiaを弄りたい

これを機にdeamonやservice関係について学びたいと思っています。これが出来ればsshからログインしても状態を確認できるようになります。ただ現状実機は全部Windowsが入っておりplot作成に走ってもらっていますし、流石に現状PCパーツの余りは全部使い切ってしまっています。こんな時に出てくるのがRaspberryPiです。何度テスト機としてOSを焼き直された事か。実際にplotをする訳ではないし、マイニングをする訳でもないのでこの子で十分だと思っています。最近RaspberryPi用の64bitUbuntuが登場したらしいですのでこいつを焼いてテスト機として走り回って貰おうと思います。テストが出来て、上手く全貌を把握できたらまた報告しようと思います。とりあえずは焼き直してchiaをインストールする所からですね。

現状と今後どうしたいか

現状はこの前買った4TBをplotファイルで埋め切る為にplot作成用PCが火を吹いています。とりあえず2TBを超えたらhpoolに投げ込む予定です。2TBを超えてhpoolに投げ込めてマイニングが出来たらまた記事にします。

今後やりたい事は、
linuxでのplotmanという自動平行plotファイル作成ソフトの使用
WindowsでのSwar chia plot Managerというソフトの使用
・ネットワーク越しにplotファイルを作成機からマイニング機への自動移動
ここら辺を目標にしています。

将来的にUbuntuでplotファイルを作ることは諦めてません。Ubuntuならplotmanが実用性が高いらしいですが、こいつもserviceで動かすので、慣れないといけません。もう無理・・・
また、WindowsではSwar chia plot Managerというソフトがバックグラウンドで走るplotファイル作成用ソフトらしいです。ただ、本当にWindowsのcmdは慣れていなく、dirってなんやねんって状態です。とりあえず慣れなきゃいけない事が多いなぁ。

そして、本命のネットワーク越しにplotファイルの転送。これはまだ想定状態ですが、plot作成機からhddを抜いてマイニング機に移して配線するのが既に大変です。なら、初めからマイニング機に刺しておいてplotファイルが出来次第同一LAN内でデータを送って相手方のPCにコピーすれば良いんじゃね?という結論が出ました。案としては
・ネットワーク越しに相手のPCをマウントしてfinal directoryをそのディレクトリに指定する
・別のプロセスにplotファイルの作成ディレクトリを監視させて、新しいファイルが出来次第送り、ローカルからは消す
どちらか実現可能な方を採用しようと思います。もしこれができれば、plot作成機は完全放置で無限に作って貰うだけの奴隷になって貰えます。ただ、plot作成機からマイニング機のhddの残量把握などもしなきゃいけないので、そこをどうしようかといった気分です。
1.ローカルでftp環境を作って、とりあえず転送処理をかける
2.成功したらローカルから消し、残量不足により失敗したらローカルにファイルは残す
3.ローカルに数plot未転送ファイルが存在する場合はplotの新規作成を一時停止する
こんな感じで上手くいきそうですが、ある程度環境構築をしなければいけない、Windowsでのftpサーバーの構築という非常に面倒なことをやらなければいけない、この辺が難題ですかね。あとは、何本hddが刺さっているかを把握しなければいけないので、その辺のスクリプトも書かなければいけません。これはpythonとshellスクリプトの共存で書いた方が早そうかも。

上手くいけば公開しようと思います。

とりあえず次の記事はhpoolでの実際に稼働したよっていう記事になれば幸いです。失敗すると、またエラー吐かれましたっていう記事になります。

終わりにちょっと

記事を書き始めて数週間が経ちました。閲覧数は全盛期までは戻ってませんが、確実に増えました。閲覧していただきありがとうございます。これからも有益な情報と技術的な事を発見したら書いていこうと思います。
自分もプログラムを書いている際、よくわからない個人のブログが下手な公式ドキュメントよりも有益な情報を書いているパターンが多いので、自分のブログもそうなれればいいと思っています。

それではまた。

※直後追記
なんかUbuntuの情報が追加されたので、plot機を再びUbuntuにしてSwar chia plot Managerを導入しようとしてます。なんど往復するつもりなんだろう・・・

日記的な物だったりデスク周りの紹介だったり

きっかけ

昔の記事を遡っていたら、結構マイニングリグの画像を上げていたので、ちょうどchiaも一時休戦状態で書くことも少ないし自分の作業しているデスク周りの紹介でもしようかなと。ちなみにHPOOLは今朝確認したらアカウント新規登録は再開していました。(5/29現在)ただ、新規リグの登録には承認が必要らしく、とりあえずメインPCだけ追加してどれぐらいかかるのかを測ってみようと思います。承認は5/31以降に再開するらしいです。

いっぱいの写真と共に

自分のデスク周りは大きく分けて3区画ぐらいに分かれています。メインPCがおいてある1番よく座っているメイン机、そしてその横のサーバーラック区画、そして椅子の後ろにある昔GPU達をいっぱい並べていたメタルラックの物置です。
まずは引きの画像です。
f:id:takaindex:20210529162811j:plain

メインデスクのアップの画像を。
f:id:takaindex:20210529162823j:plain
画面は合計4画面で、真ん中のメイン画面はBenQの240Hzモニター。左の下は主にChromeを見るのに使ってます。この2枚がメインで作業をするのに使ってます。左上のモニターはステミキやタスクマネージャー、OpenHardwareMonitor、CoreTempなどPCの状態監視ソフトを常駐させています。結構この画面は自由に色々な監視系ソフトを投げ込むようになってます。そして、右の画面は間にhdmiスイッチャーを噛ませてメインPC・plotPC・nextcloudを稼働させているPCをスイッチングして使っています。スイッチャーはデスクの上に設置しているので、余っているポートにたまにRaspberryPiを接続して使ったりしています。最近はサブ画面でもう1枚買おうかと思っているのですが、ちょうどいいモニターアームがなくて困ってます。

使っている椅子はAKRacingのゲーミングチェアです。結構長時間座っていても疲れないので重宝しています。
キーボードは2つともメインPCに接続しています。片方はこのキーボード。
Amazon | Koolertron 片手メカニカルキーボード ゲーミングキーボード 43キー プログラム可能 Windows 7/8/10/Mac OS/Linux ホワイト・バックライト付き(Cherry茶軸) | Koolertron | パソコン・周辺機器 通販
ゲームをする時にしか使えませんので、プログラミング関係をする際はelecomのパンタグラフ式のタイピング重視の安いキーボードを使用しています。昔はメカニカルキーボードでプログラミングをしていたのですが、いかんせんメカニカルキーボードって数千字とか数万字をタイプするのにはむいてなくて、指が疲れちゃうんですね。なので、プログラミング用にパンタグラフ式の2000円ほどの物を買いました。

次は机の下に置いてあるメインPCのアップ画像。
f:id:takaindex:20210529162816j:plain
構成は以下のような感じです。
case:Thermaltake VIEW 37
MB:ASUS X570 Aqua
CPU:Ryzen9 3900X
Memory:16GB*2
GPU:gtx 1080Ti*2
Power:Platimax 1200W
Storage:SSD 500GB/HDD 1TB

このPC自体は2019年末に組んだため、ちょっと古くなってきてしまっています。ちょうどRyzen9 3950Xが発売決定する数日前に3900Xを買ったので、高値を掴んでしまった感じです。
マザーボードASUSが出した初の本格水冷用マザーボードですね。最近はいろんなメーカーが出していますが、こいつは最初のやつです。シリアルナンバーが刻印されているやつ。結局結構な数が売れ残ってしまったらしいですが。明らかに値段が高すぎたんでしょう。自分としては、UEFIの設定項目や性能などは満足する物でしたのでいい感じだったと思います。
GPUは昔1080Tiを1本で動かしていたのですが、性能が足りず2本目を刺してSLIにしています。ただ、SLIのプロファイル調整が非常に面倒で最近はちゃんと設定していません。ソフトによっては1枚しか動かなかったりと困ってます。3080/3090用水枕は買ってあるので、GPUの相場が落ち着き次第買おうかと思っています。

本格水冷はなんかいい感じに見えるように曲げました。ただ、ハードパイプってメンテナンス性がクソみたいに悪いんですね。本格水冷は2台目ですが、相変わらず組み立て終わると満足してメンテナンスをさぼってしまいます。もうそろそろクーラント液やポンプの掃除をしないといけません。

このPCは性能をある程度高い位置にキープしながら見栄えがいいようにしようと作ったので、2年ぐらいは現役で耐えてくれてます。ただ、もうそろそろ部品の買い替え時かと思っています。次はどんなのにしようか悩み中です。


次は机の奥にあるサーバーラックです。
f:id:takaindex:20210529162835j:plain
こいつはヤフオクで買った河村電気のITS-36-6017という36Uサーバーラックです。25000円ぐらいで未開封品を買いました。これしか自宅まで郵送してくれる運送業者を使っている出品者がおらず、運送業者にも「これ郵送先が個人宅ですが本当にあってますか」と聞かれました。確かに普通は会社のオフィスに入れるサイズですね。ただ、余裕を持って36Uタイプを買いました。実際24Uだとちょっと足りなくなる不安があったのでよかったです。

入ってる物は1番下にSilverStoneのケース、その上に1Uタイプのtp-link16portHub、よくわからない無名会社のATX用3UPCケースが2つです。
1番下のケースはXeonが2個乗ったPCで、主に機械学習をしている知り合いに貸しています。ケースの上は物置になっていて、RaspberryPiやNintendoSwitchなどが転がっています。16portHubは昔記事にしたやつですね。メタルラックに転がしていたやつをとうとうサーバーラックに取り付けることが出来ました。
その上のPC2つは、下はWindowsがサーバーとなっており、ゲームサーバーなどを知り合いに頼まれた時に稼働させているやつです。上のPCケースはnextcloudが稼働しており、hddが増設できるように今のところは天板が開くようにスペースを取っております。

その上に、1Uタイプの土台を設置して、3Dプリンターが置いてあります。趣味で色々作るようですね。案外PCケースの微妙に足りないアタッチメントを作るのに重宝しています。

その前にはATXケースでplotファイルを作成する用のPCが転がっています。ケース自体は知り合いから使わなくなったPCを回収して分解して流用したやつです。元々はめちゃくちゃ古いPCが入っていました。

plot作成用PCの中身はこんな感じです。
f:id:takaindex:20210529162851j:plain
Ryzen5 2600に転がっていたSeasonicの電源、画面を出力するだけ用のgt710と昔使っていた120G SSDと、burstマイニング時代に使っていた5インチ用HDD外付けベイを取り付けて稼働させています。画面はスイッチャーにつなげています。今は中身を調整しているので蓋を開けっぱなしにして稼働させています。将来的にはこれもサーバーラックに埋め込みたいと思っています。ただ、サーバーラック用ケースって結構値段が高くて、手を出せていない状態です。

そして最後に物置になっているメタルラックです。
f:id:takaindex:20210529162844j:plain
こいつは昔GPUをいっぱい括り付けていたやつですね。現状は物置になっています。上のマザーボードはマイニング用に今回買ったA320M-HDV R4.0です。その下の段には余っているメモリやSSD、HDDやCPUなどが入っています。このメモリー、DDR3やDDR2などが混じっています。
その下の段には分解された2台目のNintendoSwitchがあります。これは、SwitchにPC用CPUクーラーがつかないかと思ってケースを3Dプリンターで作っています。現状まだプロトタイプ状態ですが。
最下段には壊れたプリンターが転がっています。修理しようと思って半年経ちました。いずれね。

最後に

大体こんな感じです。こんな中でいつも作業しています。PC部品とコード類は結構余っていて、タンスの引き出しに眠ってます。ただ、毎回なにかしら足りなくて買い出しに行っている記憶もあります。全部揃ってないから余り物なんですが。
hpoolもchiaのpoolも更新がストップしていて何も出来ない現状、6月まで待つしかないのでこんな事を記事にしてみました。どんだけPCが転がってるんだって話ですが、趣味なので仕方ないです。趣味の物って増えてってしまいますし。

ちょっと追記

メインページの更新履歴の下にAdのいう項目をちょっと足して、GoogleAdsenseの広告を1個だけ入れました。ここ以外ははてなブログが勝手に入れてるやつですが、ここの広告だけは自分の方に直接入ります。googleには記事の中にも入れるといいよって言われますが、中に入れると読みづらくなっちゃうので絶対入れません。なんか気が向いたらそこの広告をクリックだけでもしてもらえると助かったりします。

次はhpoolに関する更新かplotmanに関する更新になると思います。何か情報があり次第更新する予定ですので、その際はよろしくお願いします。

ではまた。

Ubuntu20.04にchia GUIをインストールする

はじめに

とりあえずprotable plotが実装されるまで暇なので、plotファイルを作成していたPCからWindows10を消してUbuntuで環境構築をすることが目標です。
そんなに難しくなかったので、今回の記事はサクッとしてます。

とりあえずUbuntu20.04のインストール

jp.ubuntu.com
こちらからまずはUbuntu20.04のisoをダウンロードします。最新は一応21.04らしいですが、ちょうど自分のメインPCの中にあったのが20.04のisoファイルだったのでそれをインストールしました。多分20.10でも21.04でもそんなに今回の手順は変わりません。ただ、18.04未満のバージョンだとちょっと変わり、18.04だと追加でpython3.7のインストールが必要になってきます。これに関しては自分の使い慣れている物と手間と相談してください。
一応今回はchiaをGUIで操作したいので、UbuntuもServerではなくGUI付きのバージョンにしてます。

ダウンロードしたらisoファイルをboot出来るようにメディアに焼きます。自分はRufusというソフトをよく使ってます。こいつはRaspberryPiのOSを焼くのにもお世話になってます。
焼いたらインストールです。インストール自体はそんなに難しくないのでスキップ。インストールしたら各々IP固定やsshの設定などしてください。多分今後sshでの操作が便利になっていくと思うので。

chiaのインストール

debファイルもあるらしいのですが、いつもdebファイルはあんまりうまくいかない印象なのでcmdからインストールしていきます。
今回参考にしたサイトはこちら。
github.com

まずはapt-getの更新

sudo apt-get update
sudo apt-get upgrade -y

パッケージ内のデータを更新します。インストールしたてなので、中の更新はした方がいいでしょう。
そうしたらgitをインストールします。

sudo apt install git -y

次に、chiaをインストールするディレクトリに移動します。場所は好きなところで。移動したらgitでcloneします。

git clone https://github.com/Chia-Network/chia-blockchain.git -b latest --recurse-submodules

ちょっとだけ時間かかります。cloneしたらディレクトリを移動してインストール用に用意されたshellスクリプトを走らせます。

cd chia-blockchain
sh install.sh

インストールのshellスクリプトを走らせれば環境構築や必要なソフトのインストールはやってくれます。このインストールは内容が多いのでgitのcloneより時間はかかります。ただ、待っていれば終わります。
そしたら最後にactivateします。

. ./activate

chia GUIのインストールと起動

ここまででとりあえずchiaのインストールは完了してます。なので、CLIでplotやFarmingを行う場合はこの状態でプロセスを走らせれば動きます。ただ、とりあえず今までWindowsGUIを使って慣れているのでこちらでもGUIをインストールします。
install.shと同じディレクトリにinstall-gui.shがありますので、それを走らせます。

sh install-gui.sh

こいつもいい感じに時間がかかりました。終わればディレクトリを移動して起動してねって言われます。なのでそのようにやれば起動します。

cd chia-blockchain-gui
npm run electronic &

これで今まで見慣れたchiaのクライアントが起動します。ちなみに、末尾に&を付けているのでchiaはバックグラウンドプロセスで走ります。cmdを終了してもタスクとして走ってますので、終了する場合はタスクからkillしてください。
npmってなんのソフトかと思ったら、Node.jsのパッケージを管理してるソフトか。chiaのgithubちょっと興味あってみてみたけど、pythonがメインだけどjsやc++も使って書かれているんだね。

chiaのwallet引き継ぎ

WIndowsと同じwalletを使用するために、Seedを確認して入力します。以前作成したwalletがある場合、左のKeysから目のマークのSee private keyを押します。そうするとPrivate Key,Public Key,Seedが確認できます。今回はこのSeedを使います。24個の英単語のやつですね。
これをUbuntu側から入力します。
入力すると今まで通り使用することができます。

ただ、注意したほうがいい事として、Plotファイルを動かす際に前の機械からFarmingしているという情報を消してください。そうしないと二重マイニングになってしまいます。Plotからディレクトリを消して、HDDを新しい端末に刺し、PlotsのタブからAdd Plot Directoryを選択してplotファイルがある場所を選択します。
この際、新しく刺したhddはどこかのディレクトリにマウントしてください。マウントってなんじゃいって人に説明しますと、Ubuntuで外付けドライブをフォルダとして認識できるようにする際に必要な操作の事です。Windowsだと自動でDドライブとかEドライブとかに設定されるやつです。
出来る人はmountコマンドから、できない人はUbuntuにディスクというソフトが入っているのでそれを使ってGUIからマウントする事が可能です。マウントしたいパーティションを選択して下にある▶を押してフォルダを選択すれば出来ます。

Linux版chia-guiを使ってみて

本体ソフトの操作感はWindows版と全く変わりませんでした。ちょっとインストールが手間ではありましたが、chiaのディレクトリ構築はインストール時のログを辿っていたのでなんとなく把握することができました。plot時に使用するソフトの位置も把握できたので、コマンドラインからplotファイルの作成か可能そうです。これが出来れば今後はshellスクリプトとしてコードを書けるので、plotファイルをhddの容量がいっぱいになるまで自動で走らせる事が出来ますね。また、plot作成時のログも取得して整理しながら別ファイルに追加で出力する事も出来るので、並列作成する際のdelayも何分に設定すればいいかも決められそうです。

終わりに

とりあえず今回はファイルの移行だけをやりました。今後構築ソフトを弄りながらある程度の自動化を進めていこうと思います。それまでにportable plotの方のソフトも出して欲しいですね。また、Farming用の機材もAmazonから届いたので、組み立て次第そちらにもUbuntuをインストールして同一環境の構築をしていこうと思います。それまでにCLIでのchiaの操作に慣れればguiのインストールは省いても良さそうですね。

とりあえず今回はこんなところで。
それではまた。

chiaマイニングの現状と今後、hpoolの状態、そしてこれからやるべき事

初めに

今回の記事はあんまり技術的な事は無いです。githubの解読とhpoolの状態を監視している内容になります。

まずはhpoolについて

2021/5/25現在ですが、hpoolの新規会員登録が一時停止しています。理由はよく分かりませんが、止まっています。自分はhpoolにまだ登録していなかったので、正直こうなると登録再開してもどうしようか悩む状態です。理由は後述します。
また、5/22 16:00以降にアカウント登録した物に関しては、追加で認証が必要になっているらしいです。これに関しては自分はhpoolのアカウントがないので中の状態を確認できませんが、hpoolのお知らせに書いてありました。

公式poolに関して

どちらかというとこちらがメインの話題です。
現状chiaのテストネットでは公式poolの実装に関するテストが進んでいるらしいです。公式の呼称をそのまま流用すると、現状自分も含めてみんなが作っているplotファイルをOG plotと呼び、近々リリースされる新しいplotファイルの呼称はportable plotらしいです。
公式poolがリリースされるとportable plotでの採掘も可能になるらしく、個人採掘はOG plotとportable plotの両方が対応し、poolでのマイニングはportable plotのみが対応する形に変化すると記載されています。また、OG plotとpoortable plotの互換性はないらしいです。そのため、公式はOG plotからportable plotへの移行を勧めています。
portable plotの作成ツールは5/31までにgithubに公開されると言っています。そして公式poolのソースは6月以降にリリースすると言っています。

では、公式poolがどのような感じになるかという事ですが、githubのFAQには以下のように書いてあります。

Chia has three major differences from most other crypto pooling protocol: 1) Joining pools are permissionless. You do not need to sign up to an account on a pool server before joining. 2) Farmers receive 1/8th of XCH rewards plus transaction fees, while the pool receives 7/8th of XCH rewards. 3) The farmer with the winning proof will farm the block, not the pool server.

要点だけまとめると、
・hpoolやNiceHashみたいにアカウントを作らずにpoolに参加でき、chiaサイドが自動でマイナーに対して報酬を分配する
・マイナーはpoolに対してパワーを提供するのではなく、参加者全員が直接ブロックを採掘しに行く
・pool参加者が掘り当てた際に、掘り当てた本人は1/8の採掘報酬と手数料を入手出来、pool参加者は残りの7/8をパワーに比例して分配される
こういうことらしいです。
まあ確かに、今までに無い形のpoolで、かつセキュリティ的には秘密鍵を本人以外に公開しないという点ではかなり優秀な形になっていると思います。

現状のhpoolとchia公式の見解

githubを読んでて分かったのですが、hpoolが使用しているchiaクライアントは公式chiaが作成した物のソースコードを改変してhpoolへアクセスできる機能を追加した物らしいです。そのため、最初に秘密鍵の登録のステップなどが残っています。その後、hpoolへのAPI Keyを登録して掘り始める形になっています。chia公式はそこに対するセキュリティ的な危険性を指摘しています。まあ、利用者なんてそんなこと分かっているのですが。
また、調べていると他にも出てきたのですが、現状hpool自身がハッシュパワーの4割弱を保持している状態になっています。これはchiaに限らず全部のブロックチェーン系通貨に言えることなのですが、悪意を持ったマイナーが全ハッシュパワーの50%超を保持した場合、取引トランザクションの承認・改変が可能になってしまいます。今までの暗号通貨は競争率によってこの状況を回避してきたのですが、hpoolはこのまま唯一のpoolになってしまうとこの危険性が現れてきます。また、chiaに対する攻撃だけでしたら30~40%のハッシュパワーの保持のみで可能です。chia自身はこれを恐れている可能性がありますね。
3年前の記憶ですが、確かに仮想通貨が実装された時もこれに関しては話題になったのを思い出しました。もともと仮想通貨はトランザクションの承認を分散させる事によって相互に結果を確認し不正取引を防ぐことがコンセプトでした。確かに現状のchiaではこれの対策がちょっと怪しい状態にはなり始めていそうですね。

じゃあ自分としてどうしようって話

自分的にはchiaは久しぶりに見つけた面白そうな物なので、このまま廃れては欲しく無いですね。なので、公式poolが実装されたらそちらには移動していく予定です。
それを前提において、5/25現在から6月までに何をしようかという事。
・portable plotのソフトのリリースに対して準備しておく
・hpoolの会員登録は再開されたら作るだけはするかもだが、公式poolが実装されたらそちらを優先して使用する

予定ではportable plotのソフトは数日中にリリースされます。リリースされたタイミングですぐにplotファイルの作成に取り掛かれるようにhddの調整とOSの調整を行う予定です。具体的には、今後はplotファイルの作成もマイニングする機材もlinuxに変える予定だったので、このタイミングでUbuntu 20.04を実機にインストールします。自分としてはlinuxの方がコマンドラインssh系統が使い慣れているので。また、ログの監視や解析も行う予定なので、それを行うのならばlinuxでshellスクリプトを書いた方が慣れていて楽なので。
他には、ちょうどplotファイルを稼働させる側の機材も数日中に届きます。そちら側の組み立ても行い、Ubuntuのインストールを行いたいと思います。最終的には全部Ubuntuでの稼働を想定しています。WindowsはメインPCだけで十分です。自動更新切ったり省電力設定を調整したりしなきゃいけないし、そもそもUIで結構処理能力を食ってしまうのでスペック的に勿体無い感じがします。

公式poolが実装されたら本格的に報酬を得るために参加しようと思います。plotファイルの作成に関してはとりあえず1TB分だけ作って様子をその後見ます。報酬次第では追加投資も考えます。hddも安い所を見つけたので、損益分岐点はかなり低めになりそうです。
正直公式poolがどれぐらい報酬を吐いてくれるか分からないので、それ次第といった所ではあるのですが。ただまあ、今までに買った機材はまだ実用可能範囲に収まっているので、現実的にはまだchiaの触りぐらいにしかいない感覚です。

とりあえずportable plotのソフトがリリースされたら最速で触ってみて記事にしようと思います。

終わりに

今回は現状の解析と考察だけです。メモ書き程度ですが。

それではまた。