资讯动态

io_uring 零拷贝的致命陷阱:为什么 send 成功了,你却不能释放内存?

发布时间:2026/10/5 20:25:16 来源:尧图企业网站定制
IORING_OP_SEND_ZC提交后你拿到的第一个 CQE 只代表"send 调用返回了",不代表 buffer 可以释放。真正的释放信号是第二个带IORING_CQE_F_NOTIF标志的 CQE——它意味着网卡 DMA 已经完成、内核不再持有你的页面。这篇从内核io_uring/net.c的io_send_zc到ubuf_info的回调链,逐层拆解这个"双 CQE"协议的每一个环节:为什么必须是两个 CQE、notification 什么时候到、IOSQE_CQE_SKIP_SUCCESS跟它怎么配合、以及它比MSG_ZEROCOPY的MSG_ERRQUEUE方案到底好在哪。一个 buffer 的"死亡通知书"// Linux 6.x, io_uring userspacestructio_uring_sqe*sqe=

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