Skip to content

修复 worker slot 初始化失败导致的批次死循环 - #715

Merged
feixi139 merged 1 commit into
PFCCLab:mainfrom
feixi139:fix-slot-init-livelock
Aug 21, 2026
Merged

修复 worker slot 初始化失败导致的批次死循环#715
feixi139 merged 1 commit into
PFCCLab:mainfrom
feixi139:fix-slot-init-livelock

Conversation

@feixi139

Copy link
Copy Markdown
Collaborator

修改内容

  1. 增加初始化失败退避和退役

    • 记录 slot 连续初始化失败次数。
    • 按 5/15/30/60 秒退避。
    • 默认连续失败 5 次后标记为 retired,不再自动复活。
    • worker 成功进入 ready 状态后清零失败计数。
  2. 优化调度和回队逻辑

    • 优先调度健康的 idle slot。
    • 按失败次数对其他候选 slot 排序。
    • 退避中、隔离中和 retired slot 不参与调度。
    • 初始化失败后及时释放 reservation,并将未派发的 assignment 放回 pending 队列。
  3. 增加快速失败

    • 当仍有未完成 case,但所有 slot 都已 retired 或 quarantined 时,立即失败退出,不再等待 pressure timeout。
  4. 增加初始化超时诊断

    • 在 kill 进程前保存 ps、py-spy 和 /proc 信息。
    • 诊断文件写入 <TEST_LOG_PATH>/init_timeout/
    • 可通过 PADDLEAPITEST_INIT_TIMEOUT_DIAGNOSTICS=0 关闭。

@feixi139 feixi139 changed the title 测试修复:修复故障 slot 垄断调度导致的批次死循环,并记录初始化超时现场 修复 worker slot 初始化失败导致的批次死循环 Aug 21, 2026
slot_can_schedule 把 suspended/dead 也算可调度,schedule() 又按 group 与 slot
编号取第一个,只剩单个 pending case 时它必然反复落到同一个 slot 上:启动失败
→ INIT_TIMEOUT → suspend → 回队 → 再次选中,既没有退避也没有上限,其余已 ready
的 worker 全程闲置,批次永远不会结束。

- slot 记录连续初始化失败次数并按 5/15/30/60 s 退避,达到上限后进入 retired 不再复活
  (PADDLEAPITEST_MAX_SLOT_INIT_FAILURES 可调,0 表示只退避不放弃)
- 候选 slot 改为 idle 优先、其次按失败次数递增,健康 worker 先接活
- cancel_failed_startup 对退避/退役 slot 也回队,避免 assignment 与 reservation 永久滞留
- 所有 slot 失能而 case 未跑完时立即以失败退出:退避与重启交替会不断刷新初始化状态,
  PRESSURE_TIMEOUT 的连续阻塞窗口永远攒不满,无法作为兜底
- INIT_TIMEOUT 在 kill 之前落盘 wrapper 与 sanitizer 进程组的 py-spy 栈及 proc 状态,
  偶发挂死此前没有任何可事后归因的现场(PADDLEAPITEST_INIT_TIMEOUT_DIAGNOSTICS 可关)

已知未解决:compute-sanitizer 会话偶发卡死在 ctypes.util.find_library 的 vfork,
1204 次并发 fork 压测未能复现,真因未定位;本次只保证它不再演化成死循环。
@feixi139
feixi139 force-pushed the fix-slot-init-livelock branch from 35e7de8 to ff4410e Compare August 21, 2026 07:36
@feixi139
feixi139 merged commit 9802b21 into PFCCLab:main Aug 21, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant