Skip to main content

Module ring

Module ring 

Source
Expand description

AF_XDP Ring 操作封装

实现与内核 AF_XDP Ring 兼容的四环操作(Fill/RX/TX/Completion):

  • 支持模拟模式(Vec backing store,用于测试和开发)
  • 支持内核 mmap 模式(通过 XDP_MMAP_OFFSETS 获取内核 ring 地址)
  • SPSC 无锁批量操作
  • 基于 XdpDesc(内核 xdp_desc)的描述符传递

§内核 Ring 结构

AF_XDP Ring 在内核中的内存布局(每 ring):

[flags]      (4 bytes) - XDP_RING_NEED_WAKEUP 等标志
[producer]   (4 bytes) - 生产者索引(用户态写,内核态读)
[consumer]   (4 bytes) - 消费者索引(内核态写,用户态读)
[desc0]      (16 bytes) - 第一个 xdp_desc
[desc1]      (16 bytes) - 第二个 xdp_desc
...

§偏移量

通过 getsockopt(XDP_MMAP_OFFSETS) 获取各 ring 偏移:

  • XDP_RX_RING_OFFSET: RX Ring 在 mmap 中的偏移
  • XDP_TX_RING_OFFSET: TX Ring 在 mmap 中的偏移
  • XDP_FILL_RING_OFFSET: Fill Ring 在 mmap 中的偏移
  • XDP_COMPLETION_RING_OFFSET: Completion Ring 在 mmap 中的偏移

§unsafe 使用

本文件实现与内核共享内存的 Ring 原语,包含 mmap 地址读写与裸指针访问。 是 crate 内部四个被精确放开 #[allow(unsafe_code)] 的文件之一。

Structs§

RingOffsets
Ring 内存布局偏移(相对于 ring 起始地址)
XskRing
AF_XDP Ring

Enums§

RingType
Ring 类型

Constants§

MAX_SIMULATED_CAPACITY
模拟模式([RingStorage::Simulated])环容量硬上限(2^20 = 1M 项)
XDP_RING_NEED_WAKEUP
XDP_RING_NEED_WAKEUP 标志(内核 UAPI include/uapi/linux/if_xdp.h(1 << 0) = 0x1)