Summary
With the VPP dataplane and the PPPoE server (accel-ppp, vpp-cp=true), all upstream (subscriber → network) PPPoE traffic is received on NIC queue 0. It is therefore processed by one VPP worker, however many workers and RX queues are configured. Downstream traffic (plain IP) is spread across all workers as expected.
The cause is NIC RSS: the NIC cannot parse inside PPPoE, so it cannot compute a hash and puts every PPPoE frame on one queue. This was observed on:
- Intel XL710
- Intel E810-C (validated NIC).
Upstream PPPoE capacity per router is therefore limited to what one CPU core can forward.
Use case
ISP BNG deployments of 10–100 Gbps with many PPPoE subscribers on one VLAN (N:1).
Steps to reproduce
- Configure VPP on an E810-C (or X710) interface with multiple workers and RX queues.
- Configure service pppoe-server on a VLAN sub-interface of that port.
- Establish many PPPoE sessions with distinct client MACs and IPs, and send upstream traffic.
- Clear counters, wait 60 s, and check vppctl show runtime: look at pppoe-input per worker.
My result (60 s windows)
| Upstream offered | vpp_wk_0 pppoe-input vectors | vectors/call | Other 12 workers | eth8 rx-miss |
|---|---|---|---|---|
| 25 Gbps (2.23 Mpps) | 133,962,163 | 3.35 | 0 data packets | 0 |
| 50 Gbps (4.46 Mpps) | 267,924,081 | 9.70 | 0 data packets | 0 |
| 90 Gbps (8.04 Mpps) | 462,382,463 | 255.99 (saturated) | 0 data packets | 19,963,357 |
- Ceiling: at 90 Gbps, vpp_wk_0 shows vector rates in 7.7045e6. One worker caps upstream PPPoE at about 7.7 Mpps (about 86 Gbps at 1400 B, about 32 Gbps at 512 B).
- Downstream: in a two-way 45 + 45 Gbps test, downstream (plain IP) was spread over all 13 workers, while upstream PPPoE stayed on vpp_wk_0.
Expected result
Upstream PPPoE is distributed across all configured workers, as plain IP traffic is.