Receive Side Scaling
BCM5718 Programmer’s Guide
Broadcom
®
January 29, 2016 • 5718-PG108-R
Page 104
RSS Rx Packet Flow
Each CPU or CPU core in multiprocessor systems is assigned one receive return ring. Only a single interrupt is
initiated at a time.
1.
As packets arrive, the device parses each packet, calculates the RSS Hash, and derives the CPU number
(i.e., receive return ring number) from Indirection Table using the Masked Hash Result as the Indirection
Table Index.
2.
The packet data is DMAed to the host memory at the location specified by the receive buffer descriptor
(RBD) of the receive producer ring.
3.
Based on the derived CPU number, the device DMAs the used RBDs into appropriate receive return rings
in host memory.
4.
The device fires the interrupt via MSI, which causes the device driver ISR to run.
5.
The ISR disables further interrupts from the device, determines which CPUs have receive packets to be
handled and uses inter processor communication mechanisms to start packet receive handlers on CPUs
whose return rings have new RBDs.
6.
Each CPU processes the new RBDs in it’s receive return ring when its packet handler routine is started by
main ISR.
7.
Once the main ISR determines that all new RBDs have been processed by the CPUs, it enables the
interrupts from the device and exits.