時代に追いつくMining Log

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

3Dプリンターが壊れたので修理しました

今回の話

今回はちょっとマイニングとは違った話です。というのも、hdd用のマウントトレイを作ろうと思って3Dプリンターを起動してステージの高さを調整しようとしたらY軸が動かないんです。最近まで小物を作っていたので、数日のうちに壊れたっぽいです。今回はそれを修理したって言う話です。いわば脱線です。修理した機体はAnycubic i3 Megaです。また、今回修理に当たって、3Dプリンターの購入からモデル作成まで色々教わっている電気工事系の資格を持っている知り合いに無限に世話になりました。何から何までお世話になってます。本当に助かってます。

まずは蓋を開けてみる

とりあえずどこが壊れているんだということになり、裏蓋を開けて基盤の確認です。Y軸が動かないということを言ったら、手で動かして動くのなら機械系統ではなく電気系統が壊れている可能性が高いため、とりあえずマザーボードにアクセスしてみろとのことです。んで、開けた時の写真がこちら。

f:id:takaindex:20210701112521j:plain

ちょっと手が映り込んじゃってますがご容赦を。中身ってこんな感じになってるんですね。普段機械系はPCしか弄らないためちょっと新鮮でした。真ん中あたりにあるステッピングモータードライバが悪い可能性があるから小さいファンを外してみと言われたのでとりあえず外しました。そしたら、こんな感じでした。

f:id:takaindex:20210701112607j:plain

なんか、ファンの真下の2個のドライバーが丸焦げです。どうやら、なんか金属片かなんかをファンが吸い込んでショートした可能性があるっぽいらしいです。見事にこんな丸焦げになってる基盤も初めて見ました。マイニングでGPUを焼いた時もここまでにはなりませんね。どうやらこのドライバーが各軸のモーターを制御して動かしてるようで、こいつが壊れたから動かなかったらしいです。写真を送ったら、これを交換すれば治る可能性があると言われたので、とりあえずAmazonで発注しました。

A4988というドライバーらしいです。ちなみに、静音化するなら下のものを発注してファームウェアを書き換えると良いよってお薦めされたのですが、今回はパスしました。

Amazonで発注したものが届いたので交換

まずは交換する前に電圧を測れと言われたので、久しぶりに電圧計を引っ張り出してきました。焦げたやつだけを外して電源を入れてドライバーに電圧計を当てろと。ちなみに、電圧計の端子でドライバー内でショートさせると火花散るか壊れるから気をつけろと脅されました。非常に怖かったです。昔AC100vをショートさせて思いっきり火花を散らしたことと、GPUに使われる8pin12Vをショートさせて火花を散らしたことがあったので若干恐怖症です。今回はなんとかショートさせずに測れました。電圧は一応記録しておきます。電圧を測定する場所は、ドライバー内の可変抵抗にプラス、マイナスを0番ピンのGNDに合わせます。
X:0.93V
Y:0.93V
Z:1.03V
E0:0.93V
E1:0.93V
どうやら、Z軸だけは左右のモーターでノズルを上下させるためこれだけ電圧が高く設定されているらしいです。これを記録しておいて交換後のドライバーでの電圧を調整するらしいです。
昔ラズパイを触ってなかったら本当にGNDも分からなかった可能性があったので、ラズパイで遊んでいたことが生きました。

そしたら、ドライバーをとりあえず全部外して新しく発注した5個を取り付けます。

ちなみに、ドライバーを外したら、こんな感じでした。
f:id:takaindex:20210701112613j:plain
なんか、焦げたドライバーの下のピンの受け口が溶けてます。しかも一部炭化してました。下のチップ抵抗とコンデンサーも若干煤けています。これに関しては交換部品が手元にないのでこのまま行きました。これで壊れたらさようならですね。

そして新しいのをつけた写真がこちら。

f:id:takaindex:20210701112555j:plain

見栄えが普通に戻りました。そしたら電源を入れて電圧を調整します。先ほど記録した電圧になるように可変抵抗をマイナスドライバーで回して調整します。ちなみに、電圧が高すぎると発熱で焦げるらしいです。低すぎると脱調するらしいです。結構微調整が面倒な感じでした。

