dsh-fork-perf:DSH 对话分支性能优化插件

前言

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}'

技术细节与局限性

实现原理

  1. 零拷贝 fork:插件通过 Session.prepare(..., { seedSource: 'persistence' }) 的 fromRestore 通道,直接使用已冻结的 seed 事件。由于事件在进入源会话时已完成 JSON 边界验证并深冻结,复用引用在安全性上等价于深拷贝。
  2. 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 进程权限运行。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