Skip to content

feat: log and report slot growth triggers - #124

Merged
nange merged 1 commit into
masterfrom
feat/observe-slot-growth
Aug 28, 2026
Merged

feat: log and report slot growth triggers#124
nange merged 1 commit into
masterfrom
feat/observe-slot-growth

Conversation

@nange

@nange nange commented Aug 27, 2026

Copy link
Copy Markdown
Owner

背景

传输层懒加载扩容(grow)此前无任何观测手段:OpenRequest 不带目标信息,grow() 无日志,导致无法回答"是哪类请求(协议、目标 IP:端口)触发了槽位扩容"。用户曾在统计页面观察到 bulk 池槽数在两次刷新间从 2 涨到 9(默认配置下 bulk 池上限恰为 9),需要定位触发请求。

改动

  • transport.OpenRequest 新增 Target 字段(仅用于观测,不参与调度),由 proxy 层 openAndBootstrap 全量传入(TCP/UDP/ICMP);
  • grow() 返回实际扩容的池子与扩容后 live 槽数(nil 表示未扩容),并发写锁串行化保证归因精确到真正触发扩容的请求;
  • Open 在触发扩容时打印 [TRANSPORT] slot grown 日志(pool/live/endpoint/proto/target);
  • TransportStats 新增 recent_grow_events(最近 16 条扩容事件环形缓冲,新→旧,含时间/池子/槽数/endpoint/目标);
  • stats 新增 slot_grown_priority / slot_grown_bulk 累计计数,并加入 30s 周期的 [STATS] 日志。

验证

  • 新增测试:grow 返回值契约、64 并发下仅一次归因、环形缓冲顺序/上限、并发读写无竞态(-race)、端到端归因(首个 Open 触发首激活 +2 并记录 target);
  • go test -race ./transport/... ./client/... 通过;make lint 0 issues;
  • go test ./...utilTestIsTunIface 失败,属环境既有问题(本机存在 easyss TUN 接口 utun9,已在干净树上复现,与本次改动无关)。

使用方式

复现扩容场景后查看客户端日志中的 [TRANSPORT] slot grown 行,或刷新统计页面查看 recent_grow_eventsslot_grown_* 计数。

@nange
nange merged commit 1bc6b64 into master Aug 28, 2026
6 checks passed
@nange
nange deleted the feat/observe-slot-growth branch August 28, 2026 02:31
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