あと、自分はやって壊したのですが、ドライバーを上下逆に取り付けて電源を入れると壊れます。刺す方向には注意してください。逆につけて電源を入れるとちょっと変な匂いがして、電圧を測ると数値が出ません。デジタル電圧計でディスプレイが表示されません。一体どういう状態で壊れるんだ。
一個新品を壊して、自分は使用前のやつに戻しました。さよならドライバー。これで手元10個のドライバーのうち3つが壊れました。

交換したら治った

ということで、交換してステージを移動させたら無事Y軸も動きました。一応テストで定番のフクロウさんも無事印刷出来ました。よかった。
ということで、元々印刷しようと思っていた物がこれです。

3.5" Vertical Hard drive mount Dual / Triple / Quad / Penta / Hex / 2 / 3 / 4 / 5 / 6 BAY HDD by xcooling - Thingiverse

まあ、結局今刷っているのはこれを元にして自分でモデルを作ったんですが。まだ3Dプリンターのサポート材の設定を全く詰めておらず、ネジ穴とか印刷できそうになかったので、ねじ穴なしでモデリングしなおしました。あと、12cmFanの増設も考えると自分でモデリングをした方が今後調整がしやすいので作り直しました。
こんな感じで縦刺しでhddを固定できると電源ケーブルの取り回しもSATAケーブルの取り回しもかなり楽になりそうです。また、拡張で縦に積めるように今後設計をしていこうと思っているので、上手くいけばかなり省スペースでhddを多く置けるようになりそうです。
現在ただhddを平で置いて積み重ねているので、発熱対策にもなりそうです。SeagateBarracudaのhddはあまり発熱しないのですが、TOSHIBAとWDのhddは発熱がそこそこやばく、ファンをしっかり当てておかないとちょっと怖いです。
印刷できて配置換えなどをしたらまた書こうと思います。

今回は3Dプリンターを修理したというお話でした。それではまた。

2台のplot機からのファイル転送の高速化

はじめに

現在自宅では2台のplot機が動いています。1台目はXeon君、2台目はRyzen君です。Miningをしている機械はathlon君です。そして、現在自宅のネットワーク配線はこのようになっています。
f:id:takaindex:20210625223403p:plain
この構成で、RyzenXeonがplotファイルを同時に作成完了してしまうとathlonの下り回線の所で1000Mbpsが原因で両機械からの上り回線が500Mbpsごとしか出ていません。転送速度としては62.5MB/sですね。plotファイルは基本的に108.8GBなので、なにが起こったかというとXeon君のtemp1のフォルダの中に転送が生成に追い付かなくなって完成したplotファイルが溜まっていくんです。理論上は62.5MB/sでも40分ほどで転送が完了するはずなのですが、なぜか1時間以上かかるんですよね。ネットワーク通信量を監視していると、5割ぐらいの時間が転送していないって事らしいです。
という事で、Xeon君自体は1hour/plotの速度が出ているのに回線に詰まるせいで実質3hour/plotの速度しか出てませんでした。困ったことです。というか、madmaxの仕様上512GBをtemp1にしていると2plot残った状態だと3plot目の作成は一時停止して転送に専念するらしいですね。容量不足が起こらないのでいい事です。

そこで、回線が詰まらないようにMining機のlanでの受け入れ口を2つに今回は増やします。

今回購入したもの

こちらです。一応1000M対応でUSB3.0に変換するRJ45コネクターです。Miningをしているマザーボードは流石に一般的に使うボードなのでethernetポートは1つしかありません。これじゃ受け口を増やせないので増設です。他にはUSB製のリンクケーブルでもいいかなと思ったのですが、フォルダにマウント出来ないとfinal directoryに指定できないかなと思いこの方法にしました。手動でコピーするならリンクケーブルの方が早いです。という事で、これをWindowsに設定していきます。

今回最終的に設置したネットワーク構造図

f:id:takaindex:20210626014002p:plain
このようになりました。Athlonから1本NetGearに生やして、Xeon用に用意しました。今回はこのWindowsに対する設定を行っていきます。
という事で接続した写真がこちら。
f:id:takaindex:20210626015354j:plain

Windowsの設定

基本的になんの設定をしていくかというと、静的IP設定とデフォルトゲートウェイの項目です。2つのLANポートにまずは別々のIPを割り振っていきます。ここに関してはWindowsにおける静的IP設定などと調べれば山ほど出てくるのでスキップです。
まずはどちらか外部とも接続するLanを決めて、そちらは普通にサブネットマスクデフォルトゲートウェイなども設定していきます。

そして、今回だとXeon用に用意したethernetの設定です。IPやサブネットマスクなどは通常通り入力するのですが、問題はデフォルトゲートウェイの項目です。今回ここは空欄にしておきます。
f:id:takaindex:20210626023918p:plain
そもそもデフォルトゲートウェイとは何ぞやって事ですが、こいつは送信時のパケットで宛先がローカルIPで無い物がソフトウェア側から発信された場合にどこへ飛ばすかという項目です。基本的には親機やルーターのアドレスを入力するはずです。今回サブのethernetを空欄にしておくことで外部への通信に関してはサブでは送り先が設定されていないためメインのethernetでの通信を強制することが出来ます。
ちなみに、サブネットマスクの項目は小さなネットワーク集団をどの規模でくくるかという項目なので、基本的には同一の内容で構いません。

今回このように設定した結果

両方ちゃんと接続できているかの確認としては、別の機械からpingを飛ばしてみる・実際にそのIPでマウントしてファイルを転送してみるなどがありますね。
今回はちょうど転送が残っているplotファイルがあったのでマウント時のIPを変えて再マウント、mvコマンドで転送してみました。
f:id:takaindex:20210626015944p:plain
イーサネット2が今回追加したLanの方です。しっかり受信量が1000Mbps出てますね。そしてマザーボード側のethernetは低い数値で推移しています。無事追加で接続したIPでの送信が可能になりました。この状態ならもう片方のIPは1000Mbpsがしっかりと余裕があるので転送事態で詰まることがなくなります。

次に出てきた問題

転送速度の問題は解決できました。しかし、解決したのにも関わらずXeonでのplotファイルが2個分スタックするタイミングが出てきています。これは何でかとMining機の方の状態を少し監視していました。そうしたら、HDDのアクティブな時間という項目が常に100%で張り付いてしまっています。そして転送が止まっている時間が存在しています。結局はHDDにおけるランダムアクセス性能の低さが出てるっぽいですね。そのせいで転送速度が1000Mbps出ていても書き込みが追い付かず受信側PCのバッファでデータが止まってしまっています。特に最後4plot分(残容量10%程)からランダムアクセス性能がガクンと落ちます。そりゃディスクの書き込める領域が散ってしまっているから仕方ないんですが。最初の方は書き込める領域が多いため書き込み速度もそこそこ出るんですが、最後数plotを調整しながら入れていくタイミングでスタックします。実際転送速度は2時間以上かかっています。

ざっくりとこれに対する解決策を考えてみました。
・plot保存用HDDをRAID0にして書き込み速度を上げる
・4TBHDDには36plot入るので、32plotほどはネットワークで転送し、最後4plotほどは別途hddから手動でUSB3.0接続で転送しネットワーク経由のplotファイル作成は次のhddに移行してもらう

ざっくりと考えた方法はこの2つでした。RAID0の解決策はplotファイルの保存先もまとめてマウント出来るためかなり楽なのですが、今後hddがもっと増えてくると電源容量の関係からスタッガードスピンアップの設定をする可能性が出てきます。

スタッガードスピンアップとは、hddは起動時に12Vを使用してディスク回転の初速を確保します。その後は5V電源にて回転を維持します。その12Vが複数HDDにて同時に発生すると起動時のタイミングのみで電源容量不足を起こします。ただ、5Vにて回転を維持しているだけなら消費電力は低いため回転さえすれば起動できます。それを解決する方法がスタッガードスピンアップという項目です。これをオンにすると接続しているhddを順番に回転させる処理をすることが出来ます。つまり初動の高電力のタイミングをズラすことが出来ます。これにより、SATA電源は基本7本分岐が限界なのですが、それを超えた分岐も可能になります。ちなみに、大体7本を超えて電源を1本から接続した場合、良くて電源が起動しません。悪いとコードが溶けるか火を吹きます。
この設定をする可能性がある場合、hddの起動タイミングがずれた状態でRAIDを組みたくはありません。うまくWindowsRAIDを構築してくれない可能性があるので。

