Address
304 North Cardinal St.
Dorchester Center, MA 02124
Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM
In the previous article, we showed how the CPU port becomes the bottleneck in a DSA-based system.
The obvious fix is “add more queues”.
But that’s not enough.
Because the real problem isn’t the number of queues — it’s what you put into them.
Most multi-queue NIC designs do this:
This improves throughput.
But it does not solve head-of-line blocking.
Because fundamentally different traffic still competes.
On a router, traffic falls into different categories:
These behave differently:
Putting them into the same queue is the root of the problem.
The first step is not adding queues.
It is separating traffic by topology.
We split traffic into two pipelines:
Each pipeline gets its own RX/TX path.
This removes structural contention.
Only after separation do we distribute traffic:
skb->hash % 2
This ensures:
Now we have two layers:
This is fundamentally different from generic multi-queue designs.
This mirrors how real switches behave:
Instead of:
“spread everything and hope for the best”
we do:
“separate first, then distribute”
And most importantly:
the CPU port stops being chaotic.
Head-of-line blocking is not solved by adding queues.
It is solved by structuring traffic correctly.
Topology first.
Then flow.