iT邦幫忙

2026 iThome 鐵人賽

DAY 12
0
佛心分享-SideProject30

打造 APR Engineer 的生產力平台,從 Flow Tracer 到 SignOff DashBoard 的落地實戰系列 第 12

【DAY 12】 Flow Control 實戰技巧:幾種 APR 最常碰到的控制與狀況處理

  • 分享至 

  • xImage
  •  

前言

昨天把 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:關視窗不等於殺 job

Stop 會問你要不要殺目前還活著的 LSF job。確認之後:

JobRegistry 列出還能殺的 submission
        |
        v
   bkill <job_id>          ← 認 id,不拿 -J 名稱亂掃
        |
        v
   節點變成 KILLING(還會閃)
        |
        +-- 每 15 秒再問一次 bjobs
        |      還活著 → 再送一次 bkill
        |      不在 queue / 已 DONE、EXIT → 標成 EXIT
        +-- 連失敗 4 次 → 停止重試,仍標 EXIT

有幾條規矩:

  1. 只殺還活著的。 bjobs 常常還查得到剛結束的 job,狀態已經是 DONE / EXIT。WinFlow 認的「活著」只有 PEND、RUN、各種 SUSP、WAIT。綠燈不會被誤殺。
  2. KILLING 期間不准 Rerun、不准 Run Job。 口令還沒喊完就叫下一個人做事,cluster 上可能同時出現兩份 CTS。
  3. 單顆 Stop Job 只對那張卡片登記過的 submission 下手。旁邊平行在跑的 QC,不會影響。
  4. Stop 不是 Reset。 Stop 負責 LSF;Reset 負責畫面。先 Stop 等到紅,再決定要不要 Reset。
    config.jsonkill_poll_ms(預設 15000)跟 kill_max_retries(預設 4)就是這段等待的節奏。LSF 有時要幾秒才把 job 從 queue 拿掉;畫面停在 KILLING,是它在等證據,不是當機。

Rerun:已綠的不要再做一次

這應該是做 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 就會炸。
  • 節點是紅的、但其實檔已經在:Rerun 會再 bsub 一次。你若確定都跑完了,先 Validate 把它塗綠,再 Rerun 後面的人。

還有一顆在 RUN,Rerun 會被擋住。先 Stop,等到 KILLING 變成 EXIT,再接著做。

Validate:LSF 說完了,檔案才算數

Day 09 把時間點拆過:parents / children 決定誰可以開始;inputs / outputs 決定這個時間點檔案在不在。Validate 就是後者拿到人手上的開關

自動發生的兩次:

  • 提交前inputs。沒有 netlist、沒有上一棒的 .done,根本不該 bsub
  • LSF 回報 DONE 之後outputs。cluster 說做完了,約定的 marker 沒出現,這份工作仍算 EXIT。
    人按的有兩顆:
    Validate Job(詳情窗):只看這顆宣告的 outputs。都在 → 塗 DONE;缺檔 → 塗 EXIT。它不問 bjobs,也不送 job。
    Verify Outputs(左邊):同一件事做遍整張 DAG。沒宣告 outputs 的節點會跳過,避免把「這顆本來就沒有產物」當成失敗。

這兩道機制是為了處理那種「狀態跟磁碟不同步」的情況:

狀況 畫面上 磁碟上 該按
工具在 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


上一篇
【Day 11 】 智慧 Log 追蹤與管理:一個一個開 Log 來看也未免太累
下一篇
【DAY 13】 互動式 Flow 解決方案:流程跑到一半忽然要改怎麼辦
系列文
打造 APR Engineer 的生產力平台,從 Flow Tracer 到 SignOff DashBoard 的落地實戰14
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言