という事で、床に転がっている1tbHDDの出番です。とりあえずこいつを全部plotファイルで埋めます。そしたら書き込みが遅くなったタイミングでXeonには次のhddに行ってもらいます。余った容量の所には1tbHDDを裸族で接続して手動でコピーします。これならマイニングも停止せずにXeonにも休ませずに無限ループが完成します。結局最後は手動で運んで転送ですね。

さいごに

なんか、結局Xeonのplotファイル生成速度が1hour/plot叩けても転送速度とhddのランダムアクセス性能がボトルネックになって速度が落ちるってむかつきますね。なんなんだって感じです。ただこれ以上は結局速度を上げてもhddの性能上速度が上がらないと分かったので現状の機材たちで何とか効率よく作成出来るように工夫してみます。危うく10Gbpsの沼に突っ込みそうになっていたので危なかった。あれを始めるとお金がいくらあっても足りなくなってしましますからね。

という事で、Lanを2本刺した話でした。それではまた。

思ったことを書き連ねるだけの記事

XeonPlotterについて

最近はずっとXeonが乗っているPCに悪戦苦闘させられています。なんか原因が不明のフリーズが多発してます。/var/log/syslogを頑張って解読しているのですが、今までこんな膨大なログファイルに目を通すことはなかったため、ログの量に圧倒されてます。また、フリーズのタイミングから掴めていないため、何時のログを読めばいいか分からず、調べること自体に苦戦しています。一応読んでいるとPCIeポートに対するログが山のようにループしていることだけ確認は出来たので、刺していたgtx1070を外して再稼働させています。plotファイル作成中に毎回フリーズし復帰不可能の状態になってしまうため、いくつもの作りかけのplotファイルがゴミ箱行きになってしまっています。早くエラー解析をして安定稼働して欲しいものです。Ryzen5の方は安定して起動しているため、OSのどこかが悪いというよりはどこかしら構成が悪い感じがしています。毎回同じphaseでフリーズしているならメモリ不足の可能性があるのですが、phase2かphase3のあたりで起こっているためメモリ不足では無さそうです。電源不足ならもっと別の挙動をするので、それでも無さそうです。
情報を集めていると一応NVIDIAのドライバー関係でフリーズを起こすという事もあるらしいので、GPUを外して安定すればラッキーと思ってテストしてます。Raidを組んでいるssdSATAケーブルが古くて断線している可能性も考慮しながら色々原因を探してみます。

また、NextCloudでmdadmを使用したraid構成を行なった際も発生したmd127問題も発生しています。もう昔すぎてどうやって解決したか忘れました。なんとなくそれっぽい方法で対処してみています。これも様子見ですね。

他には、Xeonが現状60min/plotの速度で作成できています。ただ、使っているLanHubが1000Mまでの対応なので、Mining機への最後の転送が125MB/sまでしか出ません。ここのせいで108GBのplotファイルの転送に時間が結構かかって困っています。正直これの解決策は10Gbps環境を構築することなのですが、あれって初期導入費用だけで数十万します。しかも、マシンを増設するとそれごとにPCIカードとSFP+を買わなきゃいけないのでお金が足りません。ある程度現実的な所が見えてきたら導入してもいいのですが、悩ましいですね。

また、Ryzenには現状NVMeを刺しています。これをXeon側のマザーボードに刺したらplotファイルの作成早くなるんじゃないかと思って一度ssdRaidと入れ替えて速度測定をしてみました。そしたら、なんとNVMeよりもssdRaidのほうがR/W速度が速いんですよね。そんなことあるわけないやろと思ってマザーボードの仕様書を読んだら、M.2スロットはngffというタイプらしいんです。ngffについて調べてみたら、M.2が出来る前のM.2の試験段階の規格名称らしいです。そのころはSATAと同じ速度しか出ず、基本的には無線Lanbluetooth用の拡張ボードを刺す用に作られていたらしいです。確かにそれなら転送速度はそんなに要らないよね。CrystalDiskMarkを回したら800MB/sぐらいしか出てませんでした。素直に諦めてXeonはssdRaidに戻しました。現状の60min/plotが手持ちの機材だと最速らしいです。

この機材、結構安定稼働させるの難しいですね。組んだ時に想像はしていたのですが、思った以上にメンテナンスをしなきゃいけないのにデュアルCPUのせいでメンテナンス性も悪く、結構使いづらいですね。ただ、相応の性能は出ているので1台あるに越したことはなかったです。まさかあの子も4年越しにフル性能を出せるとは思っていなかったでしょう。

