跳转至

部署器重复探测消除(首次落地,未达标)

主题目录:dedupe_probe_20261007/|日期:2026-10-07|类型:C 类(改基类) 状态:已落地并达标 —— 重复探测归零(49 → 0)。初版曾因诊断工具口径错误误判为「未达标」,见 §三。

一、做了什么

在 deployer.py(基类)加进程内只读探测缓存 —— 所有远端查询都已统一汇聚到基类(见 sync_status_concurrency_20261007/),故只改一处:

  • _remote_query:同 (host, cmd) 本次运行只下发一次;空输出也缓存(ldd 这类"正常即无输出"的探测若按空串跳过等于永不缓存);仅有连接异常/无返回不缓存。
  • _remote_query_many:同样走缓存;同批内同一命令只下发一次;结果按索引回填。
  • 失效时机:_remote_exec 成功执行后清空(dry-run 下不执行 → 不清,缓存全程有效);run() 在 deploy() 之后再清一次(兜底覆盖 SFTP 等写路径)。
  • 开关:环境变量 DEPLOY_QUERY_CACHE=0 可整体关闭(供 A/B 对照)。

二、验证结果

离线自测 8 项全过(dedupe_probe_20261007/selftest.py):命中复用 / 空输出也缓存 / 连接异常不缓存 / 变更后失效 / 批量同批去重 / 批量跨批命中 / 部分命中 / 开关关闭。

上机对照(slurm_ins 主部署器 --dry-run,6 台):

指标 改造前 改造后 判定
变更记录 225 / 25 / 200 225 / 25 / 200 ✅ 逐条一致(正确性无回归)
建连 6 次 6 次 ✅ 未退化
远端命令(修正口径:只计实际执行) 433 次 384 次 ✅ -11.3%
可省重复 49 0 ✅ 归零
墙钟 134.6 s 116.1 s ✅ -13.7%

结论:达标 —— 重复探测从 49 降到 0。

三、一小时的弯路:诊断工具口径错误(已纠正)

初版结论写成「未达标」,依据是 remote_cmd_profile.py 报的「命令 864 条 / 可省重复 483 条 → 改造后仍 384 条」。 这个依据本身是错的:同一次远端执行会被两层日志(paramiko_module.run_cmd 与 exec_linux)各记一条带「耗时」的日志, 统计脚本把两条当成两条命令 → 命令数与重复数双双虚高约一倍。

用正确口径(只计 exec_linux 那条)重算:

日志 实际执行 真实可省重复
改造前 433 次 49
改造后 384 次 0

教训:诊断工具的口径必须先自证 —— 否则会把正常结果判成故障(本次差点据此继续改代码)。

四、结论与后续

目标达成:重复探测归零;命令数 -11.3%、墙钟 -13.7%。 若还想继续压命令数(384 次),方向是命令内合并(同一主机的多条只读探测拼成一条 shell),属另一轮。 【2026-10-11 结案】 该方向已由后续主题落地:submit_node_batch_20261007(_sync_host 批量化)与 probe_batch_residual_20261008(4 子命令命令内合并)。

五、备份

backup/slurm_ins/deployer.py.bak.20261007-064700(改前快照)。 回滚:cp -a dedupe_probe_20261007/backup/slurm_ins/deployer.py.bak.* deployer.py,回滚后跑一次 --dry-run 确认变更记录仍为 225/25/200。


来源:/home/rain/Documents/slurm/slurm_ins/dedupe_probe_20261007/README.md | 最后更新:2026-10-11 21:15(由 build/sync.py 同步,请勿在站点侧修改)