app/testpmd: fix the default RSS key configuration

Message ID 1594302456-48256-1-git-send-email-oulijun@huawei.com (mailing list archive)
State Changes Requested, archived
Delegated to: Ferruh Yigit
Headers
Series app/testpmd: fix the default RSS key configuration |

Checks

Context Check Description
ci/checkpatch warning coding style issues
ci/iol-broadcom-Performance success Performance Testing PASS
ci/travis-robot success Travis build: passed
ci/iol-testing success Testing PASS
ci/Intel-compilation success Compilation OK
ci/iol-intel-Performance success Performance Testing PASS

Commit Message

Lijun Ou July 9, 2020, 1:47 p.m. UTC
  When an user runs a flow create cmd to configure an RSS rule
without specifying the empty rss actions in testpmd, this mean
that the flow gets the default RSS functions. However, the
testpmd is not set the default RSS key incorrectly when RSS key
is specified in flow create cmd.

Now, it uses rte_eth_dev_rss_hash_conf_get to correctly the
default rss key.

Fixes: ac8d22de2394 ("ethdev: flatten RSS configuration in flow API")
Cc: stable@dpdk.org

Signed-off-by: Lijun Ou <oulijun@huawei.com>
---
 app/test-pmd/cmdline_flow.c | 8 ++++++++
 1 file changed, 8 insertions(+)
  

Comments

Phil Yang July 15, 2020, 7:14 a.m. UTC | #1
> -----Original Message-----
> From: dev <dev-bounces@dpdk.org> On Behalf Of Lijun Ou
> Sent: Thursday, July 9, 2020 9:48 PM
> To: wenzhuo.lu@intel.com; beilei.xing@intel.com;
> bernard.iremonger@intel.com; adrien.mazarguil@6wind.com;
> ferruh.yigit@intel.com
> Cc: dev@dpdk.org; linuxarm@huawei.com
> Subject: [dpdk-dev] [PATCH] app/testpmd: fix the default RSS key
> configuration
> 
> When an user runs a flow create cmd to configure an RSS rule
> without specifying the empty rss actions in testpmd, this mean
> that the flow gets the default RSS functions. However, the
> testpmd is not set the default RSS key incorrectly when RSS key
> is specified in flow create cmd.

Hi Lijun,

I think it works. 
When we create an RSS flow rule which doesn't specify any 'rss-hash-key', the 'rss-hash-key' will be updated with the default key.

Step 1:
testpmd> show port 0 rss-hash key
RSS functions:
 all ipv4-frag ipv4-other ipv6-frag ipv6-other ip
RSS key:
4439796BB54C5023B675EA5B124F9F30B8A2C03DDFDC4D02A08C9B334AF64A4C05C6FA343958D8557D99583AE138C92E81150366

Step 2: 
testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp end queues end / end
Flow rule #0 created

Step 3:
testpmd> show port 0 rss-hash key
RSS functions:
 all ipv4-udp udp
RSS key:
74657374706D6427732064656661756C74205253532068617368206B65792C206F7665727269646520697420666F722062657474


