修复 dsh 在 scrollback 窗口过大时 bash 工具性能退化
文章复盘 dsh(coding agent harness)在 scrollback 窗口过大时 bash 工具性能退化的排查过程。作者通过 Trace 发现一条本地 sed 命令耗时 670ms,定位根因是回看窗口把「保留最后 4 MiB」实现为每个数据块都从整条保留串重新推导,且字节定界是一次逐字符的 Buffer.byteLength 回退,成本随保留量线性增长。由于保留上限恰是随产品交付的 4 MiB,一条输出 5 MiB 的命令让主线程跑了约 124 秒,并在 30 秒发送上限下先卡死进程再超时重置 shell。文章进一步分析它躲过测试的原因:单测窗口仅 128 字节、组合测试静默档 30 秒且从不填满窗口、benchmark 未覆盖终端 I/O,而被截断到 16 KiB 的输出让那 4 MiB 在快照里显得无害。作者由此引申到 coding agent 这类 IO 密集系统的性能陷阱与 harness 设计取舍。
推荐收录:它把一次看似普通的工具调用卡顿,从现象、Trace 证据一路追到回看窗口的 O(n) 实现、逐字符 Buffer.byteLength 回退与测试盲区,给出可复现的完整根因链,而非孤立的调参记录。适合做 coding agent、开发者工具或性能优化的工程师阅读,其中「关键路径上的隐藏副作用被测试规模掩盖」这一教训可迁移到任何 IO 密集系统。