長期的開發工作Linux 內核網絡子系統的 IO_uring 零拷貝發送現已準備好用於主線。
幾個月來,Pavel Begunkov 一直致力於支持 IO_uring 零拷貝發送,現在一切都已搞定並準備好與 Linux 5.20 合併。基準測試看起來很棒,代碼現在對於主線來說已經足夠成熟了。
截至昨天,“io_uring-zerocopy-send”支持是 排隊到 net-next 作為下一個內核合併窗口的網絡子系統代碼。
補丁集實現 io_uring zerocopy 發送。它適用於註冊緩衝區和普通緩衝區,允許但不推薦混合。除了通常的請求完成之外,就像 MSG_ZEROCOPY 一樣,io_uring 會在緩衝區被釋放並且可以重用時單獨通知用戶空間(參見下面的 API 設計),它被傳遞到 io_uring 的完成隊列中。這些“無緩衝區”通知不一定是每個請求,但用戶空間可以控制它,並且應該明確地將多個請求附加到單個通知。當與註冊緩衝區一起使用時,該系列還添加了一些內部優化,例如刪除頁面引用。
從內核網絡的角度來看,有兩個主要變化。第一個是將 ubuf_info 從 io_uring 傳遞到網絡層(在內核結構 msghdr 內部)。這允許額外的優化,例如ubuf_info 緩存在 io_uring 端,也有助於避免交叉引用和同步問題。第二部分是一個可選的優化,刪除帶有註冊緩衝區的請求的頁面引用。
通過 for-5.20/io_uring-zerocopy-send 是由維護者 Jens Axboe 排隊的 IO_uring 側更改。 Linux 5.20 正在形成一個大內核。
Jakub 為 io_uring tx zerocopy 支持合併了 prep net 系列:https://t.co/l6Axk5WUr9
我在此基礎上展示了其餘部分:https://t.co/35veXfsMVM
5.20 進展順利!
— Jens Axboe (@axboe) 7 月 20 日, 2022