跳转至

ArceOS 与 StarryOS 异步网卡实现对比

标签:async, nic, arceos, starryos

ArceOS 项目中的以太网驱动与异步封装,和 StarryOS 项目中的异步网卡数据面,属于两条不同的实现路线:前者以目标硬件开发板驱动先行,异步封装后补;后者先以模拟器完成软件分层,真机方案延后。两者不能直接互用,但可互相借鉴。

ArceOS

时间跨度为 2025 年 5 月至 10 月,向主仓库提交 84 次,向驱动实现子模块提交 30 余次,目标是让网卡在目标开发板上收发数据。

  • 驱动层:完成以太网介质访问控制控制器所需的基本寄存器配置、收发描述符环形队列、物理层收发器配置和中断处理,均在真机运行验证。
  • 异步层:为连接套接字提供接收、发送、接受连接、建立连接四种异步操作,并改造异步运行时;设备中断处理函数持全局锁调用轮询整条收发链,唤醒回调由轮询过程触发。
  • 遗留缺陷:接受连接操作在资源暂不可用时没有登记唤醒回调,依赖外部周期轮询,否则该操作永久等待;设备就绪状态不透出异步上下文,靠中断处理函数主动触发整链轮询;全局的设备、接口与套接字锁在对称多处理与多队列场景下不适用。

StarryOS(我的实现)

面向模拟器平台,第 4 至第 7 阶段已完成并按验收证据归档。

  • 分层数据面:硬中断处理函数只做原因读取、应答、屏蔽与唤醒,数据搬运交给按队列划分的处理任务;协议栈推进由独立的协议栈执行任务承担,独占地持有协议栈接口与套接字集合。收发描述符由队列归属者推进,数据包通过所有权凭证转移。
  • 正确性机制:使用原子唤醒原语配合"登记后复查",避免丢失唤醒;每轮处理量设上限防忙等;描述符状态机配合复位代次隔离迟到的完成事件;压力过高时在队列层背压。
  • 运行时:复用既有的任务调度器,不引入自研异步执行器;等待原语取自同步库。
  • 真机:尚未开展,目标开发板未确定,待目标硬件事实检查通过后决定。

差异对照

维度 ArceOS StarryOS
起点 真机硬件先行 模拟器软件分层先行
中断处理职责 处理函数持锁轮询整链 处理函数只做唤醒,搬运在队列任务
协议栈推进 中断回调触发 协议栈执行任务在任务上下文推进
压力与预算 未建立 每轮处理量上限、显式背压
数据所有权 无描述符归属概念 描述符状态机、所有权凭证、复位代次
丢失唤醒 存在该缺陷 原子原语配合登记后复查
异步运行时 自研执行器 复用既有调度器
验证顺序 直接真机 模拟器分层证据,真机待事实检查

差异原因

起点不同使整条实现路径不同。ArceOS 需先让网卡在真机完成收发,驱动落地与运行优先,异步只是为套接字提供一层可等待的封装,正确性机制没有单独建立。StarryOS 在模拟器上先把数据所有权、竞争与恢复处理完毕,真机由事实检查决定,因此"中断处理只唤醒、队列任务搬数据、协议栈执行任务跑协议栈"的分层,正是针对前一条实现中处理函数做重活、操作永久等待、锁粒度过大等问题重构而来。

可借鉴之处

  • ArceOS 中的缓存一致性处理、处理器地址与总线地址分离、真机时钟复位与中断事实具有复用价值;真机阶段按控制器类型决定采用其代码还是仅采用经验。
  • 模拟器只能验证软件层的数据所有权、中断到队列任务再到协议栈的控制流与多数软件竞争条件,无法验证真机的缓存、直接内存访问、中断时序或吞吐,真机结论需另行取证。

来源

  • ArceOS 部分:ArceOS 仓库 .claude/analysis/mingyang-overview.md、mingyang-async-network.md(2026-06-26 生成)。
  • StarryOS 部分:StarryOS 仓库 .claude/analysis/async-network-project-overview.md、.claude/docs/tasks.md(第 4 至第 7 阶段归档)。

以上内容依据既有分析整理,尚未核对两边仓库当前提交状态;提交号、行号与最新状态以两仓库实际代码为准。