Ryzenに関して

こいつはXeonに比べて本当に安定して稼働してくれています。ただ、CPU性能がちょっと低いせいでplot作成時間は180min/plotです。遅いけどほぼ放置で回ってくれているので安心して放置できます。マイニングにおいて安心して放置できるのは本当にポイント高いですね。こいつのおかげで最低限のplotファイル作成が維持できている感じです。本音を言えば、120min/plotぐらい出て欲しいですが、Ryzen5 2600の限界ですね。RamDiskを導入すれば少しは早くなると思いますが、これもかかる費用が半端じゃないのと、マザーボードがDDR4スロットが2つしか無いため断念です。Xeonみたいに16スロットあると楽なのですが。

Mining機に関して

こいつはathlonなのでそもそも性能がポンコツです。ただまあ、plotファイルの読み込みに性能はいらないので実際十分でした。ちょっとマザーボードの拡張性が悪いのが難点ですが、まあそれもSASカードでカバー出来たので現状問題はありません。
こいつは本当にケースに入れなくて正解でした。頻繁にSATAケーブルを差し替えるので、その度にケースパネルを開け閉めしてることを想像したら吐き気が。
4TBhddは先ほど6,7本目を買ってきました。現状5本刺さっていて、plotファイルも5本目にちょうど突入した所です。ストックがなくなると不安があったので、予備で2本購入です。とりあえず現状hddは目標100TBとして増設をしています。100TBがplotファイルで埋まった時にどれぐらい収益が出るのか楽しみです。
SASに関しては思ったより安定していて驚いています。まあまだ刺している本数が少ないのもありますが。増えたら起動タイミングをずらすソフトを入れないといけないのでちょっと面倒です。まあ、それはその時に考えましょう。エキスパンダーは思ったより早く導入のタイミングが発生しそうです。その際はまた書く予定です。 マイニングの頃に使っていたライザーカードが使用できるらしいので、久しぶりに引っ張り出してこないと。

chiaに関して

ただ、公式poolはまだかといった気分です。早めに来てくれないとplotファイルの作り直しがあるので時間がかかります。
他には、相場がそこそこ下がってきましたね。仕方がないことですが、上がってくれると助かります。逆にNetSpaceは異常なほどの上昇率が収まってきました。一部のchiaブームが終了したかな?多分、冷静に分析すればhddの買い足しに対する損益分岐点が高すぎて買うのをやめた層が多いだけなのでしょうが。これは助かります。当選確率が少しでもマシな感じになるので。

結局のところ

自分の機材では30plot/dayが限界っぽいです。メインPCを使用してもう少し加速させてもいいのですが、本格水冷でX570 Aquaを使用していて、最近ラジエーターの性能が落ちてきて、クーラント液も質が悪くなってきているため、あまり酷使したくありません。あの子が死ぬと自分ごと死ぬので。CPU温度が上がり過ぎると、冷却経路的にGPU2本もまとめて壊れます。そしたら本格的に終わりです。そうはなりたく無いので、メインPCを使用するとこはなさそうです。他にも何台かPCはあるのですが、性能不足かサーバーとして使用しているかの2択なので、これ以上増やせなさそうです。
あとは、どれだけ安定構成に変えて30plot/dayを維持できるかですね。メンテナンスフリーで完全に安定すれば、final directoryを定期的に変えていくだけで無限生成できます。本当はdirectoryの空き容量を監視しながら上限にきたら次のhddに自動で切り替えていくようにすればもっといいのですが、2台でそれを安定して共有させるのは難しいので大変です。plot先を完全に分ければ可能ですが、そんなにhdd余ってません。ただ、一応現状はそこを最終目標に置いています。そこまで出来れば、Mining機のみを弄るだけで完結しますし。出来そうな気はするんだけどなぁ。
一応可能そうな構想としては、Mining機から残容量を記録したtxtファイルをローカルネットワークに保存して、108GBで割った保存可能plot数の3/4をXeonのmadmaxで開始、1/4をRyzenで開始して、一通り終わったタイミングで容量を再度チェック。残plotが2個以内の場合はRyzenは次のhddに移ってもらって、Xeonは残りの端数を埋めてから次のhddに取り掛かるって感じ。ただ、お互いにmadmaxの進捗を確認できないから同時に終了してhddには1plot分しかスペースがないってタイミングが発生すると例外処理をしなきゃいけなくなるんだよなぁ。そこの処理が本当に面倒だから、いまだに手をつけていません。いつか上手く作れるといいなぁ。Swarで管理すれば一応監視できるのか?ちょっとログファイルとソースコード見てみないと分からなさそう。

とりあえずはこんなところだと思います。また何かあれば書こうと思います。

それではまた。

SASの導入を

SATAに関して

現在使用してるマザーボードがA320M-HDV R4.0というマザーボードでマイニングを行なっています。しかしこのマザーボードSATAネクターが4本しかありません。A320チップセットなので仕方ないのですが、現状OS用SSDと4tbHDDが3本と全ポートを使用しています。この状態で4本目のhddを接続することは不可能です。SATA通信ケーブルは分岐させることも出来ないので詰みです。
そこで、ここから取れる選択肢はいくつかあります。
USB3.0による外付けHDDで増やしていく
・PCIeポートを用いてSATAポートを増設する
・M.2ポートを用いてSATAポートを増設する
・PCIeポートにSAS拡張ボードを刺して無限に分岐させる

今回選択した基準としては、hdd1台あたりの増設単価が低いもの・コードが増えにくい物という2点でした。最初はUSB3.0を使用することを考えました。この場合、UBSハブとSATA-USB変換機を購入するパターンです。1番簡単で手軽なパターンですね。しかし、これに関しては色々欠点がありました。USBハブは7portが2,100円ほどで購入出来るので、USB3.0port単価が大体300円ほどです。そしてSATA-USB変換機なのですが、これが曲者で3.5インチhddは起動時のディスク回転初動に12V電源を使用します。その後回り始めたら5V電源にて回転を維持・制御してディスクが回ります。USBは規格上電力端子は5Vまでしか電力供給する事が出来ません。そのため、スタートアップの電力をUSBバスパワーで供給することは出来ません。中に変圧器を内蔵すれば可能かも知れませんが、導入コストの高さから製品化されていません。2.5インチHDDならば5Vのみで稼働可能なので2.5インチ用のSATA-USB変換機は存在します。しかし、3.5インチ用SATA-USB変換機は12V外部電源を必要とするモデルしかありません。その場合、12V電源の分岐ケーブルやAC-DCコンバーターが必要となってきます。こいつがめちゃくちゃ場所を取ります。自分としてはデスク上はあまりAC電源を分岐させたくありません。というか、AC電源のハブが足りないのでAC電源からもう何も供給したくありません。また、SATA-USB変換機の単価は大体1,000円ほどなので、1台の増設単価が約1,300円ほどになります。これを4tbHDDで取り返そうとすると1ヶ月はかかってしまいます。ということでこの案は却下です。

次にPCIe拡張カードを用いたSATAポートの増設です。一応玄人志向が10port増設カードを出しています。

これですね。これもかなり考えました。1port単価が600円ほどです。電源は現在使用しているPC用パワーユニットでギリギリ足りそうです。ただこれの問題は、PCIeポートが埋まった際です。現在のマザーボードはx16が1つとx2が1つしかありません。頑張れば2枚刺せますが、20本というのはこの調子だとすぐ埋まってしまいそうです。そうするとPCごともう1台用意しなければいけません。導入コストがやばいですね。またこれの問題は他にもあり、このタイプの無理に増設しているタイプのボードはかなり相性問題を引き起こします。CPUやマザーボード・使用メモリやBIOSによっては認識しないというパターンがかなりあります。他に1番の問題は、世の中にほとんど在庫がありません。まあ需要がないからね。ということで最有力候補ではあったのですが却下されました。

次のM.2ポートでの拡張ボードです。これはそもそも論なのですが、M.2ポートが1つしかありません。そして、最大でも4ポートの増設しか出来ません。それならPCIeポートを使うわって話です。ということで、かなり早い段階で却下です。

結局、今回採用されたのはSASによるSATAポートの拡張です。これに関してはあまり最初は乗り気ではありませんでした。というのも、SASに関する知識が全くありませんでした。なので買い間違えなどを恐れていました。しかし、今回このブログで相互リンクを張って貰っているbananaさんにTwitterで助けをもらい、なんとか買い間違えも起こさず導入する事が出来ました。
助けてもらった際のツイートはこれですね。

どうやら、SASにはHBAカードという物とエキスパンダーという物があるらしく、LANでいうルーターがHBAカードに当たり、Hubがエキスパンダーに当たるイメージです。PCIeスロットにはまずHBAカードを刺し、miniSASとPCIeの変換を行います。そこから端子数を増やしたい場合にエキスパンダーをminiSAS-miniSASケーブルを用いて増やし、最後にminiSAS-SATA*4ケーブルを用いてSATAケーブルに変換します。
つまり、初期導入に必須な物はHBAカードとminiSAS-SATAケーブルです。miniSASポートが足りなくなってきたらエキスパンダーとminiSAS-miniSASケーブルを購入する感じです。

ということで、今回はこれらを購入しました。

オススメされたモデルです。一応、エキスパンダーを使用して最大SATAバイスは256個まで認識するらしいです。当分SATAポートに対する懸念事項が解決されましたね。また、刺しただけで反応したので優秀でした。ドライバーなんて要らなかったんや。
f:id:takaindex:20210619103631j:plain
1日で届きました。Amazon優秀。

まずは開けて、PCIカバープレートを外しました。マザーボードを平置きしていると、PCIカバーって結構机と干渉して邪魔になるんですよね。ということで、一度PCをシャットダウンしてPCIポートに刺しました。このボード、PCIe*8タイプですね。久しぶりに見ました。
ということで、追加でfanも何個か電源に刺して配置した写真がこちら。

f:id:takaindex:20210619103710j:plain

HBAカードは結構熱を持つらしく、しっかり発熱対策をした方がいいというアドバイスを事前に貰っていたので、直接当たるようにfanを置きました。また、hddの熱もTOSHIBA製のみバカみたいに熱くなってしまっていたので、そこら辺にも当たるようにfanを置きました。

適当に接続した割には簡単に認識してくれました。こいつ優秀。
しっかりhdd4本目が増えました。ということで、自宅にもSASケーブルが導入されましたとさ。

このケーブル、どこか動画で見たことある気がすると思ったら、大型ファイルサーバー系のhddに大量に繋がってるやつだ。流石に個人宅に導入するタイプじゃ無さそう。

ということで、無事SATAポートの問題が解決されました。

ちょっと最後に

madmaxの管理用シェルスクリプトを現在書いています。自分は結構plotファイルの保存先を頻繁に変えながら容量の調整をしているため、正直毎回poolKeyやfarmerKeyを書くのが面倒になってきています。そこでシェルスクリプトでショートカットを用意して引数をコンパクトにまとめようとしています。現状かなり完成はしていて、最後動作確認の段階まで来ています。完成したら記事にまとめて他の人でも使用できる形に書き換える予定です。少々お待ちください。
一応完成したスクリプトをscreenを使って裏で常時稼働するようにすれば問題なくsshでも進捗を確認できるようになるので、そこまでを想定して作成しています。

それではまた。

とりあえずの安定とchiaの現状について、また今後の課題

初めに

最近はずっとハードウェア面での安定稼働を目的としてずっといじくり回してました。それがとりあえず安定してきたのでやっとこさ記事に出来ます。

現状

現状、plot作成は2機をずっと回しています。また、別にhpoolのマイニングソフトを常駐させているPCを1台置いてあります。
マイニングPC
AMD athlon 220GE
DDR4 8GB

1機目
Ryzen5 2600 6C12T
DDR4 16GB
temp1:1TB HDD
temp2:1TB nvme

f:id:takaindex:20210617112939j:plain

2機目
Xeon E5 2620 v4 * 2
LRDIMM DDR4 128GB
temp1:SSD 256GB * 2 RAID0
temp2:RAMDISK 110G

f:id:takaindex:20210617112954j:plain

こんな構成で回しています。両方ともmadmaxで回しており、Ryzen5の方は空き容量が多めのディスクに対して余裕を持って作成してもらい、Xeonの方で最後数plotの容量調整を行ったり、調整が終わったらRyzenと同じディスクに作成したりしています。

現状70plotほど作成し、1plot作成平均時間は以下のような感じになっています。
Ryzen5:13000sec
Xeon*2:3600sec
大体3時間半と1時間ですね。1日あたり大体30plotの作成が可能です。ただ、実際はディスク操作をしている時間やファイルを動かしたり整理したりしている時間があるため、25~28plotで止まっています。

HDDは1番tb単価が安めの4tbHDDを使用しています。ただ、マイニングに使っているマザーボードSATAポートが4本しかなく、OS用SSD128GBと4TB*3で埋まってしまいました。増設が急務です。

現状投資額はchiaにしか使えないような機材のみで62,000円ほどです。1日のhpoolでの報酬は0.0017XCHほどなので、50円ほどですね。報酬量はかなり下がってきてしまっています。まあ仕方ないと言えばそうなのですが、HDDの変動費が現状18,000円程度、空き容量をplotファイルで埋めたとして報酬量が60円ほどと考えると元を取るのに300日ほどかかってしまいそうです。かなりしょっぱいですね。だからといって報酬量が上がる訳でもなく、diffが下がることを祈るしかないですね。
最近米アマに中古HDDが流れ始めたらしいので、一部層は撤退を始めているっぽいです。そりゃそうなるわと言った感じです。公式poolもリリース延期が長く、madmaxの開発によりchiaはベンチマーク大会状態、ネットスペースは増加速度が上がっている状態です。ちなみに、海外で1plot最速作成記録は15minらしいです。爆速ですね。機材の金額計算したら250万円を超えていましたがXeon Gold2個ってなんじゃい。

RAMDISKでハマったこと

積んでいるメモリーは128GBです。RAMDISKで110GB取られます。OSで数GB持ってかれます。phase1で32thread動かすため15GBほど持ってかれます。結果メモリー容量はかつかつです。
その状態でmadmaxにて連続plot作成をするとどうなるでしょう。1個目のplotファイルが作り終わりコピーの作業をしている途中に2個目のplotファイルを作り始めます。ファイルのコピーはバッファとしてメモリーを使用します。メモリーが足りません。Ubuntuが処理落ちします。
この原因を突き止めるのに何時間かかったことか。madmaxが強制終了するんです。ひどい時はUbuntuが落ちてマウスカーソルしか動かなくなります。操作は受け付けません。

悩んだ挙句、解決策としてはbucketsを128から256にあげてplot作成側の使用メモリを下げました。これでなんとか128GBで連続作成が安定しています。plotファイルも問題なく使用できています。

今後の課題とどうすべきか

とりあえずはportable plot待ちですね。ただ、hpoolとmadmaxは一時的にでも使えなくなるタイミングが発生すると思うので、そのタイミングでどうしようかと未だに悩んでいます。一旦は公式plotterで作成するタイミングが出てくると思います。その際はまたそれに関して書きます。hpoolの出金条件もありますし、少しhpoolに囚われることになりそうです。容量増やしすぎるとportable plotの作成に時間かかるしなぁ。
SATAポート不足に関しては、PCIe拡張カードを使用してSATAポートを増やすか、USB3.0でHDDを外付けマウントするか悩んでいます。電源ユニットの容量の関係もあるので、結構悩ましい所です。今後どこまでHDDの量を増やすかによっても変わってくるので。
また、HDDの発熱もやばくなってきました。HDDのマウントトレイも作成しなきゃいけなさそうです。ただ、今3Dプリンターのフィラメントが湿ってしまっているので、新しいフィラメントを買わなくてはいけません。そこら辺も考慮して早めに対策をしなければ。

最悪の場合ですが、chiaの報酬量が投資額の回収を見込めないと判断した場合は撤退の可能性もあります。あまり考えたくはありませんが、流石にネットスペースとdiffが上がりすぎです。まああまり撤退は現状考えてはいません。chia miningが面白そうだとまだ思えているので。

結局は心を無にしてHDDを買い、plotファイルを無限に作成し続けるだけっぽいですね。GPUマイニングの頃に比べたら部屋の気温もそこまで高くならず、消費電力も100V電源で済んでいるのでかなり良心的に思えます。とりあえずは100TBを目標に据えてHDDを探して巡ってみます。chiaから撤退した時に100TB分のHDDなんてどうしよう。

それではまた。

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で遊んでいこうと思います。

それではまた。