OpenWrt RPS / IRQ affinity — use every core, not just one
A gigabit line that "only" needs 1 Gbps still makes one CPU core work flat out. RPS (Receive Packet Steering) plus IRQ affinity spreads that work across every core, so you stop dropping packets when the line fills. NetSteer automates both. As of 2026-11.
The single-core bottleneck
Most router NICs expose a single receive queue. The kernel delivers every packet on that queue to one CPU core (the one the NIC's interrupt is pinned to). That core does the whole network stack for your entire link — and at gigabit it hits 100% while every other core idles. The result: packet drops, and SQM can't shape what already got dropped.
What RPS does
RPS tells the kernel: now that a packet has arrived, hand the processing to a different core. It adds a software steering step so a single-queue card can still use all your cores. Combined with IRQ affinity (moving the interrupt off the hot core) and isolating the busy cores from the scheduler, the whole link gets processed in parallel.
Measured effect
On our reference box (NanoPi R5C (4× Cortex-A55) · 1000M↓/50M↑ DSL), enabling the all-core receive path gave:
The win shows up in sustained throughput under many concurrent transfers — exactly the "everything at once" situation SQM handles for latency. RPS and SQM are complementary: RPS stops the drops, SQM keeps the queue short.
What NetSteer automates
- Detects your NIC and core count during the health check.
- Enables RPS and spreads the receive queues across the free cores.
- Applies IRQ affinity so the hot core is not also running the OS.
- Expert page: per-core tuning of RPS/XPS/IRQ for the tinkerer.
See the SQM/CAKE and NAT type guides for the other two pillars.
FAQ
What is RPS on OpenWrt?
RPS (Receive Packet Steering) is a Linux kernel feature that lets you use a single-queue NIC and still spread packet processing across multiple CPU cores. Without it, one core receives every packet and saturates at about one gigabit while the others sit idle. Enabling RPS is what makes multi-gigabit line rates possible on a single-queue card.
What is IRQ affinity and why does it matter?
IRQ affinity decides which CPU core a hardware interrupt (packet arrival) is handled on. If all NIC interrupts land on core 0, you get the same single-core bottleneck even with RPS. Spreading IRQs and RPS queues across cores — and isolating the busy cores from the OS scheduler — is what NetSteer’s expert page lets you tune per core.
Do I need RPS if I already have SQM?
They solve different problems. SQM (CAKE) keeps latency low under load; RPS spreads the packet-processing work so you do not lose throughput because one core is the bottleneck. On a soft router doing both is the full fix — NetSteer enables them together.