dsh-perf-lens:按插件归因的 DSH 资源开销面板

前言

DeepSeek Harness(DSH)里每个宿主插件都跑在同一个 Node 进程里。用系统工具看占用,只能看到「这一整个进程」用了多少 CPU、内存和磁盘,很难回答「到底是哪个插件在拖慢机器」。临时写 profiling 脚本可以凑合,但面板一关、问题一过,归因链路往往就断了。

dsh-perf-lens 是维护者 Nwflower 发布的客户端类 DSH 插件:在进程内部采样,把开销记到触发栈上的插件上,并在 dsh web 的 Web GUI 里用 Perf Lens 面板展示;浏览器侧还会用 Long Animation Frames API(不支持时退化为时间关联)把长帧脚本时间按插件归因,用来对照「哪个插件让页面卡顿」。下文介绍它是什么、能看什么、怎么装、采样怎么调、读数时要注意什么。

这是什么

dsh-perf-lens 的定位是:DeepSeek Harness 插件资源开销面板——按插件看清 CPU、内存与磁盘相关占用(英文简介:A DSH plugin panel showing which plugins use the host CPU, memory and disk, attributed per plugin)。

环境要求

安装前确认宿主环境满足 README 与 package.json 中的约束:

  • DeepSeek Harness 0.1.7-alpha.1 或更高,且使用 Web GUI(dsh web)
  • Node.js 22.13 或更高(与运行 DSH 宿主的 Node 一致)

核心功能

在 Web GUI 左侧打开 Perf Lens 后,面板大致包含以下视图(界面语言随 GUI 中英文设置):

进程总览(Process overview)

展示 RSS、堆、事件循环延迟、GC 暂停、最近窗口中的 idle 比例等;并补充宿主单独无法给出的读数:子进程树(数量、合计 CPU / 内存)、采样未能归账的 CPU、以及进程持有的异步资源。

开销构成(Cost composition)

在整个进程范围内,各插件占用的 CPU 与采样堆比例。

当前 Top 消耗(Top consumers)

当下开销最高的插件,含平均与峰值。

趋势(Trend)

最近一小时、一天或一周内,按插件的 CPU 走势。

累计排行(Cumulative cost ranking)

所选时间范围内 CPU 累计消耗排名。

插件详情(Plugin detail)

全部插件可分组、排序;最重 harness 包可展开;深度模式下可看各插件热点函数。另含 listeners(来自 cordis 事件注册表,精确)与 on-disk bytes(扫描 $DSH_HOME 及各插件目录,精确)。

前台卡顿(Foreground jank)

浏览器中的长任务与掉帧;长帧脚本时间按插件归因(Long Animation Frames API),并与当时宿主在忙什么并列展示。无该 API 的浏览器用 plain time correlation。在 DSH Desktop 窗口中浏览器不提供该归因时,可用 jank probe 开关,改为测量各插件 scheduled callback 占用主线程的情况(毫秒、调用次数、单次最长调用)。

安装与启用

插件尚未发布到 npm,需按官方 README 从本地构建产物注册到 profile(资料中的步骤如下;路径请换成你机器上的实际目录)。

先在本地检出并构建(产出 lib/,含 host 与单文件 client bundle):

git clone https://github.com/Nwflower/dsh-perf-lens.git
cd dsh-perf-lens && pnpm install && pnpm build

在默认 web profile 中编辑 ~/.dsh/profiles/web/package.json,把 bundle 加入 dsh.profile.bundles,并用 link: 指向本地路径:

{
  "dsh": { "profile": { "bundles": [ /* … existing bundles … */, "dsh-perf-lens" ] } },
  "dependencies": { "dsh-perf-lens": "link:D:/path/to/dsh-perf-lens" }
}

安装 profile 依赖并重启 Web 服务:

cd ~/.dsh/profiles/web && pnpm install

宿主侧在服务器启动时加载,需重启 dsh web 后生效。README 说明:将来 npm 发布后,依赖可改为 "dsh-perf-lens": "^0.1.0" 且无需本地 build。若 profile 的 pnpm minimumReleaseAge 策略拦截安装,可一次性执行 pnpm install --config.minimumReleaseAge=0,而不必改 profile 全局设置。

