第一周 - Antareske/tgoskits GitHub Wiki

实习周报(2026-07-12)

本周工作进展

一、网络统计字节计数机制改进

1. eBPF 方案探索与调整

回退了完全非侵入式的 eBPF 监测方案,目标是通过 kprobe/kretprobe 机制在不修改内核代码的情况下统计网络收发字节数。然而在实际实现过程中遇到了以下技术障碍:

  • kretprobe sret ABI 限制:函数返回值在 kretprobe 触发时位于 RAX 寄存器而非 RDI,导致字节计数为零。修复此问题后发现 eBPF 加载器存在符号过度匹配问题(匹配到 19 个符号),需要进行精确的符号过滤。

  • 内核迭代适配成本:考虑到 StarryOS 正处于快速迭代阶段,完全依赖函数符号的 eBPF 探针可能因内核重构而失效,维护成本较高。

  • Linux 实现参考:研究发现 Linux 本身的网络统计也是基于内核已有的统计字段(如设备驱动层或协议栈层的计数器),而非完全依赖 eBPF 动态插桩。

基于以上分析,暂时搁置了纯 eBPF 方案,转而采用在内核协议栈关键路径埋点统计的方式,且对齐 Linux。

2. 统计粒度调整:从 L3 到 L2 #1571

原实现在 socket 层统计返回的字节数,这对应于 L3(IP 层)或更高层的数据负载,与 Linux /proc/net/dev 的 L2(以太网帧)统计语义不一致。做了以下改进:

  • 统计位置下移:将统计点从 socket 返回值改为 smoltcp 物理层(phy layer),在 Device::send() 和 Device::recv() 处统计完整的 L2 帧长度。

  • 驱动层适配:修改网络设备驱动(ax-net)的 send 和 recv 接口,使其返回实际发送/接收的 L2 帧长度,包含以太网头部(14 字节)、IP 头部、传输层头部及数据负载。

  • 语义对齐验证:通过对比测试确认 StarryOS 的 /proc/net/dev 字节计数与 Linux 在相同网络负载下的统计结果基本一致,符合 L2 帧统计的预期。

二、文档完善与测试验证

  • eBPF 限制文档:详细记录了 kretprobe sret ABI 的技术限制及解决方案,为后续开发者提供参考。

  • net-bench 文档更新:修正了测试套件中过时和不准确的描述,确保文档与实际实现保持一致。

  • 测试覆盖补充:针对字节计数修复增加了端到端验证,确保在真实网络负载下统计数据的准确性。

下周工作计划

一、网络测试套件完善

在分析当前测试套件后发现,net-bench 作为端到端性能基线测试工具已较为完整,但在性能分析能力上还有提升空间。下周将重点补充测试套件的统计维度和可观测性能力。

1. 应用层统计增强

  • 应用层有效负载统计:在 socket 层补充应用可见字节数统计,便于分析协议开销占比。

  • 分层统计对比:同时提供 L2(以太网帧)、L3(IP 包)、L4(TCP/UDP 段)和应用层的字节计数,构建完整的网络栈开销分析视图。

  • 统计维度扩展:补充 /proc/net/dev 的 packets(包计数)、errors(错误计数)、drops(丢包计数)等维度,完全对齐 Linux 语义。

2. 内核可观测性建设

当前测试套件以用户态监测为主,下周将补充内核态的性能分析能力,为后续性能优化阶段提供工具支持。

  • CPU 效率分析集成:将 perf stat 集成到测试流程,自动报告 CPU 效率指标(cycles/byte、IPC、cache-miss-rate 等),识别 CPU 效率差距。

  • 协议栈统计接口:实现 /proc/net/snmp 等价接口,监测协议栈健康度(TCP 重传率、乱序率、UDP 丢包率等),判断性能问题是否由协议栈异常导致。

  • eBPF 跟踪工具:根据时间情况,尝试开发数据包路径跟踪和 CPU 热点分析工具。

--------------- edit ---------------

优先实现对 SG2002 WiFi 驱动的性能优化:

尝试实现 eBPF 对 SG2002 WiFi 驱动的性能测量,并考虑异步的方法优化驱动的性能。

二、SG2002 真实硬件测试准备

按照实习计划的第一阶段目标,启动 SG2002 开发板测试环境的准备工作。由于硬件可能需要一段时间才能到位,下周将优先进行不依赖实体硬件的准备工作。

  • 网络拓扑方案设计:规划 SG2002 WiFi 测试的网络拓扑,确定测试主机与开发板之间的连通性方案。

  • 测试脚本适配方案:分析 QEMU 与 SG2002 的差异,制定测试脚本适配计划。

  • 环境因素监测方案:规划 WiFi 信号强度、干扰情况等环境因素的监测和记录方式。

  • 构建流程验证:如果可远程访问 SG2002 环境,验证镜像构建流程和 WiFi 驱动功能。

总结

本周主要完成了网络统计机制的核心改进,从 eBPF 探索到内核埋点方案的选型,以及从 L3 到 L2 统计粒度的语义对齐,为后续性能测试和优化工作打下了坚实基础。下周将重点转向真实硬件环境的搭建和性能基线建立,正式启动实习计划的第一阶段工作。