Skip to content

[Grok/dsh 77] 三平台并发与长期资源压力 #209

Description

@Blackman99

Parent

#132

Ticket: 77

Status: ready-for-agent

User Stories: 69, 71, 72(见父规格)

What to build

用户在三平台上运行后台命令、子代理和工作流时仍可交互,长时间运行及退出后资源保持可控。

Acceptance criteria

  • 在测量候选负载结果前冻结三平台对应阈值与负载,参考工作集、硬件和模型时序可重现。
  • 并发子代理、任务输出、工作流暂停/恢复及长会话状态更新下的输入、滚动和内存增长满足阈值。
  • 停止、退出、崩溃恢复后无无主进程或持续计费活动,未知外部任务如实显示。
  • 输出性能与资源证据;新发现的大改造单独建票,不能删功能或事后放宽阈值使验收通过。

Blocked by

Delivery contract

用户于2026-09-20批准当前测试与任务拆分。按父规格的已安装产物/真实终端和公开协议测试验收;实际实现须带适用的文档、Changeset及必要检查。ready-for-agent表示任务已定义,不表示前置任务已完成,也不授权自动开始本轮实施、购买付费资源或发布软件版本。

Activity

  1. Blackman99 commented on Sep 29, 2026

    @Blackman99
    OwnerAuthor

    #209 关闭说明(压力与长期资源,三平台)

    决定: Kara 已接受以现有修复集成并关闭 #209,剩余 4 项差距统一转入后续工单 #221(https://github.com/Blackman99/codsh/issues/221)。阈值在运行前冻结,看到结果后没有放宽。

    提交: b78e28d(已普通推送到 rewrite/grok-dsh-20260920,未改写历史)

    完成内容:

    • 新增 scripts/rust-stress-bench.py 与 rust-platforms.yml 的 stress 作业(ubuntu-22.04 / macos-15 / windows-2022,ci/** 且分支名含 stress 时运行,证据在 evidence/stress):先测参考 Grok 1.0.34(SHA-256 校验、不分发),冻结 thresholds.json 并记录其 SHA-256,之后才启动候选。负载:4 个后台子代理 + 1 个后台命令、3 子代理内联工作流的暂停/恢复/停止、30 轮长会话、负载下退出,以及崩溃(SIGKILL / TerminateProcess)后 --continue 恢复。每项指标单独判定有效性,无法判定的指标会让运行失败;--fetch-reference DIR 可预先取参考二进制。
    • 修复 1:dsh 退出多挂约 1.1 s。原因是 .credentials.yaml 不存在时 dsh 让 chokidar 监视整个 dsh home,退出时的写入触发未被清除的 1 s 节流定时器。现在在隔离 dsh home 中按需创建空的 0600 .credentials.yaml(从不覆盖已有文件;/logout 不把空文件算作已存凭据)。Linux 本机负载下退出约 1306 → 300 ms。
    • 修复 2:Node 24 下 dsh 年轻代让长会话 RSS 多涨 40–55 MiB(100 轮验证为堆尺寸而非泄漏)。JS dsh 以 --max-semi-space-size=16 启动(与 Node 22 一致)。rss:long-growth 三平台由失败转为通过(约 6–9 MiB)。
    • 文档:docs/rewrite/perf/stress.md(含 Kara 的决定与 Rust 客户端:负载下退出、Linux 工作流恢复、Windows 控制通道与长会话单轮延迟的剩余差距(#209 后续) #221),三平台 thresholds.json / report.json / report.md 在 docs/rewrite/perf/stress/;README、CONTRIBUTING、changeset 已更新。
    • 单元测试:credentials_placeholder_is_empty_owner_only_and_never_replaces、js_dsh_runs_with_the_young_generation_cap_before_the_script。

    三平台结果(ci/209-stress-c,run 36465419485): 硬性要求三平台全部通过(退出后无遗留进程、退出/崩溃后无模型流量、崩溃后无孤儿进程、恢复时不把被杀掉的工作标为仍在运行、样本齐全)。未达阈值项(均转入 #221):

    平台 指标 候选 / 阈值
    Linux quit:under-load 404 / 135 ms
    Linux workflow:resume 195 / 77 ms
    macOS quit:under-load 517 / 249 ms
    Windows quit:under-load 610 / 219 ms
    Windows long:turn(后期单轮) 213 / 125 ms
    Windows workflow:pause 15253 / 298 ms(控制通道已关闭)
    Windows workflow:resume 无样本(因暂停失败)

    冻结阈值 SHA-256(报告中的 thresholdsSha256):

    • linux-x64:223acb1b7974337b66485609aea88c1c5f2dffacf969e138d3df04b25b723d0a
    • macos-arm64:27524b88601101ab8bc45fc51f68889990068d623ae953c1f69747d6f20f5f66
    • windows-x64:1af530934277990c54d058be82a92a5f8bcd826d9a8fc65113d33eb7dcba2812(按 LF 内容计算;仓库中的文件与 CI 产物逐字节一致,为 Windows 写出的 CRLF,去掉 CR 后哈希一致)

    其他 CI:ci/209-stress-a run 36456545956、ci/209-stress-b run 36464593369(修复前后的迭代证据);集成分支 run 36511561221(b78e28d)。

    本地完整验证(最终代码,Linux):

    • fmt、typecheck、debug 构建、clippy(允许已知告警)、build、build-rust、package-check、install-test:通过;clippy -D warnings 为既有的已知失败,与本工单无关。
    • cargo test:codsh-rust 798 通过 / 4 失败(与基线相同的环境相关已知失败:两个 filesystem_sandbox、privacy::drafts_stay_local…、voice::substitute_route…);其余 crate 498 + 42 + 61 + 2 + 379 + 61 全部通过。
    • pnpm test:2684 通过 / 8 跳过(111 个测试文件)。
    • e2e:177 通过 / 1 跳过。
    • PTY:terminal、prompt、cancel、tmux、shell、nav、screen、voice、remote 全部通过;plain-pipe 通过;core-pty 为已知的 macOS 网络审计门槛(Linux 上无法验证)。

    后续:#221 跟踪上述 4 项差距(负载下退出×3 平台、Linux 工作流恢复、Windows /workflow pause 控制通道、Windows 长会话单轮延迟),属于 #132。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions