Skip to content

Network 采集技术演进与实验:源时钟修正案例 ​

2026-10-26 · 同层参考、方向隔离与完整五轮 ​

本页9月来源路线之外,10月完成进程网络历史阶段与整机收发新五轮;两类scope不能互相代验。整机收发按Owner政策正式通过,保留无独立精度参考标记;当前55/66、其余11项暂停。

表现与机制:真实上传完成、两端文件SHA相同,只证明负载/内容;RVI、进程counter、全设备producer与服务器有效载荷在对象/协议层/窗口上可能不同。手机上能读的ifmib/诊断候选也必须先查权限和语义,不能把“有字节数”当合格整机真值。参考候选与用例。

已做实验:整机发送旧attempt在第4轮出现来源异常而仍输出candidate,整队列失败且原件保留;v8补异常保管与窗口传播,v9进一步按方向隔离字段。合法发送与非法接收分别判质量,但拒绝输入不得消失;随后各自新完整五轮,不拼旧成功。异常修复 · 方向隔离 · 发送结果 · 接收结果。

判断与避免:先确认所选process/device及send/receive,核初始快照、重置、整数累计、来源序号和实际窗口;服务器流量不能除以产品窗口后冒充同层真值。无新源不续缓存,异常窗口不补零,不用成功传输掩盖坏值。确认当前无完整合格参考后,才按政策标记通过;不等于硬件故障、永远无法解决或无需异常测试。Owner正式决定。

本节E1复盘,引用既有E2/E4;方法及参考门见实验方法索引。

1. 当前结论先放前面 ​

  • Process Network 的速率计算必须使用源端 NSDate 时钟做分母,不能用主机(Mac)收包时刻——这是一条经过真机证据验证的硬性规则,源于一次真实的 GB/s 级人工假峰值事故。
  • Device Network 与 Process Network 是两个独立 source(dvt.networking vs dvt.debug-gauge.network-statistics),没有互相替代。早期 Process 问题发生在分母时钟;2026-10-03另确认 Device 来源混窗与 Process UInt64负增量外观,当前分别按v7来源桶/完成发表、v3字节表示域保护。

2. 最初工程问题 ​

进程级网络统计需要把 Debug Gauge 按 PID 上报的累加字节数差分为速率,这需要一个可靠的时间窗口分母。

3. 第一代方案与为什么当时合理 ​

早期实现使用主机(Mac)接收到两次回包的时刻之差作为分母——这是最直观的实现方式:数据到达 Mac 端就记录一个时间戳,两次到达时刻相减得到窗口长度。在大多数场景下这个假设是成立的。

4. 暴露出的真实问题 ​

2026-09-06 的真机自校准发现:iOS 18 Wi-Fi userspace 采集中,Debug Gauge NetworkStatistics 的第一个 PID 回包可以带有较旧的源端 NSDate 时间,紧随的第二个回包已经跳到当前时间,其 net.*.bytes.delta 实际覆盖的是这一大段源时间窗口——但如果用两次主机收包的间隔(仅约 2 秒)做分母,会把跨度约 19 分钟的真实累计字节除以 2 秒,人为放大出约 2.46 GB/s 的虚假峰值。这是设备到主机之间批处理投递延迟导致的经典"窗口-分子不匹配"问题:分子(累计字节)覆盖的是源端的长窗口,分母却使用了主机侧的短间隔。

5. 候选方案:改用源端时钟差分(已采纳) ​

  • 假设:如果分子(net.tx/rx.bytes.delta)是源端在某个时间窗口内累计的字节数,分母就必须使用同一时间基准(源端 NSDate),而不是主机收包时刻。
  • 实验:冻结公式 source-interval-rate.candidate.v2:rate[n] = deltaBytes[n] / (sourceTime[n] - sourceTime[n-1]),sourceTime 取同一 PID 行内 time: NSDate 的 Cocoa 秒时钟,原始值另存为 sourceTimestampCocoaSeconds;scope 为 PID + target generation,重绑后重新 warmup ;第一个真实 PID 行为 warmup;源时钟存在时必须使用源时钟,差值非正输出 invalid-window;仅旧录制或无源时钟的可控 Fixture 允许退化为 host monotonic 窗口回放,标记 candidate-host-window,不与真机源时钟结论混合。
  • 验证:确定性重放覆盖空 acknowledgement、首点 warmup、源时钟大窗口、旧录制 host 回退、非递增窗口等场景;iOS 18 Wi-Fi 长于 40 秒的真机 Session 重跑后确认 GB/s 级人工峰值消失,同类 Wi-Fi 场景 Recv 最大值回落到 7,445,571.45 bytes/s(约 7.1 MB/s),量级合理。
  • 判定:采纳,是当时 ios.process.network.send_rate / receive_rate 的标准实现(source-interval-rate.candidate.v2);当前v3继承源时钟并增加负增量保护。

