Session

Devmem TCP & io uring zero copy

Speakers

Willem de Bruijn
Jakub Kicinski
Mina Almasry
Shailend Chand
David Wei
Pavel Begunkov

Label

Moonshot

Session Type

Bof

Description

We’d like to give a follow up talk on devmem TCP & io uring zero copy, without recycling any of the material shared in last year’s talks:

Devmem TCP: https://netdevconf.info/0x17/sessions/talk/device-memory-tcp.html

io uring zero copy: https://netdevconf.info/0x17/sessions/talk/fast-zc-rx-data-plane-using-io-uring.html

We’d like to talk about the introduction of the ‘network memory’ abstraction (netmem). Netmem is an abstraction over the struct page currently used by the page_pool and drivers. By shifting those components to use netmem instead of ‘struct page’ directly, we open the possibility for support of non-struct paged memory in the net stack. This abstraction will be used to support these currently undergoing efforts:

  1. dma-buf memory used in devmem TCP.
  2. io uring user memory used in zero copy io uring.

But also can be considered in other use cases, such as:

  1. Storage/NVMe/SSD memory.
  2. ‘remote’ memory (DRAM that happens to be not on the current host).
  3. GPU virtual addresses (not dma-buf).
  4. etc?

Additionally, we would like to talk about real world application results for the io uring zero copy. We would like to share performance results for our disaggregated storage service application utilizing io uring zero copy, as well as challenges in adopting the kernel feature.

Additionally we’d like to talk about the recently merged queue-management ndos:

https://patchwork.kernel.org/project/netdevbpf/list/?series=849760&state=*

The initial version of the queue management ndos allows the core net stack restart individual RX queues on a net device. This is useful for triggering a refill of the RX queue buffers after re configuring the RX queue. We plan to use these ndos to restart RX queues after they have been reconfigured for devmem TCP or io uring ZC. Additionally there are proposals to extend the queue management ndos to be the basic ops that execute various ethtool configurations as well as ndo_open/ndo_stop.