Alexander Duyck writes:

> On Fri, Oct 13, 2017 at 11:26 PM, Lluís Vilanova <vilan...@ac.upc.edu> wrote:
>> Hi! I'm not sure if this is the right venue for this question, so feel free 
>> to
>> redirect me.
>> 
>> I'm trying to put some "additional information" on client-generated packets 
>> to
>> direct them to specific queues of a X540-AT2 nic (server running on Linux);
>> i.e., some type of client-directed queue balancing.
>> 
>> So far, I've tried the following with no luck (any ideas?):
>> 
>> * VLAN tag:
>> Assigning separate VLAN tags for each target queue has as a result that my
>> server receives no packets, since it's listening on the main NIC interface
>> which has no VLAN tags assigned. Is there a way to drop them once received, 
>> so
>> that they'll only be used for "queue balancing"?
>> 

> So how many different queues do you need to divide your traffic into?
> If you can work with only 8 total classification types you might look
> at using the VLAN priority field and just use VLAN 0 for all your
> traffic. That would work around the redirecting to VLANs issue.

Unfortunately I need 16 queues (one per core on the server host).


>> * TOS field (bits 8-15 of IPv4 header):
>> When I use ethtool to direct packets to each queue based on the TOS field, 
>> the
>> nic seems to ignore it (TOS is always 0 on the rules):
>> 
>> $ sudo ethtool -U em2 flow-type tcp4 tos 1 action 10
>> Added rule with ID 2045
>> $ ethtool --show-ntuple em2
>> 16 RX rings available
>> Total 1 rules
>> Filter: 2045
>> Rule Type: TCP over IPv4
>> Src IP addr: 0.0.0.0 mask: 255.255.255.255
>> Dest IP addr: 0.0.0.0 mask: 255.255.255.255
>> TOS: 0x0 mask: 0xff
>> Src port: 0 mask: 0xffff
>> Dest port: 0 mask: 0xffff
>> VLAN EtherType: 0x0 mask: 0xffff
>> VLAN: 0x0 mask: 0xffff
>> User-defined: 0x0 mask: 0xffffffffffffffff
>> Action: Direct to queue 10
>> 

> Not surprising as the hardware doesn't support the TOS field for
> filtering. The fact that it was overlooked was a bug though. You could
> probably file a bug for that at e1000.sf.net

True, I was looking at the wrong datasheet and thought TOS filtering was
available.


>> * user-def:
>> I've also tried with user-def to overcome the TOS field "problem", but it
>> seems I can only use that on the last two bytes:
>> 
>> $ sudo ethtool -U em2 flow-type tcp4 user-def 2  action 10
>> Added rule with ID 2045
>> $ ethtool --show-ntuple em2
>> 16 RX rings available
>> Total 1 rules
>> 
>> Filter: 2045
>> Rule Type: TCP over IPv4
>> Src IP addr: 0.0.0.0 mask: 255.255.255.255
>> Dest IP addr: 0.0.0.0 mask: 255.255.255.255
>> TOS: 0x0 mask: 0xff
>> Src port: 0 mask: 0xffff
>> Dest port: 0 mask: 0xffff
>> VLAN EtherType: 0x0 mask: 0xffff
>> VLAN: 0x0 mask: 0xffff
>> User-defined: 0x2 mask: 0xffffffffffffff00
>> Action: Direct to queue 10
>> 

> I'm not sure what you were hoping to do with the user-defined field.
> Last I knew the value was just used to indicate what VF that traffic
> was going to be routed to.

I thought it would map into what the NIC's datasheet describes as:

  "Flexible 2-byte tuple anywhere in the first 64 bytes of the packet"

So I was hoping to use it as a substitute to the TOS filter (which you told me
is not available on my specific NIC).


>> And when I try to match some other bytes, it's simply ignored (user-defined 
>> is
>> always zero and the mask is full):
>> 
>> $ sudo ethtool -U em2 flow-type tcp4 user-def 2 m 0xf0ffffffffffffff  action 
>> 10
>> Added rule with ID 2045
>> $ ethtool --show-ntuple em2
>> 16 RX rings available
>> Total 1 rules
>> 
>> Filter: 2045
>> Rule Type: TCP over IPv4
>> Src IP addr: 0.0.0.0 mask: 255.255.255.255
>> Dest IP addr: 0.0.0.0 mask: 255.255.255.255
>> TOS: 0x0 mask: 0xff
>> Src port: 0 mask: 0xffff
>> Dest port: 0 mask: 0xffff
>> VLAN EtherType: 0x0 mask: 0xffff
>> VLAN: 0x0 mask: 0xffff
>> User-defined: 0x0 mask: 0xffffffffffffffff
>> Action: Direct to queue 10
>> 
>> 
>> Thanks!
>> Lluis

> The filters for the ixgbe driver are pretty limited. As I recall you
> have an EtherType mask, VLAN tag, VLAN priority, source IP,
> destination IP, source port, destination port, and if it is a TCP over
> IPv4 or UDP over IPv4 rule. Like I said I think your best chance might
> be to look at encoding and filtering on VLAN priority but that only
> gives you about 8 queues you could target since that is composed of
> only 3 bits.

> I hope that helps.

Thanks a lot. If I can't use the "user-defined" filters I will see if I can hack
into the driver to drop VLAN tags after they're used by the NIC to select an RX
queue (since I need as many queues as cores).


Thanks,
  Lluis

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
E1000-devel mailing list
E1000-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/e1000-devel
To learn more about Intel&#174; Ethernet, visit 
http://communities.intel.com/community/wired

Reply via email to