ToDo:
前回の続き
SuperKEKBの運転も終わったので、検証再開
make -j16 buildworld+buildkernelの連続負荷 48時間クリア 95時間クリア (2019-07-10 22:10)
変更点
X399M Taichi/Threadripper固有設定のまとめ
efi.rt.disabled=1 machdep.hyperthreading_allowed=0
efi.rt.disabled=1 12-CURRENT系で試験し始めたころのworkaroundなので今は外せる (2019-07-10 検証)
# Ryzen threadripper 2950X Tctl offset dev.amdtemp.0.sensor_offset=-27 dev.amdtemp.1.sensor_offset=-27
前扉 | 開 | 閉 |
2.5inchベイ | 31℃ | 41℃ |
CPU | 63℃ | 68℃ |
前扉と2.5inchケージの隙間が狭いため、SSD/HDDベイの温度の方に大きな影響が出る模様
waitが真(default)の場合、cmdstat引数を省略するとコマンドが見つからない場合、Fortran runtime errorでプロセスが終了する(gfortran8.3で確認)
waitが偽の場合は、cmdstat引数の有無に依らずexecute_command_lineは成功する (cmdstatの戻り値は常に0、exitstatは更新されない)
非同期実行時にエラーハンドルできなくなる理屈は理解できるが、動作が一貫してない気がする…
さらに調べると、Fortran runtime errorの発生条件は正確にはcommand not foundでは無くexitstatの戻り値で決まる模様(gfortran8.3の実装)
少なくともgfrotran8.2の実装では、exitsat=127だとFortran runtime errorとなる(exitstat=126も同様)
call execute_command_line('exit 1', exitstat=i) write(*,*)'exit 1 -> ', i call execute_command_line('exit 127', exitstat=i) write(*,*)'exit 127 -> ', i
libgfotranをバラしてみるとそのものズバリのコードが
/* Synchronous execution. */ int res = system (cmd); if (res == -1) set_cmdstat (cmdstat, EXEC_SYSTEMFAILED); #ifndef HAVE_FORK else if (!wait) set_cmdstat (cmdstat, EXEC_SYNCHRONOUS); #endif else if (res == 127 || res == 126 #if defined(WEXITSTATUS) && defined(WIFEXITED) || (WIFEXITED(res) && WEXITSTATUS(res) == 127) || (WIFEXITED(res) && WEXITSTATUS(res) == 126) #endif ) /* Shell return codes 126 and 127 mean that the command line could not be executed for various reasons. */ set_cmdstat (cmdstat, EXEC_INVALIDCOMMAND); else set_cmdstat (cmdstat, EXEC_NOERROR);
stdoutのredirectionまで考慮すると、自前でsystem(3)総統を実装すべきか? (シグナル処理回りの可搬性が気になる所だが…)
設置スペースの拡張のためPCラックの更新を検討する
発注前に調査すべき事
前回の続き
2018-12-14に報告されている Bug 233998が状況的に一致する
残る課題は、SMT on状態での 32-thread動作の安定性の確認のみ 最近のSMT回りのセキュリティ問題やFP性能を考えるとbuild以外にはSMT不要だったりするが…
調子にのって、workaround外した状態でストレステストしたら11時間で固まった模様
machdep.hyperthreading_allowed=0
1021: MSR 0xc0011029: 0x00000000 0x10e2a000 -> 0x00000000 0x10e2a000 1033: MSR 0xc0011020: 0x02068000 0x00000000 -> 0x02068000 0x00000010 1049: MSR 0xc0011028: 0x00140200 0x248000d4 -> 0x00140200 0x248000d4 1057: machdep.idle_mwait: 1 -> 0 1091: MSR 0xc001102d: 0x10000005 0x00000020 -> 0x10000005 0x00000020 1095: MSR 0xc0011020: 0x02068000 0x00000010 -> 0x02068000 0x00000010 1109: machdep.idle: acpi -> hlt
Firmware/Kernelの設定に対して追加で設定しているworkaroundは、1033, 1057, 1109の3種類となる
必要なworkaround設定は、sys/amd64/amd64/initcpu.c(MSR)とsys/x86/x86/cpu_machdep.c(sysctl machdep)に含まれているが、FAMILY 17hかつMODEL 01hでのみ有効にされているため、Zen+な Threadripper2が対象にならない(MODEL 08h)
また、Zen1ベースのThreadripper1はMODEL 01h/STEP 01h、EPYC1はMODEL 01h/STEP 02hで対象になる模様
Revision Guideのp.12 Table.8を読む限りはZen+なThreadripper2(PiR-B2)には、1033/1057/1109は該当しないとあるのだが、p.16 Table.10には Errata 1109が2nd Generation Ryzen processor(つまりZen+)に残っていると表示されてたりと一貫していないあたりが…
ともかく、必要なworkaroundの検証を進めてみる
Errata workaround 1057/1109を外した状態でbuildworld/buildkernlストレステスト49時間をクリア
負荷試験時の温度(CPU及びHDDケージ)が低下しているが、構成変更と 同時にSMT設定も変更しているので、温度に関しては純粋な比較にはならない模様
buildworld/buildkernel時間は、SMT offで19分に対しSMT onだと21分(first lap)に増えている
動作スレッド数の増大により、待ち合わせ等のオーバーヘッドが増えたか? 消費電力は減ってる模様なので、実質稼働密度が低下している可能性がある
測定結果をざっくりまとめてみる
SMT | -j# | lap time | wall power | Tdie |
off | 16 | 19min | 230W | 68℃ |
on | 32 | 21min | 140W | 48℃ |
on | 16 | 20min | 220W | 68℃ |
このマイクロベンチマークの結果だと、buildworldやFP主体の並列計算用途だとSMT offの方が安定した性能が出せる模様
前扉開放時の温度変化は、Tdieは1℃未満、Thddは-8℃
やはり、前扉とオープンベイ間のクリアランスが小さいのが効いている模様
一応、前扉閉でストレステスト中でもThdd~42℃程度なので、問題にはならない
冷却系換装時の特性変化
SMT | 負荷 | Tdie | lap time |
off | idle | 34.6℃ | n/a |
off | -j16 | 67.5℃ | 19:00 |
off | -j32 | 67.4℃ | 19:40 |
on | idle | 31.0℃ | n/a |
on | -j32 | 67.6℃ | 17:20 |
on | -j16 | 67.6℃ | 20:00 |
SMT | 負荷 | Tdie | lap time | 備考 |
on | idle | 28.6℃ | n/a | |
on | -j16 | 57.6℃ | 19:40 | |
on | -j32 | 40.0℃ | 21:30 | 130W・CPUの稼働率が低い? |
off | idle | 29.0℃ | n/a | |
off | -j32 | 56.6℃ | 18:40 | |
off | -j16 | 55.5℃ | 18:50 |
120x240x35mmラジエーターが体積の小さい空冷クーラーに明かに負けている…
条件的には、NH-U12Sの方はケースに導入された空気に触れているのにたいして、水冷ラジエーターは直接吸気された外気に触れている点で、低温熱源温度は水冷のELC-LTTR240-TBPの有利なはずなのだが…
調べた範囲では、ラジエーターの送出側は十分冷えているので、冷媒-CPU間の熱抵抗(熱交換器)性能で負けているとか論外Orz
第一世代のLIQTECH(TR4を含む)と第二世代の初期ロットの冷媒不良で冷えない/すぐ壊れる等の報告事例もあるようなので、あかん奴引いたかなぁ…
明かに、NH-U12S TR4-SP3の方が安定した性能出ているし、水漏れ等のリスクも無いので、空冷化改装決定ですw
以前のテストでも見かけたが、SMT on状態の32thread時に消費電力・温度が下がる現象は何だろう… 温度域からはサーマルスロットリングには見えないのだが…??
buildworld/buildkernelによるストレステストによるCPUへの連続負荷と対応するTdieの推移
ストレステスト再開後4日(7/7~7/10)でピークアウト温度が10℃上昇している。開始直後の53℃前後のTdieは、購入直後の運用データとほぼ一致する。(環境温度が24℃前後なのでほぼ整合)
この間、筐体の設定変更は無く、部屋の空調は連続稼働中なので、極端な変動は無いはずだが…
一部で報告されている冷媒劣化現象か?
ELC-LTTR240-TBPの積算稼働時間は、購入後3~4週間のはず
カテゴリー: Admin | Emacs | EPICS | Fortran | FreeBSD | GCC | hgsubversion | IPv6 | KEKB | LHC | Lisp | LLVM | MADX | Ryzen | SAD | samba | tDiary | unix | WWW | YaSAI | お仕事 | イベント | 出張 | 宴会 | 数学 | 艦これ | 買いもの | 追記 | 雑記