昨天把 log 請進畫面了。ERROR 發生後自己會亮紅燈,那麼排查完問題後我們該 ?
把 flow 停掉 ? 從 error 處接著跑,還是整個重來?
畢竟 EDA 工具可能會卡死、script 可能指錯目錄、又或是有時候人在 flow 外手腳動偷跑完,GUI 卻還掛著紅燈。Day 09 講過一句話:失敗要停在正確的節點,重跑就該從那裡繼續。今天把這句話落實到 Runner 左邊那排按鈕上。
| 在做的事 | 畫面上的按鈕 | 實際做的事 | 不該拿它來做的事 |
|---|---|---|---|
| 整條 Flow 重來 | Run Flow | DAG 全部回到 waiting,從頭 bsub |
只想救一顆紅的 |
| Flow 從斷點繼續 | Rerun | 已 DONE 的跳過,其餘重送 | 還有人在 RUN / KILLING |
| 停下來所有在 Run 的 Job | Stop / Stop Job | bkill,等到 LSF 確認死透 |
清畫面、清 log |
| 驗輸出檔案在不在 | Validate Job / Verify Outputs | 看 outputs 在不在磁碟上,改節點顏色 |
代替 LSF 判斷 job 還活著沒 |
左邊還有一顆 Reset Flow。它很像 restart,但只清 GUI:把節點變 waiting、兩個 log 目錄的檔刪掉、本地 LSF 追蹤丟掉 它不會 bkill
點節點開詳情窗,還有單顆的 Run Job / Stop Job / Validate Job。整條 flow 的指令在左邊;一個人的指令在卡片裡。
Stop 會問你要不要殺目前還活著的 LSF job。確認之後:
JobRegistry 列出還能殺的 submission
|
v
bkill <job_id> ← 認 id,不拿 -J 名稱亂掃
|
v
節點變成 KILLING(還會閃)
|
+-- 每 15 秒再問一次 bjobs
| 還活著 → 再送一次 bkill
| 不在 queue / 已 DONE、EXIT → 標成 EXIT
+-- 連失敗 4 次 → 停止重試,仍標 EXIT
有幾條規矩:
bjobs 常常還查得到剛結束的 job,狀態已經是 DONE / EXIT。WinFlow 認的「活著」只有 PEND、RUN、各種 SUSP、WAIT。綠燈不會被誤殺。config.json 裡 kill_poll_ms(預設 15000)跟 kill_max_retries(預設 4)就是這段等待的節奏。LSF 有時要幾秒才把 job 從 queue 拿掉;畫面停在 KILLING,是它在等證據,不是當機。這應該是做 APR 的時候會最常按的鍵。
畫面上的狀態
FloorPlan DONE Place DONE CTS EXIT Route waiting QC waiting
| |
| +-- 故障排除後要重送
+-- 跳過(當成已經完成)
Runner 內部:
skip = 所有 DONE
to_run = 其餘(EXIT / waiting / 被 Stop 標紅的)
被 skip 的 job 會被放進 completed
→ 它的 children 不必再等它 bsub 一次
所以 CTS 的 parent 是 Place、Place 是綠的:CTS 一開始就是 ready。Route 仍等 CTS,不會偷跑。旁掛的 Q_PLACE 如果昨晚已經綠了,也不會再送一次。
Rerun 會把「不是 DONE 的人」先刷回 waiting,再送。它不會改你已經綠的節點,也不會去翻磁碟猜誰成功——認的是畫面上的 DONE。這有兩個要注意的點:
outputs 被人刪了:Rerun 仍會 skip。下一顆驗 input 就會炸。bsub 一次。你若確定都跑完了,先 Validate 把它塗綠,再 Rerun 後面的人。還有一顆在 RUN,Rerun 會被擋住。先 Stop,等到 KILLING 變成 EXIT,再接著做。
Day 09 把時間點拆過:parents / children 決定誰可以開始;inputs / outputs 決定這個時間點檔案在不在。Validate 就是後者拿到人手上的開關
自動發生的兩次:
inputs。沒有 netlist、沒有上一棒的 .done,根本不該 bsub。outputs。cluster 說做完了,約定的 marker 沒出現,這份工作仍算 EXIT。outputs。都在 → 塗 DONE;缺檔 → 塗 EXIT。它不問 bjobs,也不送 job。這兩道機制是為了處理那種「狀態跟磁碟不同步」的情況:
| 狀況 | 畫面上 | 磁碟上 | 該按 |
|---|---|---|---|
| 工具在 GUI 外面跑完 | EXIT / waiting | outputs 都在 |
Validate Job → 變 DONE |
| LSF DONE 但 marker 沒寫出來 | EXIT | 缺檔 | 先補檔或重跑,再 Validate |
| 有人把 Place 的 def 刪了 | DONE | 缺檔 | Verify Outputs → 變 EXIT,別讓 Rerun skip |
| 整條疑似跑完,想下班前對一次 | 混雜 | ? | Verify Outputs |
Validate 不會幫你啟動下一棒。它只改顏色。顏色對了,Rerun 才知道該 skip 誰、該送誰。
載入時還有一層比較安靜的檢查:FlowValidator 看 JSON 結構、重複的 stage 名、parents / children 有沒有指到幽靈、有沒有環、兩邊有沒有互指。那是「這張圖能不能跑」,不是「這個檔在不在」。圖不合法,Run / Rerun 進場前就會被擋下來。
把左邊的按鈕對回 APR 的口令:
半夜:
FloorPlan ●DONE Place ●DONE CTS ●EXIT Route ○wait Q_CTS ○wait
早上你想做的事 按這個
-------------------------------- ----------------
從 CTS 接著跑,Place 不要重來 Rerun
CTS 還卡在 RUN,先停 Stop → 等 KILLING 變 EXIT
只重送 CTS,後面先別動 點 CTS → Run Job
人已在外面把 CTS 跑完 點 CTS → Validate Job
懷疑綠燈是假的 Verify Outputs
netlist 換了,前面要全作廢 Stop(若還有人活著)→ Reset Flow → Run Flow
一張圖把控制路徑講完:
Runner 左邊 節點詳情窗
----------- -----------
Run Flow ──► 全數重送 Run Job ──► 只送這一顆(parents 當 skip)
Rerun ──► skip DONE Stop Job ──► bkill 這一顆
Stop ──► bkill 活人 Validate Job ──► 只驗這一顆 outputs
Verify Outputs ──► 全驗
Reset Flow ──► 清畫面,不 bkill
任何還在 RUN / KILLING 的人
|
v
Rerun / Run Job / Reset / Sync 都會被擋住
|
先 Stop,等證據
我都把他們放在 config.json 裡的 runner:
| 欄位 | 預設 | 用途 |
|---|---|---|
kill_poll_ms |
15000 |
Stop 之後多久再問一次「死了沒」 |
kill_max_retries |
4 |
bkill 連續失敗幾次就放棄重試 |
poll_interval |
20 |
跑起來時多久 bjobs 一次(跟殺 job 是兩條計時器) |
job_log_dir / session_log_dir |
log / logs |
Reset Flow 會清這兩個目錄 |
| Queue、CPU 仍寫在各 job 上;控制鈕不改資源 |
Stop 殺的是 LSF job
Reset 清的是 GUI 畫面
Rerun 會跳過綠的的 job,跑剩下的
Run Flow 就是跑整個 flow
Validate 只查看檔案存不存在,不管 LSF