前言¶
DeepSeek Harness(DSH)支持通过 fork 机制创建对话分支。在 dsh 0.1.0-rc.6 版本中,fork 路径对整个会话事件日志执行多次全量深拷贝。对于大于 15MB 的大会话,一次 fork 会产生数百毫秒的同步阻塞,这足以打断流式 LLM 响应(表现为 TRANSPORT/心跳超时重试)或造成 UI 卡顿。
dsh-fork-perf 插件旨在解决这一性能瓶颈。它通过复用内存中已冻结的事件引用,消除了不必要的深拷贝开销,将 fork 主体耗时降低至原来的约 1/18。
核心功能¶
该插件主要包含以下能力:
- 零拷贝 fork:利用
fromRestore通道,原地复用deepFreeze的不可变 JSON 树引用,跳过整树深拷贝。 - fast init-for:在
PersistenceCoordinator.initFor中,将structuredClone(seed)替换为冻结引用复用,消除 persistence 恢复时的拷贝耗时。 - 监控与 API:提供 fork 计时与路径统计,并通过
/dsh-fork-perf/api提供统计查询与运行时配置接口。 - 完整还原:
dispose方法可还原所有已应用的补丁。
安装与启用¶
通过命令行安装插件:
dsh plugin --profile web add github:orangeofcarl0-sys/dsh-fork-perf
安装后需重启 dsh web 使配置生效。启动成功的标志是日志中出现 [fork-perf] zero-copy fork installed。
监控与配置¶
插件提供 HTTP API 用于监控运行状态与调整行为。
API 接口¶
请求格式为 POST http://127.0.0.1:3080/dsh-fork-perf/api/<method>。
stats.get:获取 fork 次数、零拷贝占比、回退次数、最近记录(事件数、耗时、路径)。stats.reset:清零统计计数。config.get/config.set:获取或设置运行时开关(如zeroCopyFork、fastInitFor)。
示例¶
# 获取统计信息
curl -X POST http://127.0.0.1:3080/dsh-fork-perf/api/stats.get
# 禁用零拷贝 fork(回退至官方实现)
curl -X POST http://127.0.0.1:3080/dsh-fork-perf/api/config.set \
-d '{"zeroCopyFork": false}'
技术细节与局限性¶
实现原理¶
- 零拷贝 fork:插件通过
Session.prepare(..., { seedSource: 'persistence' })的fromRestore通道,直接使用已冻结的 seed 事件。由于事件在进入源会话时已完成 JSON 边界验证并深冻结,复用引用在安全性上等价于深拷贝。 - fast init-for:插件检测
PersistenceCoordinator.initFor中的structuredClone(seed)标记,将其替换为引用复用。若检测到源码特征不匹配(如大版本升级导致结构变化),会自动跳过优化并告警。
安全与回退¶
- 回退机制:具备三层回退能力。第一层探测缺失方法时使用官方实现;第二层运行时异常时回退官方实现;第三层可通过配置关闭优化。
- 补丁还原:插件支持
dispose方法,可还原所有补丁,确保环境整洁。
局限性¶
- enqueue 拷贝:
enqueue闭包内部的逐事件structuredClone在插件层无法安全消除。这是由于 write-behind 机制要求 persistence 与生产者解耦,根治需上游改为按需快照。 - 版本绑定:补丁逻辑绑定 dsh 0.1.0-rc.6 的内部结构(如
_forkSeed、initFor源码特征)。当进行大版本升级时,特征校验会自动跳过优化并保持官方行为,需重新适配。
适用场景¶
该插件适用于需要频繁对大型会话进行 fork 操作的场景,特别是依赖流式响应或对 UI 响应速度敏感的应用。使用前请确认 DSH 版本为 0.1.0-rc.6,并注意插件以当前 dsh 进程权限运行。