第一周 - 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 统计粒度的语义对齐,为后续性能测试和优化工作打下了坚实基础。下周将重点转向真实硬件环境的搭建和性能基线建立,正式启动实习计划的第一阶段工作。