Disentangling the Dual Role of NIC Receive Rings

Split Rx ring into allocation (Ax) and reception (Bx) rings → reduce I/O working set, improve throughput up to 37%

Featured image

Venue: OSDI 2025
Link: USENIX OSDI ‘25

Topic: NIC Rx rings serve two functions: buffer allocation and packet reception. Their combined I/O working set often exceeds LLC capacity, degrading throughput. rxBisect separates these roles into two rings to reduce the working set without sacrificing burst absorption.


Summary

Modern NICs use per-core Rx rings sized to absorb bursts. As ring size or core count grows, the aggregate I/O working set (N×R buffers) exceeds the LLC, causing cache evictions and memory bandwidth pressure. rxBisect splits each Rx ring into an allocation ring (Ax) for empty buffers and a bisected reception ring (Bx) for packet notifications. The NIC can consume a buffer from any Ax ring to deliver a packet to any Bx ring — enabling lockless cross-core buffer sharing. Result: up to 37% throughput improvement, 11× latency reduction, and robust performance under load imbalance.


Background

How Rx rings work

The I/O working set problem


Key Idea

rxBisect: separate allocation from reception


Design

Design principles:

  1. Separate buffer allocation from packet reception using independent Ax and Bx rings.
  2. NIC offloads synchronization → lockless cross-core buffer sharing.
  3. Small Ax rings keep I/O working set within LLC; large Bx rings absorb bursts.

Challenges addressed:

Implementation:


Evaluation

Key results:


Limitations


Meeting Notes

(to be filled)