From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <dev-bounces@dpdk.org>
Received: from dpdk.org (dpdk.org [92.243.14.124])
	by inbox.dpdk.org (Postfix) with ESMTP id 6D2D6A04DB;
	Fri, 16 Oct 2020 01:53:53 +0200 (CEST)
Received: from [92.243.14.124] (localhost [127.0.0.1])
	by dpdk.org (Postfix) with ESMTP id DCE0A1DCFE;
	Fri, 16 Oct 2020 01:53:51 +0200 (CEST)
Received: from mga17.intel.com (mga17.intel.com [192.55.52.151])
 by dpdk.org (Postfix) with ESMTP id 9DEF01DCB0
 for <dev@dpdk.org>; Fri, 16 Oct 2020 01:53:48 +0200 (CEST)
IronPort-SDR: wOKKiWePVtSDD7BTT/HTkHVLMpdIn+5tK8UtEHt5OT3uqXu9D+V3AM0rUCO2z6sTUF5Sz8LsTv
 d3PePPhwjCiA==
X-IronPort-AV: E=McAfee;i="6000,8403,9775"; a="146342318"
X-IronPort-AV: E=Sophos;i="5.77,380,1596524400"; d="scan'208";a="146342318"
X-Amp-Result: SKIPPED(no attachment in message)
X-Amp-File-Uploaded: False
Received: from orsmga004.jf.intel.com ([10.7.209.38])
 by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;
 15 Oct 2020 16:53:42 -0700
IronPort-SDR: ftfbEZ/P1WJiRnbDmT84oSUcfWPf62vAF27HSmyIiXcXfpzM0FT4i96lOItmRcIYVMu33I3krQ
 z5/YyLuYcIQg==
X-IronPort-AV: E=Sophos;i="5.77,380,1596524400"; d="scan'208";a="464485614"
Received: from fyigit-mobl1.ger.corp.intel.com (HELO [10.251.84.112])
 ([10.251.84.112])
 by orsmga004-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;
 15 Oct 2020 16:53:39 -0700
To: Ophir Munk <ophirmu@nvidia.com>, oulijun <oulijun@huawei.com>,
 "wenzhuo.lu@intel.com" <wenzhuo.lu@intel.com>,
 "beilei.xing@intel.com" <beilei.xing@intel.com>,
 NBU-Contact-Adrien Mazarguil <adrien.mazarguil@6wind.com>
Cc: "dev@dpdk.org" <dev@dpdk.org>, "linuxarm@huawei.com"
 <linuxarm@huawei.com>, Ori Kam <orika@nvidia.com>
References: <1600955105-53176-2-git-send-email-oulijun@huawei.com>
 <1602765662-43299-1-git-send-email-oulijun@huawei.com>
 <1b2b0e11-1458-e2d9-5fde-91db35b8bc73@intel.com>
 <51676746-ec95-aff2-dc00-b76480ab6cba@huawei.com>
 <8c543941-e881-aa88-b52a-a70bfe8f6fcf@intel.com>
 <fd6072d5-5be6-5d75-7933-02ea93ba2318@intel.com>
 <DM5PR12MB1161722137AF490D90C8B37FDC020@DM5PR12MB1161.namprd12.prod.outlook.com>
From: Ferruh Yigit <ferruh.yigit@intel.com>
Message-ID: <e6b854f2-31da-3372-fa2c-8dfa485a7311@intel.com>
Date: Fri, 16 Oct 2020 00:53:35 +0100
MIME-Version: 1.0
In-Reply-To: <DM5PR12MB1161722137AF490D90C8B37FDC020@DM5PR12MB1161.namprd12.prod.outlook.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-US
Content-Transfer-Encoding: 8bit
Subject: Re: [dpdk-dev] [PATCH v5] app/testpmd: fix the default RSS key
 configuration
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://mails.dpdk.org/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <https://mails.dpdk.org/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
Errors-To: dev-bounces@dpdk.org
Sender: "dev" <dev-bounces@dpdk.org>

