見出し画像

CHIA Plot Settings (その1)

(この記事は 2021年5月 くらいの情報です)

CHIA の Plot は時間がかかりますね。
そんなわけで、どういう設定が効率よいのかを探ってみました。
本当は mining 関係まとめて記事にする予定だったけど、面d^H^Hここの情報だけ有益そうなので先出し。

環境

利用したのは以下の機材です。
 [ CPU ] Intel Core i7-11700K
 [ MEM ] DDR4-3200 64GB (32GBx2) Gear-1
ストレージ
 [ NVMe ] SSD - NVMe(Gen3) : Sundisk Extreme Pro 1TB
 [ SSD ] SSD - SATA6G :  SanDisk SDSSDH31000G (Ultra 3D 1TB)
 [ HDD ] HDD - SATA6G : WDC WD120EFAX-68UNTN0 (WD Red Plus 12TB)
 [ HDD(-t) ] HDD - SATA6G : WDC WD40EZRX-00SPEB0 (WD Green 4TB)

NVMe と HDD(SATA) はチップセット接続(のはず)、SSD(SATA) は(CPU の) PCIe の SATA ボード経由です。
HDD は両方 CMR っぽいです。SMR の HDD 別マシンに移動しちゃったので検証不能。。。
plotter は HPOOL の v0.11 を使っています。

(できるだけ何もしないようにはしてるけど)同じ PC で多少の作業をしていたりはするので、基本的には「傾向」を見るためのデータだと思ってください。
あと、同条件で計測しても各フェーズ最大3%くらいは差が出ることがあったので、それくらいは気にしない方向で。

確認項目

Plotting の変数は
・スレッド数(-r)
・バッファメモリ量(-b)
・最終保存場所(-d)
・キャッシュ場所1:Phase-1/2用(-t)
・キャッシュ場所2:Phase-3/4用(-2)
があります。
bitfield はありで、その他の最終データにかかわる情報は変更しない前提です。k=32,u=128,-s=65536

あとは、同時にどれくらい負荷がかかっているか(他の作業や、同時 Plotting 数など)もかかわってきます。というかそっちの方が影響大きい。

結果一覧

とりあえず調査した結果をまとめて。
表は文字のものを使いたかったんだけどいい感じに縮小表示とかしてくれるものがなかったので画像で。数値をコピペする意味ないからいいよね。

画像1

画像2

Phase-4 と最終コピーは条件違っても誤差範囲であることがわかります。(とはいえ5分くらいは差があるっぽいけど)
※ ところで、最終コピーが実行するごとに遅くなっていっているんだが…古い HDD だから壊れてるのかもしれない…

見づらいと思うので、項目ごとに確認していきます。

スレッド数による差異

他の条件が同じでスレッド数が変わるとどうなるかの確認です。

blog では
  2-4 が適していて、4 を超えると減っていく。
  1 よりは 2 がいい。
  ちなみに Phase-1 しか関係ないよ
と書かれています。

画像3

画像4

実際やってみると明らかにスレッドが多い方が速いです。

ただし、たしかに大きく影響するのは Phase-1 だけで、4スレッドと 16スレッドで5時間と4時間半なので、これをどう見るかですね。
2スレッドは明らかに遅いです。

バッファメモリ量による差異

blog では
  900MiB 以下では失敗する
  2600MiB あれば概ねOKだが完璧ではない
  3400MiB が最大で、それ以上はただの無駄遣い
と書かれています。
3400MiB = 3565MB くらい?
なんで -b の初期値が 3389 なのかかなり不明…

画像5

画像6

なんで実験のスレッド数変えちゃったんだろうか?…まぁいいか…

やってみた感じだと、メモリが多すぎるとむしろ遅くなるようです。
気持ち悪いので 4096MB でやりましたが、MAX の 3600MB くらいがちょうどいい設定?
一方で、2048MB ではちょっと足りない印象。

ログを見ていると、メモリが足りていればバケットソート、足りない場合にはクイックソートを選択しているようですね。
そして、クイックソートをするメモリすらないと失敗する、と。
処理によって得手不得手があるので場所によってはメモリが余っていても force_qs しているのかな、興味深い。
つまり、force_qs: 1 ではない場所でも QS が選択されないだけのメモリ量を割り当てられれば大丈夫そうです。

多くして遅くなるなら多くする意味はないので、標準設定のままで良いのではないかと思われます。

ストレージによる差異

・Phase-1/2 用キャッシュ領域(-t)
・Phase-3/4 用キャッシュ領域(-2)
・最終出力用領域(-d)…は HDD 固定にしてます
に関する確認です。

画像7

画像8

ストレージの速度によって、大きく速度が異なります。
NVMe(Gen3)-SSD と SATA-SSD で3割くらい差があります。
HDD は NVMe(Gen3)-SSD に対してほぼ倍の時間がかかっています。
NVMe-SSD 使うまでもなく、USB3.1 Gen2 に RAID0 な HDD とかもありなのかもしれない。
ああでも、HDD は RAID0 にしたところでランダムアクセス遅いからどうなんだろう。

Phase-3/4 に関しては、書き出し先(-2)よりも読み込み元(Phase-1/2 (-t))の速度に依存しているような気がします。
実際、タスクマネージャーで確認しても、Phase-3/4 は殆ど読み込みの時間で、書き出しは時々ちょっと行われているだけな感じです。おそらく HDD(t) のバッファメモリで吸収できる範囲。

-2 を -d と同じディレクトリに置くとリネームだけで済むので最後のコピーがいらなくなります。
しかし、同じストレージでも違うディレクトリに置くとコピーを行います。
-2 を最終出力先の HDD(t) にすることによって、Phase-3/4 が遅くなっても FinalCopy の分が相殺されて時間が変わらないのであれば、SSD への書き込み回数の低減を考えると -2 は HDD(t) に置くのが良いかもしれません。

ここは一番同時アクセスの影響を受けやすいところなので、並列でどれだけアクセスを分散させられるかがカギですね。
具体的には
 ・-t と -2/-d を別のストレージにする
  ・できれば別のインターフェースにする
 ・同時に Plotting する同じ -t を持つプロセスでは Phase-1/2 をかぶらないようにする
 ・同時に Plotting する同じ -2/-d を持つプロセスでは Phase-3/4 をかぶらないようにする
など

とはいえ、実際には CPU で計算している時間も多く、単体実行でストレージ性能をフルに使いきっているわけではありません。

5並列_NVMe

これは別のマシンで -t NVMe(Gen3) -2 HDD にして5個の plotting を時間差同時実行している時の NVMe(Gen3) の利用状況ですが、まだ余裕がある感じです。

同時実行数による差異

ここが一番重要になると思いますが、長くなったので同時実行数による差異は別記事で。

単独実行のまとめ

単体で(他に負荷をかけないで)実行している場合は、概ね以下と言えそうです。

・スレッド数は 4でも十分、余裕があれば増やすといい
・スレッド数を増やす場合には Phase-1 が複数実行で重ならないように実行開始時間を制御する
・メモリは標準設定で十分、3~4GB 程度
・ストレージは Phase-1~3 で効いてくる、速ければ速いほどいい
・-2 は最終出力先の HDD などに向けてもいい

なお、i3-9300 で、既に CPU に 50% くらい負荷がかかってる状態で
2スレッド / 2048MB / -t NVMe(Gen3) / -2 HDD
として実行したら、単独で 29,000秒弱(8時間くらい)でした。遅い…


長くなったので続きます。


この記事が気に入ったらサポートをしてみませんか?