典型用法:采样强度怎么选

采样本身有成本,Perf Lens 用短窗口采样,并通过三项控制组合决定「实际在跑什么」——面板展示的是当前真实运行的组合,而不只是按钮状态。

强度(Intensity,三档之一)

档位 行为 适用
Low(默认) 每 30 秒或更久一次 5 秒窗口;宿主 idle 时退到 2 分钟,并以每 10 秒 1 秒的廉价检查避免漏掉突发 常开
High 连续 2 秒窗口;10 分钟后回到 Low 正在盯面板排查时
Stop 不再开新窗口 希望宿主完全不被前台采样打扰时

后台采样(Background sampling,开 / 关)

仅在强度为 Stop 时有意义:开启后仍每 2 分钟做一次粗粒度 2 秒窗口,面板关闭也能保留长期记录。在 Low / High 下与前台采样重复,无额外作用。

内存采样(Memory sampling,开 / 关)

在任意正在运行的窗口上叠加堆采样,用于内存归因、每插件热点函数、以及经 harness 回调调度工作的归账;是最贵的选项,且是唯一在 CPU 采样之上额外收费的项目。

常见组合(README 原意):

  • Stop + 后台开:廉价的长期记录
  • Low + 内存开:日常 profiling
  • High + 内存开:「我正在实时看这块」

任意修改立即生效;三项设置由宿主上报,刷新页面后仍保持一致。

读数与限制

份额与绝对值

插件的 share 是其在该窗口内进程实际使用的 CPU 中所占比例。宿主很闲时分母极小,几毫秒的工作也可能显示 90%。面板会同时给出绝对成本:每秒 CPU 毫秒与单核百分比——跨时间、跨机器对比时应以绝对值为主。

归账规则

每个采样沿调用栈上溯到最近的插件帧,因此插件调用的依赖与 Node 内建算在该插件头上。Harness built-ins 为框架自身合并一行;Runtime(GC、native/syscall、Node 内部、事件循环等)为栈上无插件帧的工作;This plugin’s overhead 为 Perf Lens 自身。采样而非精确测量的项会标明;累计排行在采样覆盖不足时会隐藏无法诚实外推的全区间估计。Jank 表会显示可归因脚本时间占比;无法解析的 combo bundle 落在 Unresolved 行,不做猜测。

已知限制(节选)

  • 没有 per-plugin RSS:单进程只有一个 RSS;内存数字来自深度模式下的采样堆分配,不是各插件物理 footprint。
  • 子进程只展示、不归因:总览报告宿主后代进程合计开销;哪个插件 spawn 了子进程尚未测量;轮询间隔内启停的子进程可能看不到(面向长期存活的后代,如语言服务器、dev server、终端、构建)。Windows 上每次轮询约 330ms wall time,默认每 30s 一次,面板打开时会立即刷新。
  • 磁盘字节读写未测:每插件文件操作次数与 on-disk 占用(扫描 $DSH_HOME 与插件目录)是精确的;读写字节量不是。扫描不跟随符号链接,文件通过链指向两棵根目录外时可能显示为空。
  • Timers 与 handles 目前仅进程级(README 在此处截断,细节以仓库文档为准)。

适用场景与注意

适合:在 DSH Web GUI 中长期或按需观察「哪个插件在吃 CPU / 堆 / 磁盘与监听」、对比趋势与累计排行、并把浏览器卡顿与宿主负载对照排查的开发者与插件作者。

注意:

  • 插件与 DSH 宿主在同一 Node 进程与相同权限下运行;安装前请自行审阅 https://github.com/Nwflower/dsh-perf-lens 源码与 MIT 许可证。
  • 社区目录 SkillHub 为独立站点,与 DeepSeek / 幻方无官方从属关系;本文事实以仓库 README 与 package.json 为准。
  • 星标等目录元数据会变动,以各站点当前展示为准。

结尾

dsh-perf-lens 把「整进程看不清、临时脚本难维护」的问题,收束到 Web GUI 里可配置的采样与按插件归因面板:宿主侧 CPU / 堆与磁盘相关指标、浏览器侧 jank,以及 listeners、on-disk 等精确列,便于在插件变多时定位开销来源。

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

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

Xiaoye