時代に追いつくMining Log

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

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本刺した話でした。それではまた。