Expand description
Linux 高性能零拷贝/批量系统调用封装
本模块集中收敛与「全链路最高性能最低消耗」相关的 Linux 内核系统调用封装:
splice(2):在两个 fd 之间内核态零拷贝移动数据(pipe ↔ socket)sendfile(2):从文件 fd 直接发送到 socket fd,绕过用户态缓冲区recvmmsg(2):单次系统调用接收多个 UDP/UDP-Lite 数据报,降低系统调用开销sendmmsg(2):单次系统调用发送多个 UDP/UDP-Lite 数据报pipe2(2):创建用于 splice 中继的管道对
§设计原则(规范 §1.1 / §6.1)
- Fail-Closed:任何系统调用失败立即返回错误,绝不静默降级
- 零堆分配热路径:批量数组使用栈上数组
[libc::mmsghdr; N] - checked 算术:所有偏移、长度计算使用
checked_*防止溢出 - unsafe 隔离:所有 unsafe 集中于本文件,附
// SAFETY:注释 - 错误语义完整:errno →
LinuxError::Syscall,保留 syscall 名与 errno
§极致性能
- 单次
splice可传输最多 2^31-1 字节(Linux 限制) recvmmsg/sendmmsg单次最多 64 个数据报(UIO_MAXIOV)- 与 AF_XDP 路径互补:内核套接字场景的最优解
Structs§
- FdGuard
- 将系统 fd 包装为 RAII 守卫,确保 close(2) 被调用。
Enums§
- Splice
Flags - splice(2) 标志位
Constants§
- MAX_
BATCH_ DATAGRAMS - 批量收发最大数据报数(与
UIO_MAXIOV对齐,glibc 上限)