On 10/16/2020 12:21 AM, Ophir Munk wrote:
>> From: Ferruh Yigit <ferruh.yigit@intel.com>
>>>>> On 10/15/2020 1:41 PM, Lijun Ou wrote:
>>>>>> When start the testpmd, the pmd driver initializes the RSS
>>>>>> configuration. Generally, the recommended RSS hash key is used as
>>>>>> the default key in the driver. In addition, the default key is
>>>>>> different from the default RSS flow in testpmd without specifying
>>>>>> RSS hash key. So. if you do not specify the RSS key when creating
>>>>>> an RSS rule, the testpmd uses the default key as the default RSS
>>>>>> key of the RSS rule. As a result, you may mistakenly consider that
>>>>>> the RSS key in use is the valid default key of the NIC, actually,
>>>>>> the key and the valid default key of the NIC are two values.
>>>>>>
>>>>>> Consider the follow usage with testpmd:
>>>>>> 1. first, startup testpmd:
>>>>>> testpmd> show port 0 rss-hash key
>>>>>> RSS functions:
>>>>>>     all ipv4-frag ipv4-other ipv6-frag ipv6-other ip RSS key:
>>>>>> -
>> 6D5A56DA255B0EC24167253D43A38FB0D0CA2BCBAE7B30B477CB2DA3803
>> 0F
>>>>>> -20C6A42B73BBEAC01FA
>>>>>> 2. create a rss rule
>>>>>> testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end
>>>>>> testpmd> actions rss \
>>>>>> types ipv4-udp end queues end / end
>>>>>>
>>>>>> 3. show rss-hash key
>>>>>> testpmd> show port 0 rss-hash key
>>>>>> RSS functions:
>>>>>>     all ipv4-udp udp
>>>>>> RSS key:
>>>>>> -
>> 74657374706D6427732064656661756C74205253532068617368206B65792C
>> 206F
>>>>>> -76657272696465
>>>>>>
>>>>>> In order to solve the above problems, it use the NIC valid default
>>>>>> RSS key instead of the testpmd dummy RSS key in the flow
>>>>>> configuration when the RSS key is not specified in the flow rule.
>>>>>> If the NIC RSS key is invalid, it will use testpmd dummy RSS key as the
>> default key.
>>>>>>
>>>>>> Fixes: ac8d22de2394 ("ethdev: flatten RSS configuration in flow
>>>>>> API")
>>>>>> Cc: stable@dpdk.org
>>>>>>
>>>>>> Signed-off-by: Lijun Ou <oulijun@huawei.com>
>>>>>> Reviewed-by: Phil Yang <phil.yang@arm.com>
>>>>>> ---
>>>>>> V4->V5:
>>>>>> -rewrite the commit log
>>>>>> -add reviewed-by
>>>>>
>>>>> Hi Lijun,
>>>>>
>>>>> There were multiple other comments, it seems they are not addressed
>>>>> but only updated the commit log, can you please check comments to
>> prev versions.
>>>>>
>>>>> Before going into the details, my question was what happens if
>>>>> default key not provided at all?
>>>>> It seems this has been already tried by Ophir [1], later reverted
>>>>> back [2] bringing the initial issue back.
>>>>>
>>>>> According commit, the reason of revert is to support following
>> command:
>>>>> "flow create 0 <pattern> actions rss queues 0 1 end key_len 40 / end"
>>>>>
>>>>> @Ophir, @Lijun,
>>>>> Can we ignore the 'key_len' if the 'key' is not supported and solve
>>>>> current issue as initially intended ([1])?
>>>>>
>>>> Hi, Ferruh
>>>>     I have discussed with Phil Yang about the problem in [1]. I think
>>>> there may be other problems with the idea and there is no better
>>>> solution. and we need to remove key_len definition from rte_rss_conf
>>>> structure. They don't have a plan. And [1] was eventually reverted.
>>>>
>>>
>>> Why ignoring 'key_len' (set it to zero) when there is no 'key'
>>> provided doesn't work?
>>>
>>
>> What do you think [1] + following update, will it work?
>>
>>    diff --git a/lib/librte_ethdev/rte_flow.c b/lib/librte_ethdev/rte_flow.c
>>    index ee4f3464fe..e7789c87b3 100644
>>    --- a/lib/librte_ethdev/rte_flow.c
>>    +++ b/lib/librte_ethdev/rte_flow.c
>>    @@ -535,7 +535,7 @@ rte_flow_conv_action_conf(void *buf, const size_t
>> size,
>>                               }),
>>                               size > sizeof(*dst.rss) ? sizeof(*dst.rss) : size);
>>                    off = sizeof(*dst.rss);
>>    -               if (src.rss->key_len) {
>>    +               if (src.rss->key_len && src.rss->key) {
>>                            off = RTE_ALIGN_CEIL(off, sizeof(*dst.rss->key));
>>                            tmp = sizeof(*src.rss->key) * src.rss->key_len;
>>                            if (size >= off + tmp)
>>
> 
> Ferruh, your suggestion ([1] + update) looks correct. I also verified it on mlx5 PMD.
> Advantage: it's a generic fix for all dpdk applications using rte_flows (not just testpmd).
> It reduces code.
> With this fix the responsibility of handling key==NULL and/or len==0 is moved to the PMDs (which is good).
>   
> With regard to Lijun patch - I liked the approach of overriding the default testpmd key with the default PMD key.
> But it only addresses testpmd. More code was added.
> It seems OK to call rte_eth_dev_rss_hash_conf_get() as part of parsing RSS, but it would feel more confident if we could confirm it for all the PMDs (by testing) or at least review the PMDs rss_hash_conf_get() implementations.
> 

Lijun's idea can work. There was a problem in implementation related to the key 
size assumption, which can be fixed.

Even it is fixed, when user gives a rss rule without a key, we are getting key 
from device and feeding same key back to device, this is unnecessary I think.
When user didn't provide a key, rss rule shouldn't touch the key at all.

Complication was when user provides key_len without a key, I think both ignoring 
or returning error in this case is OK.