6. 被证伪路线与停止条件 ​

未发现被系统性证伪并放弃的独立技术路线——这次演进是"发现分母时钟选错了"并直接修正为正确实现,不是多个候选路线的竞争淘汰。

7. 最终方案为什么胜出 ​

源端时钟方案胜出,因为它让分子和分母使用同一时间基准,从根本上消除了"批处理投递延迟导致窗口计算错误"这一类问题,而不是事后对结果做上限截断或平滑掩盖异常值——截断/平滑会掩盖真实的采集问题,源时钟修正解决的是问题本身。

8. 从 POC 到产品化又踩了什么坑 ​

  • 该修正与 P2 批次的公式先行表一起进入 CORE-8 确定性引擎(Process Send/Recv 使用 interval-rate.v1 起始实现,随后在 P2/P5 自校准批次中通过真机证据升级到 source-interval-rate.candidate.v2)。
  • 2026-09-06 的 P2/P5 Foundation 自校准批次同时验证了该公式在真机上的实际效果,并把源时钟结论写入用户知识页,形成"文档先行→代码修正→真机复测→知识页更新"的完整闭环。

9. 当前仍未关闭的门禁 ​

  • Device Network 与 Disk I/O 均未见到独立于其他指标域的专项 E4 校准批次,证据依附于跨指标联合采集会话。
  • candidate-host-window(源时钟缺失时的降级路径)在真机 iOS 18+ 场景下的触发频率尚无独立统计。
  • 弱网、后台传输、VoIP 等场景下"合法持续流量"与"异常轮询"的边界目前主要靠人工判断,知识库尚未提供可操作的自动化区分规则。

10. 可复用工程经验 ​

  1. 分子和分母必须使用同一时间基准:这是本次演进最核心的教训——差分类指标的窗口计算错误,往往不是算法本身错了,而是分子和分母来自不同的 clock domain。
  2. 真机自校准能发现测试环境中不容易复现的边界情况:19 分钟源时间差这种极端场景很难在单元测试或短时 Fixture 里覆盖,需要足够长的真机 Session(本例为 40 秒以上的 Wi-Fi 场景)才会暴露。
  3. 修正后要有可验证的复测证据,而不是只改代码就认为问题解决——本次修正给出了具体的复测最大值(7.1 MB/s),证明修正后的量级回到了合理范围。

11. 原始 devlog 索引 ​

  • p2-process-network-source-clock-amendment.md:源时钟修订方案与冻结公式。
  • p2-p5-foundation-self-calibration-result.md:19 分钟源时钟异常的真机发现与复测证据。
  • p2-collector-core-core8-metric-engine.md:Process Send/Recv 首次纳入确定性公式引擎。

完整正文见 site/devlog/index.md 时间线或对应 /archive/ 归档页。

12. 延伸阅读 ​

2026-10-03 当前增量 ​

Process v3只在0≤rawDelta<2^63时将原delta除以原来源interval;负数/sign-bit外观输出null/source-sentinel,不削峰或补0。Raw保留,负值来源根因未定。Device v5按完整来源秒桶与来源完成水位发表,磁盘/调度四项计数差分按实测设备Mach timebase 。源字节/来源窗/E4与物理精度分列,实施与新包验证。

2026-10-03 R7增量:此前聚合等待下一事件才关窗,source静默时额外延迟;v6以订阅内定时器关闭已存在1s窗,不生成无来源零值;source窗口/实际关闭时刻分列,0更新metadata-only保持missing 。E2与新包E4以同一devlog为准。

2026-10-04 R9:source-closure.v1 Raw的完整来源桶直接发表,不用sys空刷新覆盖仍新鲜值;每桶一次、无源不补0、旧无标记Raw仍legacy调度。1.5s/2s门与数值公式保持,新增CSV→wire来源窗复算;当前两轮新包E4待验,物理带宽仍candidate。

2026-10-04 R9当前状态:v7来源完成发表的E2回归/旧Raw兼容已通过,b109已公证覆盖安装;Mac再次锁屏、0新轮,两轮CSV全部样本≥90%与wire来源独立复核PENDING,物理校准仍candidate。结果与下一动作。

版本历史补记 ​

日期修订来源
2026-10-26补本月实验结论、失败路线与适用限制;早期阶段数字保留月度梳理

Perfowl · Performance Observer