orangeofcarl0-sys/dsh-large-proj-perf
orangeofcarl0-sys★ 0JavaScript最后同步: 2026-08-15
DSH large-session performance plugin: zero-copy fork + projection warmup + chunked materialize
README 摘要
dsh-large-proj-perf DSH(DeepSeek Harness)大会话性能插件:零拷贝 fork、投影分片预热、分片 materialize, 一次装齐,消除 fork/历史加载对超大会话的事件循环阻塞。 ⚠️ 版本兼容性警告 :本插件通过 monkey-patch dsh 内部方法实现( SessionStore.fork 、 PersistenceCoordinator.initFor 、 JsonlSessionPersistence.encodeMaterialization 、 SessionPreparations 等), 与 dsh 版本高度耦合 ,当前针对 0.1.0-rc.6 开发并验证。 dsh 升级后这些内部方法签名可能变化——所有补丁都带源码特征校验,不匹配时 自动跳过 优化并回退官方行为 (不会导致崩溃),但优化会静默失效。升级 dsh 后请确认启动日志 无 signature mismatch 告警,必要时重新适配本插件。 ⚠️ 能力边界(重要) :本插件只能 缓解 超大对话的性能/内存问题(分片、零拷贝、 LRU 裁剪、预热等), 无法彻底解决 。根本原因在 dsh 的架构——live 会话事件树全量 驻留内存(每个超大会话 700MB)、历史加载全量解码 + 逐事件深拷贝。这些是上游架构 问题,插件 monkey-patch 触及不到。真正的根治依赖 dsh 上游支持事件分页加载/按需驻留, 或主动控制会话规模(见下文「避免超长对话」)。 问题 dsh 0.1.0-rc.6 在大会话(数十万事件)上存在三类同步阻塞,导致 fork 卡顿、 历史加载报 signal timed out (internal) 、严重时 OOM: 问题 环节 实测 A. fork 深拷贝 Session 构造器逐事件 snapshotJsonValue (纯 JS 深拷贝)+ persistence initFor 的 structuredClone(seed) 18.2MB/20k 事件合计 480ms 同步阻塞 B. projection 冷折叠 SessionProjectionRegistry.cellFor() 冷时同步 buildCell 全量折叠 74 万事件冷折叠阻塞 20+ 分钟(100% 单核) C. fork 全量序列化 fork 子会话首次落盘 encodeMaterialization → eventLines = map(JSON.stringify).join("\n") 一次性序列化整个 seed 60 万事件 = 501MB 单字符串;74 万事件直接 RangeError: Invalid string length 为什么「单个会话没事、fork 后出事」 :普通会话持久化走增量 append…
在 GitHub 查看完整 README →