時代に追いつくMining Log

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

Windows共有フォルダをUbuntuにマウントしてファイル送信を可能にする

初めに

なんでこんなことをしたかというと、chiaにおいて自分はplot機Ubuntuですがマイニングしている機材はWindowsにしています。hpoolのMiningツールをUbuntuで動かすのが面倒なのと、plot作成の管理やログ取りなどはUbuntuの方が調整しやすいからです。ただ、作り終わったplotファイルをhdd経由で物理的に移動するのは非常に面倒です。なんせplot機から毎回全部埋まったhddを抜いて差し替えないといけないからですね。そんなら、ローカルネットワークでWindowsの方のhddを全部共有して最後の出力先をそのhddに指定してやればいいんじゃないかという事でやってます。
じゃあ技術的な事へ。

Windows側の設定

まずはhddを刺してフォーマット・ドライブの割り当てを行います。なんか刺して「ハードディスク パーティションの作成とフォーマット」を起動します。フォーマットしてドライブを割り当てます。今回はとりあえずDドライブとしてフォーマットします。
そしたらWindows側で共有フォルダの設定をします。Dドライブを右クリックして「プロパティ」を開きます。
「共有」タブから「詳細な共有」を選択。
f:id:takaindex:20210614103931j:plain

「このフォルダーを共有する」のチェックボックスにチェックを入れ、共有名を適当に決めます。そしたら下の「アクセス許可」押します。
f:id:takaindex:20210614104003j:plain

その後、真ん中にある「追加」を選択。
f:id:takaindex:20210614104131j:plain

開いたウィンドウの下にある「詳細設定」を選択。
f:id:takaindex:20210614104201j:plain

そしたら、真ん中右にある「検索」を押して下にある検索結果から現在Windowsでログインしているアカウントを探して選択し、OKボタンを押します。
そうすると、「アクセス許可」の「グループ名またはユーザー名」の中に先ほど選択したアカウントが追加されているはずです。そしたら、追加したアカウントを選択した状態で下の「アクセス許可」の「フルコントロール」の許可にチェックを入れ適用します。

そしたら最後にプロパティの共有タブの下の方にある「パスワード保護」の中にある「ネットワークと共有センター」のリンクを踏みます。そうすると以下のようなWindowが開きます。
f:id:takaindex:20210614104908j:plain

その中にある「共有を有効にして、ネットワークアクセスがある場合はパブリックフォルダー内のファイルを読み書きできるようにする」にラジオボタンを変更して「変更の保存」を行います。

Windows側の設定はこれで完了です。
次はUbuntu側でマウントの設定をしていきます。

Ubuntu側の設定

こっちはコマンドで行っていきます。まずはネットワークドライブをマウント出来る様にするツールのインストールから。

sudo apt install cifs-utils

cifsでマウントをしていきます。sambaを使用してGUIでマウントすることも可能ですが、それだと再起動時に自動マウントの設定が面倒なので今回はcifsでマウントしていきます。

インストールが終わったらマウントポイントを作成します。自分は/mediaにplotという名前で作成しました。mkdirで作成してもGUIで作成しても問題ないです。

そしたらアクセス権限を付与しながらマウントしていきます。

sudo mount -t cifs -o username=***,password=***,file_mode=0777,dir_mode=0777 //192.168.1.***/D /media/plot

username,passwordはWindowsで使用している名前を指定します。2個目の引数は共有フォルダのディレクトリです。"//IP/共有ドライブ名"です。3個目の引数はマウント先のディレクトリです。
これ、アクセス権限をフォルダに対して指定しながらマウントしないと書き込み権限がUbuntu側に付与されず、plotファイルを作り終わった最後のcopyの段階で権限が無くて止まってしまいます。
なんか、/media/plotに対してchmodで権限変更をしてもmountした際に権限が上から変更されてしまい上手くいきませんでした。

mountコマンドがうまく走ったら、実際に/media/plot/にアクセスしてみてください。無事に中身が見れたら問題ないです。また、事前に空ファイルなどを中に作成出来るかどうかなどテストをした方がいいです。

実際にplotファイルを作成する際は、final directoryを/media/plotに対して指定すると勝手に向こうのPCに対して入っていってくれます。あとはhpoolのツールなどでDドライブを全部読み込むようにしておけば、plot機とMining機を分けたまま無限生成をしてくれます。

これに伴いお買い物した話

chia関係の機材は別の机にまとめて移しました。そしたら、反対側のサーバーラックからLANケーブルを引っ張って来なければなりません。plot機とMining機の2本を引っ張ってくるとコードでごちゃごちゃして嫌だなぁと思ったので、1本だけ引っ張ってハブで分けることにしました。それに伴い、卓上LANハブを1個買いました。NetGearの5portHUBですね。ちなみに、LANコードはcat6を100mリールで買ってあるので、チョキチョキしてかしめました。

組み立てた結果こういう感じに配置しました。

f:id:takaindex:20210613113629j:plain

悪くないですね。Mining機はhddを足すのが簡単になるように裸で置いてあります。ちなみに、電源スイッチは昔使っていたプッシュスイッチを無くしてしまったので適当にジャンパーしてブレッドボードに刺しています。電源点けたい時はブレッドボードに刺さってるジャンパーをショートさせる感じです。
足元にあるATXケースがplot機です。排熱の関係からサイドパネルは開けっぱなしにしてあります。熱が篭っちゃうから仕方ないね。

このちゃちいラックがいくつまでhddを置けるか見ものですね。非常に楽しみです。

また、本日DDR4 ECC REG 64gb*2が届く予定なので、届いたらXeon君に刺してtmpfsをやってmadMAxを走らせてみようと思います。temp1は256GBssdです。色々高かったです。半年ぐらい回せば回収出来るかなぁ。

それではまた。

Ubuntu版madMAxのインストールと実行、実証結果と考察

初めに

最近Twitterで爆速でplotファイルを作成できるmadMAxというplotterが非公式でリリースされたという噂を聞いて調べてみました。今回はそれに関して記事にしていこうと思います。

madMAxとはなんなのか

全phaseで全thread使用を可能にしたらしいです。それなら確かにphase2~4の時間が短縮できるといった訳です。自分はまだmadMAxが言っている理論速度まで届いていないので未だに調整を繰り返している段階ですが、それでも公式plotterよりも遥かに早い速度でplotファイルを作り続けてくれています。ただそれに伴い要求スペックがいい感じに高くなっているのでそこに関しては機材発注をかけようと思っています。

まずはgit clone

今回のお題のmadMAxのgithubはこちら
github.com
まずはインストールと実行に必要なライブラリのインストールから

sudo apt install -y libsodium-dev cmake g++ git

libsodium-devは暗号化用のライブラリ、cmake,g++はC++コンパイル関係に必要なソフト、gitはネットからソースコードを取ってくるのに必要なソフトです。
とりあえずこいつらをインストールしたらgitでmadMAxを取ってきます。

git clone https://github.com/madMAx43v3r/chia-plotter.git 
cd chia-plotter

chia-plotterというディレクトリが作られ、その中にmadMAx製plotterのソースコードがgitされます。
そしたら、コンパイルを通して実行可能状態にします。

git submodule update --init
./make_devel.sh

これでchia-plotterは実行可能になります。実行ファイルは./build/の中にchia_plotという名前で入っています。こいつに対して引数をくっつけてplotファイルを作って貰います。

とりあえずhelpをみて引数について考える

./build/chia_plot —help

これでhelpが実行されます。実行内容は以下のような感じ。

For <poolkey> and <farmerkey> see output of `chia keys show`.
<tmpdir> needs about 220 GiB space, it will handle about 25% of all writes. (Examples: './', '/mnt/tmp/')
<tmpdir2> needs about 110 GiB space and ideally is a RAM drive, it will handle about 75% of all writes.
Combined (tmpdir + tmpdir2) peak disk usage is less than 256 GiB.
In case of <count> != 1, you may press Ctrl-C for graceful termination after current plot is finished.

Usage:
  chia_plot [OPTION...]

  -n, --count arg      Number of plots to create (default = 1, -1 = infinite)
  -r, --threads arg    Number of threads (default = 4)
  -u, --buckets arg    Number of buckets (default = 256)
  -t, --tmpdir arg     Temporary directory, needs ~220 GiB (default = $PWD)
  -2, --tmpdir2 arg    Temporary directory 2, needs ~110 GiB [RAM] (default = <tmpdir>)
  -d, --finaldir arg   Final directory (default = <tmpdir>)
  -p, --poolkey arg    Pool Public Key (48 bytes)
  -f, --farmerkey arg  Farmer Public Key (48 bytes)
      --help           Print help

基本的に引数に関しては公式chia plotterと似たような項目が設定項目にあります。ただ、ちょっと違うのはtmpdir2に関する扱いです。plot作成におけるtempファイルは2箇所に分かれるのですが、madMAxがいうには25%はtemp1に保存し、75%はtemp2の方に保存して処理を行うらしいです。多分内部的には演算中の項目を毎回temp2の方にコピーをして処理が終わったらtemp1に戻して上書きをする感じなのでしょう。なので、今回madMAxではtemp2のRead/Write速度が求められます。madMAxは40分で1plot作成が可能だと言っていましたが、これはtemp2をtmpfsという物を使ってRAMメモリを一時的に物理記録ドライブのように使用する方法を用いています。そりゃPCIポートでの長期保存を前提としているnvmeよりも演算目的の一時ファイルの役割をしているRAMを使用した方がRead/Writeは早いわな。
ただこれ、tmpfsをtemp2に使用する場合、メモリ容量は最低でも128GBが必要になります。temp2は110GiB(=118.1GB)を必要とするため、それ以上の物理メモリを用意することになります。実際のところはplotterやOS、その他演算やCPU処理を行う領域も必要なため、デュアルCPUの場合128GBメモリでは若干足りないという記事も見かけました。これに関してはECCメモリを発注して届いたら実際に試してみる予定です。

