Use extended RX descriptor format
Details
This is not committable, but it demonstrates the implementation.
Diff Detail
- Repository
- rS FreeBSD src repository - subversion
- Lint
Lint Passed - Unit
No Test Coverage - Build Status
Buildable 261 Build 261: arc lint + arc unit
Event Timeline
So here's the deal, the MQ implementation is still not working right even with the extended descriptors.
The card continuously increments recv_no_buff when using 2 queues on this card and I can't for the life of me figure out why it is having issues here. Its as though it thinks one of the queues is full but the driver thinks that queue is fine.
Make the diff compileable. ;-)
Patch netmap to handle the difference between rx and tx buffer structs.
Add diagnostic printf's for mrq/rss_hash to display and verify that
the rx interrupt thread/queue is processing a packet that should have
been hashed correctly. This debug printf shows that packets are being
processed by the wrong queue and sometimes indicate non-existent queues.
Update review for more discussion.
Always setup HTHRESH/PTHRESH vars for 82574.
Remove E1000_MRQC_RSS_FIELD_IPV6_TCP as its not valid for the 82574.
Add stats knob for multiqueue to display the number of ring entries
that have been cleaned that indicated they should have been handled
by the another queue.
It'd be nice to clarify what is an extended rx descriptor and why do we need it. Also what are the benefits of using it.
If there are any specific test cases to check I would be glad to run them. Otherwise r289897M with just this patch applies behaves just fine on the two pieces of hardware below.
Supermicro X9SCM with an Intel 82579LM and 82574L
dmesg
em0: <Intel(R) PRO/1000 Network Connection 7.4.2> port 0xf020-0xf03f mem 0xfba00000-0xfba1ffff,0xfba24000-0xfba24fff irq 20 at device 25.0 on pci0 em0: Using an MSI interrupt em0: Ethernet address: 00:25:90:xx:xx:xx em0: netmap queues/slots: TX 1/1024, RX 1/1024 ... em1: <Intel(R) PRO/1000 Network Connection 7.4.2> port 0xe000-0xe01f mem 0xfb900000-0xfb91ffff,0xfb920000-0xfb923fff irq 16 at device 0.0 on pci5 em1: Using MSIX interrupts with 3 vectors em1: Ethernet address: 00:25:90:xx:xx:xx em1: netmap queues/slots: TX 1/1024, RX 1/1024
Soekris 6501 with 4x Intel 82574L
dmesg
em0: <Intel(R) PRO/1000 Network Connection 7.4.2> port 0x2000-0x201f mem 0xa1000000-0xa101ffff,0xa1020000-0xa1023fff irq 19 at device 0.0 on pci5 em0: Using MSIX interrupts with 3 vectors em0: Ethernet address: 00:00:24:xx:xx:xx em0: netmap queues/slots: TX 1/1024, RX 1/1024
Restore the code to the tested/reviewed version as I seem to have
stomped atop it with another review.