Thanks,
Phil
> 
> Now, it uses rte_eth_dev_rss_hash_conf_get to correctly the
> default rss key.
> 
> Fixes: ac8d22de2394 ("ethdev: flatten RSS configuration in flow API")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Lijun Ou <oulijun@huawei.com>
> ---
>  app/test-pmd/cmdline_flow.c | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c
> index 4e2006c..7eddde4 100644
> --- a/app/test-pmd/cmdline_flow.c
> +++ b/app/test-pmd/cmdline_flow.c
> @@ -4168,6 +4168,7 @@ parse_vc_action_rss(struct context *ctx, const
> struct token *token,
>  		action_rss_data->queue[i] = i;
>  	if (!port_id_is_invalid(ctx->port, DISABLED_WARN) &&
>  	    ctx->port != (portid_t)RTE_PORT_ALL) {
> +		struct rte_eth_rss_conf rss_conf = {0};
>  		struct rte_eth_dev_info info;
>  		int ret2;
> 
> @@ -4178,6 +4179,13 @@ parse_vc_action_rss(struct context *ctx, const
> struct token *token,
>  		action_rss_data->conf.key_len =
>  			RTE_MIN(sizeof(action_rss_data->key),
>  				info.hash_key_size);
> +
> +		rss_conf.rss_key_len = sizeof(action_rss_data->key);
> +		rss_conf.rss_key = action_rss_data->key;
> +		ret2 = rte_eth_dev_rss_hash_conf_get(ctx->port,
> &rss_conf);
> +		if (ret2 != 0)
> +			return ret2;
> +		action_rss_data->conf.key = rss_conf.rss_key;
>  	}
>  	action->conf = &action_rss_data->conf;
>  	return ret;
> --
> 2.7.4
  
Lijun Ou July 15, 2020, 11:40 a.m. UTC | #2
在 2020/7/15 15:14, Phil Yang 写道:
>> -----Original Message-----
>> From: dev <dev-bounces@dpdk.org> On Behalf Of Lijun Ou
>> Sent: Thursday, July 9, 2020 9:48 PM
>> To: wenzhuo.lu@intel.com; beilei.xing@intel.com;
>> bernard.iremonger@intel.com; adrien.mazarguil@6wind.com;
>> ferruh.yigit@intel.com
>> Cc: dev@dpdk.org; linuxarm@huawei.com
>> Subject: [dpdk-dev] [PATCH] app/testpmd: fix the default RSS key
>> configuration
>>
>> When an user runs a flow create cmd to configure an RSS rule
>> without specifying the empty rss actions in testpmd, this mean
>> that the flow gets the default RSS functions. However, the
>> testpmd is not set the default RSS key incorrectly when RSS key
>> is specified in flow create cmd.
> 
> Hi Lijun,
> 
> I think it works.
> When we create an RSS flow rule which doesn't specify any 'rss-hash-key', the 'rss-hash-key' will be updated with the default key.
> 
> Step 1:
> testpmd> show port 0 rss-hash key
> RSS functions:
>   all ipv4-frag ipv4-other ipv6-frag ipv6-other ip
> RSS key:
> 4439796BB54C5023B675EA5B124F9F30B8A2C03DDFDC4D02A08C9B334AF64A4C05C6FA343958D8557D99583AE138C92E81150366
> 
> Step 2:
> testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp end queues end / end
> Flow rule #0 created
> 
> Step 3:
> testpmd> show port 0 rss-hash key
> RSS functions:
>   all ipv4-udp udp
> RSS key:
> 74657374706D6427732064656661756C74205253532068617368206B65792C206F7665727269646520697420666F722062657474
> 
> 
> Thanks,
> Phil
>>
Yes, However, it is not the default value that users use when testpmd 
starts. This may mislead users. When the driver is initialized, the 
default key used by the driver is provided for users. The key varies 
according to the DPDK vendor.However, after the DPDK is initialized, if 
the user runs the flow create command without specifying the rss key, 
the driver obtains another default key value, which may be different 
from the default value expected by the user.

Thanks
Lijun Ou
>> Now, it uses rte_eth_dev_rss_hash_conf_get to correctly the
>> default rss key.
>>
>> Fixes: ac8d22de2394 ("ethdev: flatten RSS configuration in flow API")
>> Cc: stable@dpdk.org
>>
>> Signed-off-by: Lijun Ou <oulijun@huawei.com>
>> ---
>>   app/test-pmd/cmdline_flow.c | 8 ++++++++
>>   1 file changed, 8 insertions(+)
>>
>> diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c
>> index 4e2006c..7eddde4 100644
>> --- a/app/test-pmd/cmdline_flow.c
>> +++ b/app/test-pmd/cmdline_flow.c
>> @@ -4168,6 +4168,7 @@ parse_vc_action_rss(struct context *ctx, const
>> struct token *token,
>>   		action_rss_data->queue[i] = i;
>>   	if (!port_id_is_invalid(ctx->port, DISABLED_WARN) &&
>>   	    ctx->port != (portid_t)RTE_PORT_ALL) {
>> +		struct rte_eth_rss_conf rss_conf = {0};
>>   		struct rte_eth_dev_info info;
>>   		int ret2;
>>
>> @@ -4178,6 +4179,13 @@ parse_vc_action_rss(struct context *ctx, const
>> struct token *token,
>>   		action_rss_data->conf.key_len =
>>   			RTE_MIN(sizeof(action_rss_data->key),
>>   				info.hash_key_size);
>> +
>> +		rss_conf.rss_key_len = sizeof(action_rss_data->key);
>> +		rss_conf.rss_key = action_rss_data->key;
>> +		ret2 = rte_eth_dev_rss_hash_conf_get(ctx->port,
>> &rss_conf);
>> +		if (ret2 != 0)
>> +			return ret2;
>> +		action_rss_data->conf.key = rss_conf.rss_key;
>>   	}
>>   	action->conf = &action_rss_data->conf;
>>   	return ret;
>> --
>> 2.7.4
> 
> 
> .
>
  
Phil Yang July 17, 2020, 7:29 a.m. UTC | #3
<snip>

> >> Subject: [dpdk-dev] [PATCH] app/testpmd: fix the default RSS key
> >> configuration
> >>
> >> When an user runs a flow create cmd to configure an RSS rule
> >> without specifying the empty rss actions in testpmd, this mean
> >> that the flow gets the default RSS functions. However, the
> >> testpmd is not set the default RSS key incorrectly when RSS key
> >> is specified in flow create cmd.
> >
> > Hi Lijun,
> >
> > I think it works.
> > When we create an RSS flow rule which doesn't specify any 'rss-hash-key',
> the 'rss-hash-key' will be updated with the default key.
> >
> > Step 1:
> > testpmd> show port 0 rss-hash key
> > RSS functions:
> >   all ipv4-frag ipv4-other ipv6-frag ipv6-other ip
> > RSS key:
> >
> 4439796BB54C5023B675EA5B124F9F30B8A2C03DDFDC4D02A08C9B334AF64A4
> C05C6FA343958D8557D99583AE138C92E81150366
> >
> > Step 2:
> > testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end actions rss
> types ipv4-udp end queues end / end
> > Flow rule #0 created
> >
> > Step 3:
> > testpmd> show port 0 rss-hash key
> > RSS functions:
> >   all ipv4-udp udp
> > RSS key:
> >
> 74657374706D6427732064656661756C74205253532068617368206B65792C206F
> 7665727269646520697420666F722062657474
> >
> >
> > Thanks,
> > Phil
> >>
> Yes, However, it is not the default value that users use when testpmd
> starts. This may mislead users. When the driver is initialized, the
> default key used by the driver is provided for users. The key varies
> according to the DPDK vendor.However, after the DPDK is initialized, if
> the user runs the flow create command without specifying the rss key,
> the driver obtains another default key value, which may be different
> from the default value expected by the user.

It needs a dummy key.
a4391f8bae85 - app/testpmd: set default RSS key as null
  
Lijun Ou Aug. 4, 2020, 1:28 a.m. UTC | #4
在 2020/7/17 15:29, Phil Yang 写道:
> <snip>
>
>>>> Subject: [dpdk-dev] [PATCH] app/testpmd: fix the default RSS key
>>>> configuration
>>>>
>>>> When an user runs a flow create cmd to configure an RSS rule
>>>> without specifying the empty rss actions in testpmd, this mean
>>>> that the flow gets the default RSS functions. However, the
>>>> testpmd is not set the default RSS key incorrectly when RSS key
>>>> is specified in flow create cmd.
>>> Hi Lijun,
>>>
>>> I think it works.
>>> When we create an RSS flow rule which doesn't specify any 'rss-hash-key',
>> the 'rss-hash-key' will be updated with the default key.
>>> Step 1:
>>> testpmd> show port 0 rss-hash key
>>> RSS functions:
>>>    all ipv4-frag ipv4-other ipv6-frag ipv6-other ip
>>> RSS key:
>>>
>> 4439796BB54C5023B675EA5B124F9F30B8A2C03DDFDC4D02A08C9B334AF64A4
>> C05C6FA343958D8557D99583AE138C92E81150366
>>> Step 2:
>>> testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end actions rss
>> types ipv4-udp end queues end / end
>>> Flow rule #0 created
>>>
>>> Step 3:
>>> testpmd> show port 0 rss-hash key
>>> RSS functions:
>>>    all ipv4-udp udp
>>> RSS key:
>>>
>> 74657374706D6427732064656661756C74205253532068617368206B65792C206F
>> 7665727269646520697420666F722062657474
>>>
>>> Thanks,
>>> Phil
>> Yes, However, it is not the default value that users use when testpmd
>> starts. This may mislead users. When the driver is initialized, the
>> default key used by the driver is provided for users. The key varies
>> according to the DPDK vendor.However, after the DPDK is initialized, if
>> the user runs the flow create command without specifying the rss key,
>> the driver obtains another default key value, which may be different
>> from the default value expected by the user.
> It needs a dummy key.
> a4391f8bae85 - app/testpmd: set default RSS key as null
Hi, Phil Yang
    Yes, I've reviewed the patch("a4391f8bae85 - app/testpmd: set 
default RSS key as null") and read all other people's comments.
However, the patch has been reverted in V2 and restored to the orginal 
states.  The link as follows:
https://patches.dpdk.org/patch/47961/
I also don't think the key_len parameter is very profitable
for users to configure.  Others say that other optimizations will be 
considered later. Do you have any plans?

Best regards, Liju Ou
>
>
> .
>
  
Phil Yang Aug. 4, 2020, 9:36 a.m. UTC | #5
> -----Original Message-----
> From: oulijun <oulijun@huawei.com>
> Sent: Tuesday, August 4, 2020 9:29 AM
> To: Phil Yang <Phil.Yang@arm.com>; wenzhuo.lu@intel.com;
> beilei.xing@intel.com; bernard.iremonger@intel.com;
> adrien.mazarguil@6wind.com; ferruh.yigit@intel.com
> Cc: dev@dpdk.org; linuxarm@huawei.com; nd <nd@arm.com>
> Subject: Re: [dpdk-dev] [PATCH] app/testpmd: fix the default RSS key
> configuration
> 
> 
> 
> 在 2020/7/17 15:29, Phil Yang 写道:
> > <snip>
> >
> >>>> Subject: [dpdk-dev] [PATCH] app/testpmd: fix the default RSS key
> >>>> configuration
> >>>>
> >>>> When an user runs a flow create cmd to configure an RSS rule
> >>>> without specifying the empty rss actions in testpmd, this mean
> >>>> that the flow gets the default RSS functions. However, the
> >>>> testpmd is not set the default RSS key incorrectly when RSS key
> >>>> is specified in flow create cmd.
> >>> Hi Lijun,
> >>>
> >>> I think it works.
> >>> When we create an RSS flow rule which doesn't specify any 'rss-hash-
> key',
> >> the 'rss-hash-key' will be updated with the default key.
> >>> Step 1:
> >>> testpmd> show port 0 rss-hash key
> >>> RSS functions:
> >>>    all ipv4-frag ipv4-other ipv6-frag ipv6-other ip
> >>> RSS key:
> >>>
> >>
> 4439796BB54C5023B675EA5B124F9F30B8A2C03DDFDC4D02A08C9B334AF64A4
> >> C05C6FA343958D8557D99583AE138C92E81150366
> >>> Step 2:
> >>> testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end actions rss
> >> types ipv4-udp end queues end / end
> >>> Flow rule #0 created
> >>>
> >>> Step 3:
> >>> testpmd> show port 0 rss-hash key
> >>> RSS functions:
> >>>    all ipv4-udp udp
> >>> RSS key:
> >>>
> >>
> 74657374706D6427732064656661756C74205253532068617368206B65792C206F
> >> 7665727269646520697420666F722062657474
> >>>
> >>> Thanks,
> >>> Phil
> >> Yes, However, it is not the default value that users use when testpmd
> >> starts. This may mislead users. When the driver is initialized, the
> >> default key used by the driver is provided for users. The key varies
> >> according to the DPDK vendor.However, after the DPDK is initialized, if
> >> the user runs the flow create command without specifying the rss key,
> >> the driver obtains another default key value, which may be different
> >> from the default value expected by the user.
> > It needs a dummy key.
> > a4391f8bae85 - app/testpmd: set default RSS key as null
> Hi, Phil Yang
>     Yes, I've reviewed the patch("a4391f8bae85 - app/testpmd: set
> default RSS key as null") and read all other people's comments.
> However, the patch has been reverted in V2 and restored to the orginal
> states.  The link as follows:
> https://patches.dpdk.org/patch/47961/

I got your point now.
Your patch makes testpmd using the valid NIC default RSS hash key as the flow rule default RSS, is that right?

The patch looks good to me. Please fix the typo in your commit message and make it more accurate.
For example, you can put the cmd line and the expected output in the commit message. 

> I also don't think the key_len parameter is very profitable
> for users to configure.  Others say that other optimizations will be
> considered later. Do you have any plans?

I have no plans for it now.

Thanks,
Phil
  
Lijun Ou Aug. 18, 2020, 3:54 a.m. UTC | #6
在 2020/8/4 17:36, Phil Yang 写道:
>> -----Original Message-----
>> From: oulijun <oulijun@huawei.com>
>> Sent: Tuesday, August 4, 2020 9:29 AM
>> To: Phil Yang <Phil.Yang@arm.com>; wenzhuo.lu@intel.com;
>> beilei.xing@intel.com; bernard.iremonger@intel.com;
>> adrien.mazarguil@6wind.com; ferruh.yigit@intel.com
>> Cc: dev@dpdk.org; linuxarm@huawei.com; nd <nd@arm.com>
>> Subject: Re: [dpdk-dev] [PATCH] app/testpmd: fix the default RSS key
>> configuration
>>
>>
>>
>> 在 2020/7/17 15:29, Phil Yang 写道:
>>> <snip>
>>>
>>>>>> Subject: [dpdk-dev] [PATCH] app/testpmd: fix the default RSS key
>>>>>> configuration
>>>>>>
>>>>>> When an user runs a flow create cmd to configure an RSS rule
>>>>>> without specifying the empty rss actions in testpmd, this mean
>>>>>> that the flow gets the default RSS functions. However, the
>>>>>> testpmd is not set the default RSS key incorrectly when RSS key
>>>>>> is specified in flow create cmd.
>>>>> Hi Lijun,
>>>>>
>>>>> I think it works.
>>>>> When we create an RSS flow rule which doesn't specify any 'rss-hash-
>> key',
>>>> the 'rss-hash-key' will be updated with the default key.
>>>>> Step 1:
>>>>> testpmd> show port 0 rss-hash key
>>>>> RSS functions:
>>>>>     all ipv4-frag ipv4-other ipv6-frag ipv6-other ip
>>>>> RSS key:
>>>>>
>>>>
>> 4439796BB54C5023B675EA5B124F9F30B8A2C03DDFDC4D02A08C9B334AF64A4
>>>> C05C6FA343958D8557D99583AE138C92E81150366
>>>>> Step 2:
>>>>> testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end actions rss
>>>> types ipv4-udp end queues end / end
>>>>> Flow rule #0 created
>>>>>
>>>>> Step 3:
>>>>> testpmd> show port 0 rss-hash key
>>>>> RSS functions:
>>>>>     all ipv4-udp udp
>>>>> RSS key:
>>>>>
>>>>
>> 74657374706D6427732064656661756C74205253532068617368206B65792C206F
>>>> 7665727269646520697420666F722062657474
>>>>>
>>>>> Thanks,
>>>>> Phil
>>>> Yes, However, it is not the default value that users use when testpmd
>>>> starts. This may mislead users. When the driver is initialized, the
>>>> default key used by the driver is provided for users. The key varies
>>>> according to the DPDK vendor.However, after the DPDK is initialized, if
>>>> the user runs the flow create command without specifying the rss key,
>>>> the driver obtains another default key value, which may be different
>>>> from the default value expected by the user.
>>> It needs a dummy key.
>>> a4391f8bae85 - app/testpmd: set default RSS key as null
>> Hi, Phil Yang
>>      Yes, I've reviewed the patch("a4391f8bae85 - app/testpmd: set
>> default RSS key as null") and read all other people's comments.
>> However, the patch has been reverted in V2 and restored to the orginal
>> states.  The link as follows:
>> https://patches.dpdk.org/patch/47961/
> 
> I got your point now.
> Your patch makes testpmd using the valid NIC default RSS hash key as the flow rule default RSS, is that right?
> 
Yes. Recently, I've been further testing the patch. I found the other 
question. When I create a flow with RSS by used the following cmd.
testpmd>flow create 0 ingress pattern end actions rss types ipv4-tcp end 
/ end

next, I run flow flush 0 and re-create a flow with RSS
testpmd> flow flush 0
testpmd> flow create 0 ingress pattern end actions rss types ipv4-tcp end

As a result, the key is 0 by show port rss-hash key because it needs to 
memset 0 for rss_info when flush

Thanks

Lijun Ou
> The patch looks good to me. Please fix the typo in your commit message and make it more accurate.
> For example, you can put the cmd line and the expected output in the commit message.
> 
>> I also don't think the key_len parameter is very profitable
>> for users to configure.  Others say that other optimizations will be
>> considered later. Do you have any plans?
> 
> I have no plans for it now.
> 
> Thanks,
> Phil
>
  

Patch

diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c
index 4e2006c..7eddde4 100644
--- a/app/test-pmd/cmdline_flow.c
+++ b/app/test-pmd/cmdline_flow.c
@@ -4168,6 +4168,7 @@  parse_vc_action_rss(struct context *ctx, const struct token *token,
 		action_rss_data->queue[i] = i;
 	if (!port_id_is_invalid(ctx->port, DISABLED_WARN) &&
 	    ctx->port != (portid_t)RTE_PORT_ALL) {
+		struct rte_eth_rss_conf rss_conf = {0};
 		struct rte_eth_dev_info info;
 		int ret2;
 
@@ -4178,6 +4179,13 @@  parse_vc_action_rss(struct context *ctx, const struct token *token,
 		action_rss_data->conf.key_len =
 			RTE_MIN(sizeof(action_rss_data->key),
 				info.hash_key_size);
+
+		rss_conf.rss_key_len = sizeof(action_rss_data->key);
+		rss_conf.rss_key = action_rss_data->key;
+		ret2 = rte_eth_dev_rss_hash_conf_get(ctx->port, &rss_conf);
+		if (ret2 != 0)
+			return ret2;
+		action_rss_data->conf.key = rss_conf.rss_key;
 	}
 	action->conf = &action_rss_data->conf;
 	return ret;