Skip to content

perf: [P2] 对齐端到端与裸 TCP 基准工作量,校正框架开销的性能结论 #70

Closed

Description

@CSJ608

评审基线:StreamFrame 2.6.0,提交 4b892d9eaa11cf003b5d10793e735b0604bc17ed(2026-09-08 仓库评审)。

评审发现

基准存在可核查的工作量差异,但本轮未重跑整套 BenchmarkDotNet,不能宣称现有测量数值本身全部无效。

  • bench/StreamFrame.Benchmarks/EndToEndBenchmarks.cs:40 中服务端计数后还 SendAsync 回显,客户端另有回显消费任务。
  • bench/StreamFrame.Benchmarks/RawTcpFloorBenchmarks.cs:65 只读取字节并计数,无回显、无消息物化。
  • 两者可用于各自场景的吞吐参考,但直接相减不能精确分离框架自身开销。README 中“快于裸 TCP”“大报文框架税”等结论需按口径解释。
  • 大报文归因另有计数消费无回显的实现,应分别标明,不应把不同实验的结果交叉拼成一个成本结论。

建议

建立明确分组:

  1. 单向传输:两端都不回显,统一负载、发送批次、完成点和接收工作量。
  2. 往返延迟:两边都做相同回显,统一每条消息的等待语义。
  3. 框架与 Codec 成本:分别报告字节负载、字符串物化、XML 等场景,解释裸字节对照省略了哪些工作。
  4. 记录 Socket 配置、机器、运行时、提交 SHA、迭代、分配统计口径及测量噪声。

保留现有环境与噪声披露的优点。“零拷贝”应明确指减少帧路径的一次整体拷贝,而非端到端没有任何拷贝/分配。

验收

  • 基准名称、实际执行工作与文档口径一致。
  • 同口径基准可复现,原始 BenchmarkDotNet 结果可追溯。
  • 至少覆盖 64B/1KB/64KB 与两种 Framer;将噪声与稳定差值分开说明。
  • README/bench README 的百分比与结论仅对应支持它的实验。
  • 顺手核对 bench README 指标开销的单位换算:2.6ns × 100000/s = 260µs/s,现有约 0.026µs/s 的说法不符。
  • 文档中的筛选命令与拆分后的实际 benchmark 类名相匹配。

实施按 AGENTS.md:从最新 main 建分支、同步 CHANGELOG Unreleased、通过 Release build/test、走 PR;本 Issue 仅登记工作,不代表已实施修复。

Activity

  1. CSJ608 commented on Sep 8, 2026

    @CSJ608
    OwnerAuthor

    #70 验收已由 PR #81 交付并 rebase 合并到 main 9111919。

    • 72组完整矩阵(单向/RTT × 双Framer × 64B/1KB/64KB × 三Codec × 两种传输);每组正式10个样本,串行运行;另有72组连续双批内容校验与36组BDN Dry。
    • 同一编码/定界/物化校验及最终完成点;单向无回显、RTT逐条等待。Socket读回双方收发64KiB、NoDelay=false、KeepAlive=false。
    • 原始结果与限制:测量源码SHA、逐迭代JSON、完整日志、CSV、环境、命令、SHA256均入库。保留显著噪声及最短迭代提示,不声称稳定精确百分比或纯框架税。
    • 双语README/bench说明修正历史跨工作量归因、零拷贝边界、筛选类名和260µs/s单位;旧大报文实验本身无回显也单独说明。
    • Release build零警告;net8/net10各132通过、net48 124通过,各3个夜间Soak按设计skip。PR全部CI绿后合并,未干预ci: [P2] 修正 Soak 的 OS/TFM 矩阵,避免 Ubuntu 执行 net48 #66/test: [P1] 校准混沌测试交付契约并调查消息计数失败与 net48 长测未收敛 #67;main CI与main CodeQL均已通过。本地/远端实施分支已删除。
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

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions