CS 168 · LECTURE 22 · 2026-11-17 · 数据中心
网络越来越快后,瓶颈常从链路移到主机:系统调用、拷贝、中断、内核协议栈与调度共同吃掉 CPU 和尾延迟。
版本快照:Fall 2026 官方课表与在线教材,核对日期 2026-09-02;官网仍标注 under construction,日期与政策可能变化。
100 Gbit/s 网卡为什么仍可能只得到低应用吞吐,哪些 offload 真正减少了哪类工作?
同样字节率下,小包意味着更高 packets/s,每包 descriptor、interrupt、allocation 和协议处理成为主导。interrupt coalescing、polling、batching 用一点等待换取摊薄固定成本。
评价优化应同时报告 packet size、batch size、core 数、NUMA 位置与延迟分位;只报 Gbit/s 会隐藏 CPU 代价。
TSO/GSO 让内核交给 NIC 一个大 buffer,由硬件拆成 MTU 大小 segment;GRO/LRO 在接收侧聚合后再交上层。checksum offload 把可机械执行的计算移到 NIC。
这些主要减少每包处理,不改变 TCP 的端到端可靠语义。抓包在卸载前可能看到“超大 segment”或未完成 checksum,不能据此断言线上包违规。
DPDK、io_uring 的部分路径或用户态网络栈可减少 syscall、上下文切换和通用内核路径,应用直接轮询 NIC queue。收益是低延迟/高吞吐与自定义,代价是占用 core、内存管理、安全隔离和生态复杂度。
kernel bypass 不是自动更快:低负载下 busy polling 浪费能量,错误 NUMA 放置或小 batch 也会抵消优势。
RDMA 让 NIC 直接在已注册内存间移动数据,减少远端 CPU 参与和拷贝。应用发布 work request,NIC 通过 completion queue 告知完成;buffer 注册、权限 key 和生命周期是安全边界。
Send/Recv 与 Read/Write 的远端参与不同。低延迟并不消除拥塞、排序或资源管理,反而要求网络近乎无损或用精细 CC 防止队列问题。
比较 64 B 与 1 MB 消息在 syscall、packet count、copy 与 cache 上的成本;为 TSO、kernel bypass、RDMA 分别写出收益和新增风险。
检查:TSO 主要减少什么?
packet 从 NIC queue 经 driver/kernel socket 到应用
packet 从 NIC queue 经 driver/kernel socket 到应用;offload/bypass 改变每包 CPU state 与 batching 边界。
检查:判断一个实现分支是否必要,最有力的问题是什么?
对比逐包 syscall 与 batch=32 的事件次数。
答案必须出现 packet/message、local state/table、触发 event、after state 与 output;只给定义不算完成。
正文是 CourseStack 的中文解释与重新绘制的教学例子;官方页面负责课程原始定义,历史仓库只提供你的实现证据。