ToDo:
取り合えず、最低限の機能を実装して、LAPACK拡張からitfmaloc/itfcmalocを削除してみた
問題なく動いている模様なので、SAD本体側も順次置き換えて行く
実は、Fortran arrayからSADのListコンテナへ変換する関数群に実ベクトルのサポートが無いのは不便ではないだろうか
配列 | 関数 |
複素数ベクトル | itfc2l / itfri2l |
実行列 | itfm2l |
複素行列 | itfcm2l |
置き換え作業の順番的には
loader tunable(machdep.hyperthreading_allowed=0)でHTTをdisableした状態で、起動するとsysctl(3)のENOMEMエラーで起動しない件だが、 kern.cp_times sysctlが返す配列サイズがhw.ncpuでは無く、kern.smp.maxid+1で決まっているためにsysctl(3)呼び出し時のバッファサイズ不足で落ちる
有効なcp_timesは、先頭のhw.ncpu個分だけなので、バッファ確保時とsysctl(3)呼び出し時の長さにkern.smp.maxid + 1を用いれば解決する (maxidなので、0から始まるcpu番号の最後で +1しないと個数にならない)
ちなみにkern.smp.cpusはhw.ncpu同様に現時点で有効なthread数になっている模様
別解として、+1するのが面倒ならkern.smp.maxcpusを使うという手もある(標準だと256で、Ryzen TR2 2950Xだと高々8倍なので対した消費ではないはず)
今朝、7時過ぎにお家ネットワークの基幹鯖のLANが変なリンクダウンして、13分後に復帰した
Dec 27 07:10:04 aeka kernel: ix0: TX(0) desc avail = 34, pidx = 1785 Dec 27 07:10:04 aeka kernel: ix0: link state changed to DOWN Dec 27 07:10:04 aeka kernel: ix0.2: link state changed to DOWN Dec 27 07:10:05 aeka kernel: ix0: link state changed to UP Dec 27 07:10:05 aeka kernel: ix0.2: link state changed to UP Dec 27 07:10:05 aeka kernel: ix0: link state changed to DOWN Dec 27 07:10:05 aeka kernel: ix0.2: link state changed to DOWN Dec 27 07:10:11 aeka kernel: ix0: link state changed to UP Dec 27 07:10:11 aeka kernel: ix0.2: link state changed to UP Dec 27 07:18:28 aeka su[97256]: amorita to root on /dev/pts/5 Dec 27 07:23:11 aeka kernel: ix0: link state changed to DOWN Dec 27 07:23:11 aeka kernel: ix0.2: link state changed to DOWN Dec 27 07:23:11 aeka kernel: ix0: link state changed to UP Dec 27 07:23:11 aeka kernel: ix0: link state changed to DOWN Dec 27 07:23:11 aeka kernel: ix0.2: link state changed to DOWN Dec 27 07:23:12 aeka kernel: nd6_dad_timer: cancel DAD on ix0.2 because of ND6_IFF_IFDISABLED. Dec 27 07:23:17 aeka kernel: ix0: link state changed to UP Dec 27 07:23:17 aeka kernel: ix0.2: link state changed to UP
以後、LAN側で通信不能になっているっぽぃ
トラブルシュートの過程
どうやら、コアスイッチがハングアップしていたっぽぃ
今回の教訓
sad_cstrマクロによるstringポインタ参照に書き換える作業を進行中
残っているのは
itflistを使ってon-stack list constructionしているコードを明示的なlistコンテナ割り当てとtfsetlistで書き換える作業を進行中
長大なリストが戻ってくる可能性がある部分では、mstk検査をしていないので stack corruptionの危険が生じている
残っているのは
list containerからReal配列ハンドルや Type/Addr配列ハンドルを取り出す操作があるが、内部のデータ構造を隠蔽する為の抽象化helperを用意すべきでは?
検討すべきコーナーケース
多分、NULLを返すのが妥当?
container生成時だけは、書き込みの為にnon-constである必要があるが、参照用途では、constハンドルを返すべきと考えられる
const/non-constで、helperを分離すべきか? (C++と異なり、proxy objectによるtype dispatchは行えない)
includeされているcommon宣言をmoldule化作業で自動検査の障害となるimplicit宣言を含むsrc/inc/*.incの参照
include元 | 参照数 | ファイル数 |
src/inc/TFMACRO.inc | 123 | 104 |
src/inc/TMACRO.inc | 33 | 28 |
数量的には、TMACRO.incからやっつけるべき?
基本的な仕込みは終わったので、耐久ストレステストに入ったのだが、未だに安定しない
耐久ストレステストの内容は、最大並列度でのエンドレス buildworld + buildkernel
現在の最長記録は36時間程度で、なぜかハングアップする状況
少なくとも、Ryzen TR1の初期出荷分で発生したSEGV系の不具合ではない
原因の洗い出しと対策のために色々試しているが未だに解決していない Orz
この状態でもハングアップするので、さらにSMT回りのデータレース等を疑ってmachdep.hyperthreading_allowed=0にてSMTを殺した状態も試したが、ハングアップする
Tjmaxの超過による熱暴走系を疑って、冷却系の設定を変更してTjを10℃程度低下させたところ、24時間も持たずに30分以内にハングアップした(2回)
CPUのエラッタ以外の可能性として疑っているのは
現在、メインストレージを SATA SSDに切り替えNVMeを切り離した状態かつい、CPU P-stateを固定した状態で、ストレステストを実施中
下記の試験条件で、34時間25分でハングアップ
どうやら、動的なP-state変更とNVMeは直接の原因では無い模様
万策尽きてきた感が…
まだ、冷却系を出力全開にしていないので、CPU系の動作不良が原因ならさらに動作温度を下げるとか、コア電圧を盛って改善するかを確かめるという手が残っている(Threadripper1の初期出荷版で起こったRayzen SEGV Battleでは、電圧を盛ると動作が改善するケースが報告されていたようだったがはたして)
一昨日のLAN落ちと似た障害が発生
前回と異なり、今度は ix0が再リンクせずにダウンしっ放しの状態に Orz
どうやら予備のix1側のポートは稼働するので、ケーブル差し替え&鯖の設定を変更してリブート(ホットリスタート)して家LANを復帰させる
どうやら、スイッチ側ではなく、鯖のNIC側の問題の模様
/var/log/messageによれば、14:05頃からdhcpdがパケットの送出に失敗している
Dec 29 13:53:19 aeka sshguard[1507]: Attack from "122.226.181.167" on service 100 with danger 10. Dec 29 13:55:23 aeka sshguard[1507]: Attack from "36.156.24.94" on service 100 with danger 10. Dec 29 13:56:14 aeka sshguard[1507]: Attack from "124.13.47.41" on service 100 with danger 10. Dec 29 14:05:54 aeka dhcpd[1405]: send_packet: Host is down Dec 29 14:05:54 aeka dhcpd[1405]: dhcp.c:4023: Failed to send 307 byte long packet over fallback interface.
14:53頃に一瞬リンクが途絶し、直後に再度リンクダウンし以降復帰していない
Dec 29 14:41:26 aeka sshguard[1507]: Attack from "59.11.138.177" on service 100 with danger 10. Dec 29 14:45:46 aeka sshguard[1507]: Attack from "71.6.232.6" on service 100 with danger 10. Dec 29 14:53:02 aeka kernel: ix0: TX(0) desc avail = 34, pidx = 1264 Dec 29 14:53:02 aeka kernel: ix0: link state changed to DOWN Dec 29 14:53:02 aeka kernel: ix0.2: link state changed to DOWN Dec 29 14:53:02 aeka kernel: ix0: link state changed to UP Dec 29 14:53:02 aeka kernel: ix0.2: link state changed to UP Dec 29 14:53:03 aeka kernel: ix0: link state changed to DOWN Dec 29 14:53:03 aeka kernel: ix0.2: link state changed to DOWN Dec 29 14:53:04 aeka kernel: ix0: TX(0) desc avail = 2048, pidx = 0 Dec 29 14:53:33 aeka syslogd: last message repeated 16 times
その後は、ix0: TX(0) desc avail = 2048, pidx = 0を出しつづけている (メッセージの出力元は、sys/net/iflib.c)
状況からすると、可能性としては
ポート単位のハードウェア障害だとすると、症状が進行している?
それとも、12/27の障害後にスイッチのファームウェア更新で挙動が変わった?
ix driver側の更新は、直近は 2018/12/04の r341427、その前は 2018-10-14の r339354
現在のカーネルは 12/15にビルドした r342079M
その前のカーネルは 12/09にビルドした r341726M
単純に ix driver起因なら、最初の発生が12/27でコールドリスタート後の再発生が12/29なので発生頻度的に、もっと前に起こっていた可能性が高いと考えられる
やはり、NICのポート故障の線かなぁ… 予備を用意しないと Orz
X550-T2の購入時期は2016/08頃、運用投入は2016/11/12なので、運用期間だと2年強なので寿命にしては短い気が…
カテゴリー: Admin | Emacs | EPICS | Fortran | FreeBSD | GCC | hgsubversion | IPv6 | KEKB | LHC | Lisp | LLVM | MADX | Ryzen | SAD | samba | tDiary | unix | WWW | YaSAI | お仕事 | イベント | 出張 | 宴会 | 数学 | 艦これ | 買いもの | 追記 | 雑記