Hasty Briefsbeta

双语

Lockless MPSC FIFO queues for io_uring

6 days ago
  • 旧的io_uring任务队列使用无锁单链表(llist),它类似于栈,需要反转以实现FIFO顺序,导致效率低下且增加了复杂性。
  • 新的无锁MPSC队列(多生产者,单消费者)使用尾指针和存根哨兵来实现真正的FIFO,无需反转或重试循环。
  • 生产者使用xchg()原子地更新尾指针,通过全内存屏障确保顺序;无需锁或重试。
  • 消费者维护一个独立的头指针以避免缓存争用,并使用带有cmpxchg的mpscq_pop()来处理列表为空或同时添加时的竞争情况。
  • 新队列简化了io_uring代码,减少了内核开销,提高了性能,并用于io_uring 7.2,代码位于io_uring/mpscq.h中。