Receive side scaling (RSS) for more than 16 queues not working in "ixl" driver.
The FreeBSD driver version is 1.4.1
My system has 20 CPU cores. The packet-processing application uses NIC RSS feature to filter packets to dedicated receive queues for each core.
NIC is able to do RSS properly for Queue-0 to Queue-15, and packets reach the right receive queues.
But not a single packet reach Queue-16/17/18/19.
Instead Packets for Queue-16/17/18/18 reach Queue-0/1/2/3
Possibly some RSS specific register settings missing in the drivers that restricts NIC from using more than 16 receive queues
Linux driver doesn't seem to exhibit this behavior.
So it looks like the hash is being used to index into the HLUT, but the resulting queue is then mod 16.
HLUT(45): 0x24252627 (where bits 21:16 contain LUT entry 4*45+2) and a packet received on queue 5 has a hash of 0xa33600b6 in its RX descriptor. According to the HLUT, it should really have gone to queue 37.
This is really odd.
Try replacing the line
ctxt.info.tc_mapping = 0x0800
ctxt.info.tc_mapping = 0x0c00
Tushar has said this enabled RSS on all of his queues, so it looks like the change I posted worked and should be included in the driver.
(In reply to Eric Joyner from comment #3)
Did this get dropped into the ixl(4) update you pushed to phabricator?
(In reply to Sean Bruno from comment #4)
I fixed this in a previous phabricator review that was committed (https://reviews.freebsd.org/D5203), but I enhanced it slightly there and need to include those changes in the review I posted above, though.
Did the submitter get a chance to see if this fixed his problem? Otherwise, I'm going to close this.