RustROS · 2026-10-26 · 主线 872016e

M4 报告:网络系统调用

M4 做完了:进程能用套接字(TCP、UDP、Unix 域),在 Debian 13 根目录里 apt-get update、apt-get install curl 都能完成,curl 通过 HTTPS 取回网页。进程的 TCP 连接在替换协议栈、文件系统层和系统调用模块时不断。

回归测试(KVM 测试机)46 项全部通过新增 net 测试;debian 测试加上域名解析、apt、curl 和 LTP 的套接字测试
LTP 套接字测试32 通过4 个已知未通过(见下文),7 个需要内核配置文件或 ip 工具,不在这里跑
进程的 TCP62 MB/s到本机;经 QEMU 用户网络到测试机的回显服务器每个方向约 18 MB/s
转发18.8 / 18.3 Gbit/sTCP 单流 / 4 流;64 B 单流 358、16 流 383 kpps(嵌套虚拟机上波动约 15%)

设计套接字放在哪里

验收测试里做了什么

测试内容
net(新)Unix 域:一对套接字传 300 KB、命名监听者的连接和应答、数据报保持边界;本机 UDP、接收超时;本机 TCP 传 500 KB;非阻塞 accept 和 epoll 等连接;连接被拒(非阻塞和阻塞);1 MB 经 TCP 到测试机的回显服务器再回来;一个进程保持着 TCP 连接,期间替换 netstack、vfs、linux 三个模块,前后数据都正确,对方关闭后进程读到结束,套接字随进程关闭
debiangetent 解析 deb.debian.org;apt-get update;apt-get install curl(下载、解包、执行各包的配置脚本,含 ca-certificates);curl 以 HTTPS 取 https://deb.debian.org/debian/ 得到 200;LTP 的 socket、bind、listen、accept、connect、send/recv 各形式、getsockopt/setsockopt、shutdown 等测试

发现为跑通 apt 和 curl 补上的

遗留还没有的

缺口影响打算
终端(伪终端)apt 想用伪终端显示 dpkg 的输出,失败后自动退回不用终端;交互式 bash、docker exec -it 需要M5
System V IPC(信号量、共享内存、消息队列)PostgreSQL 等需要;LTP sendmsg02容器跑数据库前补上
IPv6、netlink协议栈还没有 IPv6;ip 一类工具要 netlink按需
传递描述符(SCM_RIGHTS)、MSG_MORE、组播少数程序用到;LTP send02、accept02按需
每个进程(容器)自己的协议栈实例现在进程都用主机的协议栈(即 host 模式)N(容器网络)

下一步

先发布 M4 并更新两台机器(模块接口有变化,所有模块重装)。之后已确认、还没做的有:TLS 共享模块(M3 后的一小步,M4 先做了)、进程的最低 CPU 份额(应用改成用户态进程之前要有),以及按里程碑顺序的 N(容器网络)。另有一项待你决定:内核瘦身评估(把开机后很少用、或会常改的部分移到模块里,让更多更新可以热更新、不用重启)。