引数設定に必要な項目を用意する

引数にpoolkeyとfarmerkeyが必要です。これに関しては、helpにも書いてあるのですが、chia keys showのコマンドで見ることができます。他にもSwar-Chia-Plot-Managerを使用している場合はLogファイルの上の方に入っています。ちょっと長めの文字列ですね。こいつらはcommandでplotファイルを作成する際は大体必要になるので、plot機のどこかに別途保存をしておくと楽かもです。

実際にplotファイルを作成してみる

実際にplotファイルを作成する際のコマンドは以下のようになります。

./build/chia_plot -n 1 -r 12 -u 128 -t /media/volume/1tb/ -2 /media/nvme/madmax/ -d /media/plot2/ -p *** -f ***

poolkeyとfarmerkeyは各自の物を入れてください。
自分は、mediaディレクトリの中に色々外部ディレクトリをマウントしています。
temp1は1tb HDDで、temp2は1tb nvme、final dirはWindows側の4tb HDDをマウントしてます。今回はそれらをターゲットとしてコマンドを走らせました。

  • nの引数は1で1個plotファイルを作成したら終了します。容量が埋まるまで無限に走って貰いたい場合は-1を指定すると無限に走ります。

plotファイルを作ってみた時のCPU使用率と速度に関して

2つデータを取ってみました。1つ目はtemp1とtemp2を同一のnvme内で指定した場合、2つ目はtemp1がhdd/temp2はnvmeを指定した場合です。
1つ目のログファイルを無くしてしましまったので正確な時間は出てこないのですが、同一にした場合は20000sec、別々にした場合は9803.6secでした。
内訳は以下のようです。
phase1:3053.88sec
phase2:3182.4sec
phase3:3449.68sec
phase4:117.659sec
2.7時間程度で1plotを作成する事ができました。また、全phase定期的にCPU使用率は全Thread100%に張り付くタイミングがありました。しっかり全部使って回っているらしいです。
この速度なら1日で8plotちょい作る事ができる速度です。公式plotterで並列処理をさせても1機で1日3~4plotが平均だったので倍ぐらいの速度でplotファイルを作成出来ています。ただこの速度だと5日で4tbHDDが埋まってしまうので投資量が凄い事になりそうです。

ただ、色々調べていると実際にはまだまだ早く出来るらしいです。madMAx製作者はtemp1をSSD*3 raid0でtemp2を110GiBRAMを使用して40分弱での作成が可能だったらしいです。他にもtemp1をssdでtemp2をnvmeにした場合は87分程度で終了したという情報もあります。まだまだ処理や性能を詰める余裕がありそうです。結局は記録デバイスへのRead/Write速度がボトルネックになっているっぽいですね。ただ公式plotterよりも断然速度が速くなっているので試す価値はかなりありそうです。

今後どうするか

とりあえずmadMAx製作者が試した環境が偶然にも昔作ったPCにかなり近いです。その子はXeon E5-2620v4を2つ積んでいます。製作者の方はXeon E5-2640v2を2つなので自分のより少しスペックが高いですが、スペック帯はXeonの中では同じぐらいです。だたRAMが圧倒的に少ないため、そこの部分を買い足して試してみたいと思います。こいつ、マザーボードをz10pe-d16 wsという型番を使っているのですが、ECCメモリしか認識せず癖が強いんですよね。ワークステーション系だから起動にも時間がかかるし、若干使い道に困っていた子です。たまに機械学習を専攻している知り合いにマイニング時代に使っていたGPUを刺して貸していました。最近は使っていないみたいなのでここらでちょっと酷使して貰おうと思います。排熱系統は機械学習の演算を想定してある程度しっかりと作っていたのでよかったです。
とりあえずAmazonECCメモリ128GB分の発注からかなぁ。SSDは用意してあるのでメモリだけなのですが、いかんせん値段が高くて。発注して届けば実際に組んでUbuntuインストールからやらないと。追加で色々金額がかかりそうですが、非常に面白そうなので全力でやってみたいと思います。公式poolとportable plotが出たらそちらに移行しようと思っていますが、それまではmadMAxとXeonで遊んでいこうと思います。

それではまた。

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に関する更新になると思います。何か情報があり次第更新する予定ですので、その際はよろしくお願いします。

ではまた。