Repository navigation
[Grok/dsh 70] macOS 基础交互性能 #202
Copy link
Copy link
Closed
Labels
ready-for-agentAgent-grabbable workAgent-grabbable work
Description
Activity
- added a commit that references this issue
on Sep 28, 2026 已集成(票未关):macOS 基础交互性能(#202)
集成提交:
9bdaf41(已普通推送到rewrite/grok-dsh-20260920,未改动main)。本票保持 OPEN:对照冻结阈值仍有几项明显回归,按「明显回归必须解决或明确决策」需要 Kara 明确决策后才能关票(见下方「需要决策」)。
实现内容
- 测量:
scripts/rust-perf-bench.py在 macos-15 上对已安装产物与钉死的 Grok 1.0.34 参考测量;先冻结thresholds.json(写 SHA-256)再启动候选;macos-perfjob(仅ci/**且分支名含perf);报告与方法见docs/rewrite/perf/。 - 客户端修复:
- ACP
unread计数 + 短切片wait_for_input(不再在 dsh 静默时睡 80 ms); - 启动器记住已验证的产物(
~/.codsh-rust/artifact-verified.json); - 挂断看门狗:终端关闭(SIGHUP / stdin POLLHUP)后结束客户端、dsh 与启动器(约 2 s 宽限后
_exit(129)),不再在read()==0上空转; - 首次
connect()放到工作线程:连接期间 Ctrl+Q 立即退出并killdsh 进程组,连接期间输入的文字保留; - 大粘贴:第一行不是工作区文件即停止逐行 resolve;打字帧合并绘制;
- 自动压缩:读回 session 的 Node helper 放到后台,答完先上屏;
- 同步 ACP 请求(含退出时的
session/close)有响应即返回,不再多等最多 50 ms 的 pump 切片。
- ACP
- Changeset
rust-macos-perf.md;README / CONTRIBUTING 说明。
检查(本地 box,Linux x64,
/workspace/verify-logs/202-final)cargo fmt --check、pnpm typecheck、debug、clippy -A通过;严格 clippy 仅 2 个已知错误。test:rust:792 passed,4 个已知 Linux 失败(同基线)。pnpm test:110 files;2676 passed / 15 skipped(一次负载下rust-plan.spec超时,单独重跑 13/13 通过)。build+build:rust+check:rust-package+rust-install-test+ plain-pipe 通过;e2e:177 passed / 1 skipped。rust-terminal-pty-test.py:early-quit(约 30 ms)、early-keys、hangup / hangup-sighup 通过;resume / cancel / permission 通过;prompt / core-pty 在 Linux 按设计拒绝。
真实运行(GitHub Actions macos-15)
角色 分支 / 运行 说明 BEFORE ci/202-perf-before-c#36396967149仅 unread/验证缓存;冻结阈值见 docs/rewrite/perf/before/AFTER(最终) ci/202-perf-after-f#36420609436 job 108928623905全套修复;报告见 docs/rewrite/perf/after/(job 因未全部达标而失败属预期)中间证据 after-d #36413796946(粘贴)、after-e #36415337209(异步 compact) 保留未删 Fullscreen p50(BEFORE → AFTER,单位 ms,除非注明):
指标 before after 冻结上限/下限 结果 start:first-output 133 89 ≤ 69 fail start:ready 138 92 ≤ 928 pass input:draft 3 1 ≤ 24 pass input:paste 54 21 ≤ 47 pass output:first-visible 375 186 ≤ 105 fail output:end-after-model 240 72 ≤ 166 pass output:throughput 291 K B/s 935 K ≥ 663 K pass quit:exit 679 35 ≤ 264 pass rss:tree-peak 329 MiB 305 MiB ≤ 129 MiB fail 分解(after,fullscreen 中位):dsh
submit-to-request~120–140 ms(参考 ~40–50);模型流本身 ~7–9 ms;start:connected~1 s;客户端 RSS ~18 MiB,树峰值 ~305 MiB(Node 启动器 + dsh Node)。dsh 0.1.5-rc.3 整段答案一次agent_message_chunk,无 ACP token 流式。对照验收标准
- 测量候选前冻结三平台对应阈值的方法与 macOS 负载;参考工作集、硬件、模型时序可重现(
docs/rewrite/perf/)。 - 修复并重验客户端侧回归(粘贴、退出、挂断、吞吐、答后绘制等)。
- 未关票:相对参考的明显回归需 Kara 决策(见下),不能事后放宽阈值使验收通过。
需要决策(关票前)
- dsh 侧延迟 / 无 ACP 流式 →
first-visible(及部分 minimalend-after-model)。修需要更新 dsh 或换传输,不是更多客户端绘制。是否接受并记入文档,还是阻塞到更新 dsh? - RSS 架构 → 树峰值 ~305 MiB(Node 启动器 + dsh)对参考单进程 ~100 MiB;客户端本身 ~18 MiB。是否接受架构差异?
- warm start:first-output p95 → 中位常低于上限,p95 仍偶发越线(CI 噪声 + Node 启动器)。是否接受?
已记录的差异
- 干净容器 / 其他平台未跑本 bench([Grok/dsh 70] macOS 基础交互性能 #202 范围是 macOS)。
- 折叠提示「→ expand」不展开答案;Tab / Enter / End 可以(小 UX,非性能门禁)。
- 草稿分支
ci/202-perf-*保留未删(见最终报告列表)。
未改动
- 未改动
main,未发布包/标签/Release,未改仓库设置或 secrets;未关本票。
- 测量:
- added a commit that references this issue
on Sep 28, 2026 已关票:macOS 基础交互性能(#202)
实现提交(此前已集成):
9bdaf41
文档提交(本次):d90fc62(已普通推送到rewrite/grok-dsh-20260920,未改动main)。Kara 于 2026-09-28(CST)明确接受对照冻结参考仍未达标的三项差距;阈值文件未事后放宽。测量数字与原因已写入
docs/rewrite/perf/README.md(Accepted gaps 节),证据仍为ci/202-perf-after-f#36420609436 /docs/rewrite/perf/after/。接受的三项差距(fullscreen after-f)
差距 实测 冻结上限 原因 output:first-visiblep50 186 ms / p95 246 ms ≤ 105 ms dsh 0.1.5-rc.3 ACP 回合启动约 120–140 ms(参考约 40–50 ms);长答案以一次 agent_message_chunk到达,无 ACP token 流式,首屏无法早于整段 submit→chunk。需更新 dsh 或换传输,不是更多客户端绘制。minimal 同因失败;minimalend-after-model亦同。rss:tree-peakp50 ~305 MiB / p95 ~312 MiB ≤ ~129 MiB 架构:Node 启动器 + dsh Node 主导进程树;Rust 客户端本身约 18 MiB。参考为单进程约 100 MiB。接受多进程栈,非客户端泄漏。 start:first-output(warm)p50 89 ms / p95 141 ms ≤ 69 ms 热启动首屏;Node 启动器 + CI 噪声。冷启动已通过。中位接近上限,p95 仍偶发越线。 粘贴、退出、吞吐、fullscreen
end-after-model等已在 after-f 通过冻结门禁(见先前证据评论)。对照验收标准
- 测量前冻结阈值与方法(
docs/rewrite/perf/)。 - 客户端侧回归已修并重验(粘贴、退出、挂断、吞吐、答后绘制等)。
- 相对参考的明显回归已由 Kara 明确决策接受并记入文档(未放宽阈值冒充通过)。
未改动
- 未改动
main,未发布包/标签/Release,未改仓库设置或 secrets;未改thresholds.json。
- 测量前冻结阈值与方法(
Metadata
Metadata
Assignees
Labels
ready-for-agentAgent-grabbable workAgent-grabbable work
Parent
#132
Ticket: 70
Status: ready-for-agent
User Stories: 71, 72(见父规格)
What to build
用户在 macOS 安装产物中能够迅速开始输入、滚动长输出和缩放界面,性能符合预先冻结的参考阈值。
Acceptance criteria
Blocked by
Delivery contract
用户于2026-09-20批准当前测试与任务拆分。按父规格的已安装产物/真实终端和公开协议测试验收;实际实现须带适用的文档、Changeset及必要检查。ready-for-agent表示任务已定义,不表示前置任务已完成,也不授权自动开始本轮实施、购买付费资源或发布软件版本。