当前结论(2026-09-06 收口)
观测已由 #2308 落地;结构性重构保持 DEFERRED。 该 issue 跟踪的是 EventLog,不是 FileStore / SQLite 的公共锁。后两者的独立候选见 #2256。
已有本地 ARM64 / ext4 测量证明了停顿机制和规模上界,但没有证明实际持久化负载下的发生频率;不能将未配置 EventLog 的实例上“计数为零”当作无需优化的证据,也不指定已退役的实例作为采样目标。
已有测量(历史证据,不是本轮重跑)
truncateLocked:截断工作在 Append 的锁内完成
默认超过 50 MiB 后保留尾部 75%,重新读取并写回约 37.5 MiB。所有 publisher/replay 共用 EventLog 自己的 l.mu。
| maxSize |
keepBytes |
触发截断的 Append |
| 2 MiB |
1.5 MiB |
42 ms |
| 4 MiB |
3 MiB |
77 ms |
| 8 MiB |
6 MiB |
155 ms |
| 50 MiB 默认 |
37.5 MiB |
约 0.97 s,线性外推;独立对照中实测 952 / 966 ms 的截断停顿 |
每增加约 12.5 MiB 新事件触发一次截断。按当时约 660 bytes/event 的夹具估算,约每 1.9 万条一次;这不是现场事件速率。
ReadFrom:全量与常见 tail replay 不同
| replay 形态(45 MiB 日志) |
墙钟 |
| tail 50 条 |
0.75 ms |
| tail 500 条 |
7.3 ms |
| cursor=0 全量,约 7 万条 |
1,095 ms |
并发测量中 Append 的最大等待接近 replay 全程。较差形态出现在冷启动、首次全量连接或 cursor 早于存活窗口;不能将其描述为所有重连均冻结一秒。
下一次有效取证条件
- 选择明确启用
AGENTHUB_EVENT_LOG_PATH 的隔离 staging 或已授权持久化实例;先证明配置与日志写入真实生效。
- 收集日志尺寸、事件速率、replay 形态、gap/截断次数与耗时。指标为:
edge_event_log_truncations_total
edge_event_log_truncate_failures_total
edge_event_log_gaps_total
edge_event_log_truncate_duration_seconds_total
edge_event_log_truncate_last_duration_seconds
- 满足任一既定触发条件再评估结构性方案:截断耗时占比
rate(edge_event_log_truncate_duration_seconds_total[1h]) > 0.005、最近一次截断 >0.5 s、gap 持续出现,或 truncate failures 增长。必须注明采样时窗和负载,不拿一次人工压满日志的测试冒充现场频率。
约束
原始测量过程与理由保留在此前评论及 #2301 / #2308;本 issue 仅保留结构性决策与下一次有效取证入口。
当前结论(2026-09-06 收口)
观测已由 #2308 落地;结构性重构保持 DEFERRED。 该 issue 跟踪的是 EventLog,不是 FileStore / SQLite 的公共锁。后两者的独立候选见 #2256。
已有本地 ARM64 / ext4 测量证明了停顿机制和规模上界,但没有证明实际持久化负载下的发生频率;不能将未配置 EventLog 的实例上“计数为零”当作无需优化的证据,也不指定已退役的实例作为采样目标。
已有测量(历史证据,不是本轮重跑)
truncateLocked:截断工作在 Append 的锁内完成
默认超过 50 MiB 后保留尾部 75%,重新读取并写回约 37.5 MiB。所有 publisher/replay 共用 EventLog 自己的
l.mu。每增加约 12.5 MiB 新事件触发一次截断。按当时约 660 bytes/event 的夹具估算,约每 1.9 万条一次;这不是现场事件速率。
ReadFrom:全量与常见 tail replay 不同
并发测量中 Append 的最大等待接近 replay 全程。较差形态出现在冷启动、首次全量连接或 cursor 早于存活窗口;不能将其描述为所有重连均冻结一秒。
下一次有效取证条件
AGENTHUB_EVENT_LOG_PATH的隔离 staging 或已授权持久化实例;先证明配置与日志写入真实生效。edge_event_log_truncations_totaledge_event_log_truncate_failures_totaledge_event_log_gaps_totaledge_event_log_truncate_duration_seconds_totaledge_event_log_truncate_last_duration_secondsrate(edge_event_log_truncate_duration_seconds_total[1h]) > 0.005、最近一次截断 >0.5 s、gap 持续出现,或 truncate failures 增长。必须注明采样时窗和负载,不拿一次人工压满日志的测试冒充现场频率。约束
原始测量过程与理由保留在此前评论及 #2301 / #2308;本 issue 仅保留结构性决策与下一次有效取证入口。