[dpdk-dev] Question about 'rxm->hash.rss' and 'mb->hash.fdir'

Min Hu (Connor) humin29 at huawei.com
Thu Jul 1 02:23:57 CEST 2021


Hi, Slava

在 2021/6/30 19:44, Slava Ovsiienko 写道:
> Hi,
> 
>> -----Original Message-----
>> From: Min Hu (Connor) <humin29 at huawei.com>
>> Sent: Wednesday, June 30, 2021 14:22
>> To: Ferruh Yigit <ferruh.yigit at intel.com>; dev at dpdk.org; NBU-Contact-Thomas
>> Monjalon <thomas at monjalon.net>; Andrew Rybchenko
>> <andrew.rybchenko at oktetlabs.ru>
>> Cc: Beilei Xing <beilei.xing at intel.com>; Matan Azrad <matan at nvidia.com>;
>> Shahaf Shuler <shahafs at nvidia.com>; Slava Ovsiienko
>> <viacheslavo at nvidia.com>
>> Subject: Re: Question about 'rxm->hash.rss' and 'mb->hash.fdir'
>>
>> Hi, Beilei, Matan, Shahaf, Viacheslav,
>>
>> 	how about your opinion?
>>
>> 在 2021/6/30 17:34, Ferruh Yigit 写道:
>>> On 6/30/2021 3:45 AM, Min Hu (Connor) wrote:
>>>> Hi, all
>>>>       one question about 'rxm->hash.rss' and 'mb->hash.fdir'.
>>>>
>>>>       In Rx recv packets function,
>>>>       'rxm->hash.rss' will report rss hash result from Rx desc.
>>>>       'rxm->hash.fdir' will report filter identifier from Rx desc.
>>>>
>>>>       But function implementation differs from some PMDs. for example:
>>>>       i40e, MLX5 report the two at the same time if pkt_flags is set,like:
>>>> ******************************************
>>>>           if (pkt_flags & PKT_RX_RSS_HASH) {
>>>>               rxm->hash.rss =
>>>> rte_le_to_cpu_32(rxd.wb.qword0.hi_dword.rss);
>>>>           }
>>>>           if (pkt_flags & PKT_RX_FDIR) {
>>>>               mb->hash.fdir.hi =
>>>>           rte_le_to_cpu_32(rxdp->wb.qword3.hi_dword.fd_id);
>>>>           }
>>>> ********************************************
>>>>
>>>>       While, ixgbe only report one of the two. like:
>>>> ******************************************
>>>>           if (likely(pkt_flags & PKT_RX_RSS_HASH))
>>>>               mb->hash.rss = rte_le_to_cpu_32(
>>>>                   rxdp[j].wb.lower.hi_dword.rss);
>>>>           else if (pkt_flags & PKT_RX_FDIR) {
>>>>               mb->hash.fdir.hash = rte_le_to_cpu_16(
>>>>                   rxdp[j].wb.lower.hi_dword.csum_ip.csum) &
>>>>                   IXGBE_ATR_HASH_MASK;
>>>>               mb->hash.fdir.id = rte_le_to_cpu_16(
>>>>                   rxdp[j].wb.lower.hi_dword.csum_ip.ip_id);
>>>>           }
>>>> ********************************************
>>>>       So, what is application scenario for 'rxm->hash.rss' and
>>>> 'mb->hash.fdir', that is, why the two should be reported? How about
>>>> reporting the two at the same time?
>>>>       Thanks for  your reply.
>>>
>>>
>>> Hi Connor,
>>>
>>> mbuf->hash is union, so it is not possible to set both 'hash.rss' & 'hash.fdir'.
> 
> hash.rss is uint32_t and shares the memory with hash.dir.lo.
> hash.dir.hi is untouched by access to hash.rss.
> Hence, IIUC, we can provide both valid hash.rss and hash.fdir.hi at the same time.
> 
if reported at the same time, what do users(or APP)use them for ?
> At least mlx5 provides both (at least if CQE compression option allows it).
> RSS hash is provided in the hash.rss, and MARK RTE Flow action result is
> reported in hash.fdir.hi in independent way.
> 
>>>
>>> I assume for i40e & mlx5 case 'pkt_flags' indicate which one is valid
>>> and only one is set in practice. Cc'ed driver mainteriners for more comment.
>>
>> Thanks Ferruh,
>> 	another question, why does user need this information:  rxm->hash.rss
>> or mb->hash.fdir.hi ? what is the function?
> 
> IIRC, hash.rss is the lower bits if calculated hash function result over the packet.
> hash.fdir.hi is the result of MARK RTE Flow action (at least for mlx5).
> 
Thanks for your reply.
> With best regards,
> Slava
> 


More information about the dev mailing list