Skip to content

perf: 基准矩阵扩容 + 性能文档重写(发版前全面测量) - #49

Merged
CSJ608 merged 1 commit into
mainfrom
perf-assessment-2.4.0
Aug 29, 2026
Merged

CSJ608 merged 1 commit into
mainfrom
perf-assessment-2.4.0

Conversation

@CSJ608

@CSJ608 CSJ608 commented Aug 29, 2026

Copy link
Copy Markdown
Owner

按确认的测试方案执行:四个问题的答案全部落进文档。

测量结果速览(详见 bench/README,含噪声披露)

Q2 新特性成本(三轮稳定,最扎实):

  • 内置指标(无监听生产态):0.5–1.0 ns/次、零分配——"纳秒级"的说法如今有实测数字;
  • SendInSessionAsync ≈ 2× SendAsync(+10~18 µs/条中位 +11)、+≈470 B/条分配(信封+完成源+注册表)——会话语义的诚实代价;
  • 接收视图(GetSessionMessages vs GetMessages)与未完成帧超时关闭态:无可测差异。

Q3 框架税(并列绝对+百分比,最有意思的发现):

  • 小消息(64B/1KB):框架反而快于裸 NetworkStream 逐条 Write 的对照 13–52%——有界队列把入队与 socket 写出解耦成流水线,而裸写把内核写串行在发送线程上;
  • 64KB 大消息:框架 +89~138 µs/条(约 3–4×),主因每条 ~400 KB 分配(编码缓冲几何扩容)——已在文档记为优化方向。

Q1/Q4 绝对水平(两轮区间,环境披露): 1KB ≈13–13.5 万条/秒、64B ≈21–24 万条/秒(LengthPrefix);RTT ≈66–74 µs。宏基准在本开发机上两轮漂移可达 ±30%,文档全部以区间+噪声披露呈现,微基准与差值结论三轮稳定。

工程变化

  • 新增 MetricsOverheadBenchmarks、RawTcpFloorBenchmarks、SessionAwareSend/Receive/IncompleteFrameTimeoutBenchmarks;EndToEndBenchmarks 拆分为 OneWayThroughput(Framer × 64B/1KB/64KB)与 RoundTripLatency;
  • 过程修正:RawTcpFloor 初版接收循环只读一轮,第二轮起写侧无人读导致 WriteAsync 永久阻塞(发现于第一轮执行)——改为常驻接收 + 每轮重置计数(与 e2e 同款模式);
  • bench/README 结果段全量重写(环境、两轮区间、噪声披露、框架税并列表述、读数要点重写);README 双语性能摘要同步;demo 场景数描述更正。

测试

84×3 = 252 全绿(基准工程不参与 dotnet test)。合并后走 2.4.0 发版。

- 新增基准:MetricsOverheadBenchmarks(指标微基准)、RawTcpFloorBenchmarks
  (裸 TCP 地板/框架税)、SessionAwareSend/Receive/IncompleteFrameTimeout
  (新特性三轮对比);EndToEnd 拆分为 OneWayThroughput(Framer×64B/1KB/64KB)
  与 RoundTripLatency 两个类
- 关键结论(三轮稳定):指标无监听 0.5–1.0 ns/次零分配;SendInSessionAsync
  ≈2× SendAsync、+≈470 B/条;接收视图/超时关闭态无可测差异;框架税分尺寸
  (小消息快于裸写 13–52%——队列流水线;64KB 约 3–4×——编码缓冲分配主导,
  记为优化方向)
- 过程修正:RawTcpFloor 初版接收只读一轮导致第二轮起 WriteAsync 永久阻塞,
  改为常驻接收+每轮重置(与 e2e 同款模式)
- bench/README 结果段全量重写(环境/两轮区间/噪声披露/框架税绝对+百分比
  并列);README 双语性能摘要同步;demo 场景数描述更正(五场景)
@CSJ608
CSJ608 merged commit 677856b into main Aug 29, 2026
4 checks passed
@CSJ608
CSJ608 deleted the perf-assessment-2.4.0 branch August 29, 2026 03:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant