Page MenuHomeFreeBSD

Switch to extended rx descriptor format
ClosedPublic

Authored by sbruno on Aug 21 2015, 7:57 PM.
Tags
None
Referenced Files
Unknown Object (File)
Thu, Dec 12, 12:28 AM
Unknown Object (File)
Tue, Dec 10, 5:31 AM
Unknown Object (File)
Thu, Dec 5, 3:52 AM
Unknown Object (File)
Wed, Dec 4, 1:47 AM
Unknown Object (File)
Fri, Nov 29, 3:17 AM
Unknown Object (File)
Mon, Nov 25, 9:21 AM
Unknown Object (File)
Sun, Nov 24, 4:34 PM
Unknown Object (File)
Sun, Nov 24, 1:38 PM

Details

Summary

Use extended RX descriptor format

Test Plan

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 1988
Build 1996: arc lint + arc unit

Event Timeline

sbruno retitled this revision from to Switch to extended rx descriptor format.
sbruno updated this object.
sbruno edited the test plan for this revision. (Show Details)
sbruno added a reviewer: erj.
sbruno added a subscriber: hiren.

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.

sbruno edited edge metadata.

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.

Drop the MRQ debugging sysctl and revert this code to its final form.

Seems to work on my Thinkpad x230 w/ em(4).

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
This revision was automatically updated to reflect the committed changes.

Restore the code to the tested/reviewed version as I seem to have
stomped atop it with another review.

This revision was automatically updated to reflect the committed changes.