Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 9 Mar 2015 12:06:48 -0700
From:      Adrian Chadd <adrian@freebsd.org>
To:        mohamed chebbi <mohamedd.chebbi@yahoo.fr>
Cc:        FreeBSD Net <freebsd-net@freebsd.org>
Subject:   Re: Looking for help with RSS IPv6 - need software hash code!
Message-ID:  <CAJ-VmokP16vMrivOaoG62TA=U3saaCLUaVFu-3RR0rMVTEmLHw@mail.gmail.com>
In-Reply-To: <54FDE98B.8030309@yahoo.fr>
References:  <CAJ-Vmom9n1HfHAq1hkEFhjmnp-FP2ZS%2B7dpJaT0dvDhDpu277g@mail.gmail.com> <54FDE98B.8030309@yahoo.fr>

next in thread | previous in thread | raw e-mail | index | archive | help
https://msdn.microsoft.com/en-us/library/windows/hardware/ff567236(v=3Dvs.8=
5).aspx

https://technet.microsoft.com/en-us/library/hh997036.aspx


-a


On 9 March 2015 at 11:42, mohamed chebbi <mohamedd.chebbi@yahoo.fr> wrote:
> Hi adrian
>
> can you please feed the link to the RSS specification.
>
> Le 23/02/2015 21:38, Adrian Chadd a =C3=A9crit :
>>
>> Hi!
>>
>> The last annoyingish bit for IPv6 RSS support is a full software hash
>> routine to calculate an RSS hash based on the various fields in the
>> IPv6 header. I'm unfortunately out of spare cycles to try and finish
>> it so I'm asking for help.
>>
>> In order to support this in the kernel we need to not only know what
>> to do with the hardware RSS, but also have a fallover path to software
>> hashing if the NIC doesn't hash it for us, or doesn't hash it
>> correctly. For example, if we get IPv4/IPv6 fragments (which yes, are
>> a thing, don't tell me they're not), we need to reassemble the
>> fragments into a single frame, and then re-calculate the RSS hash on
>> the reassembled frame header to figure out where it would've gone. We
>> have to do this because the RSS hash value is also used as an index
>> into the PCBGROUP hash table array - so no matter whether packets in a
>> flow are fragmented or not, they're correctly serialised into the same
>> netisr queue and the PCB information for that flow is in the same
>> PCBGROUP array bucket.
>>
>> For doing "correct" RSS, we need to have support for hashing various
>> fields and this isn't just limited to 2-tuple / 4-tuple hashing. IPv6
>> has a bunch of mobility header options and RSS has support for these
>> (the TCP_EX and UDP_EX fields.)
>>
>> I've done the software hashing path for IPv4, but I need someone to
>> help me do the IPv6 RSS hash calculation for all the variations - IPv6
>> 2-tuple IPv6 TCP, IPv6 UDP, IPv6 TCP_EX (mobility), UDP_EX (mobility.)
>> The microsoft RSS specification is online and freely available; it has
>> all of these as examples.
>>
>> So, I'm asking for help. If you're able to help, please look at the
>> code in -HEAD in sys/netinet/in_rss.c and sys/netinet6/in6_rss.c.
>> You'll see what's missing. You don't need a NIC that has RSS enabled;
>> if you enable RSS and PCBGROUPS in the kernel (and bump up the number
>> of netisr queues; that still isn't auto-set at boot time) then you'll
>> see that traffic will get distributed by software hashing of the
>> packet headers.
>>
>> Thanks!
>>
>>
>>
>>
>> -adrian
>> _______________________________________________
>> freebsd-net@freebsd.org mailing list
>> http://lists.freebsd.org/mailman/listinfo/freebsd-net
>> To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org"
>>
>
> _______________________________________________
> freebsd-net@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-net
> To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org"



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAJ-VmokP16vMrivOaoG62TA=U3saaCLUaVFu-3RR0rMVTEmLHw>