[RESEND,2/2] app/testpmd: support set RSS hash algorithm

Message ID 20231130104415.1064644-3-haijie1@huawei.com (mailing list archive)
State Superseded, archived
Delegated to: Ferruh Yigit
Headers
Series app/testpmd: support set RSS hash algorithm |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/loongarch-compilation success Compilation OK
ci/loongarch-unit-testing success Unit Testing PASS
ci/Intel-compilation success Compilation OK
ci/intel-Testing success Testing PASS
ci/github-robot: build fail github build: failed
ci/intel-Functional success Functional PASS
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-intel-Functional success Functional Testing PASS
ci/iol-mellanox-Performance success Performance Testing PASS
ci/iol-broadcom-Performance success Performance Testing PASS
ci/iol-broadcom-Functional success Functional Testing PASS
ci/iol-compile-amd64-testing fail Testing issues
ci/iol-unit-amd64-testing success Testing PASS
ci/iol-sample-apps-testing success Testing PASS
ci/iol-unit-arm64-testing success Testing PASS
ci/iol-compile-arm64-testing success Testing PASS

Commit Message

Jie Hai Nov. 30, 2023, 10:44 a.m. UTC
  Since API rte_eth_dev_rss_hash_update() supports setting RSS hash
algorithm, add new command to support it:

testpmd> port config 0 rss-hash-algo symmetric_toeplitz

Signed-off-by: Jie Hai <haijie1@huawei.com>
Reviewed-by: Huisong Li <lihuisong@huawei.com>
---
 app/test-pmd/cmdline.c                      | 79 +++++++++++++++++++++
 doc/guides/testpmd_app_ug/testpmd_funcs.rst | 11 +++
 2 files changed, 90 insertions(+)
  

Comments

Ferruh Yigit Nov. 30, 2023, 11:37 a.m. UTC | #1
On 11/30/2023 10:44 AM, Jie Hai wrote:
> Since API rte_eth_dev_rss_hash_update() supports setting RSS hash
> algorithm, add new command to support it:
> 
> testpmd> port config 0 rss-hash-algo symmetric_toeplitz
> 
> Signed-off-by: Jie Hai <haijie1@huawei.com>
> Reviewed-by: Huisong Li <lihuisong@huawei.com>
> ---
>  app/test-pmd/cmdline.c                      | 79 +++++++++++++++++++++
>  doc/guides/testpmd_app_ug/testpmd_funcs.rst | 11 +++
>  2 files changed, 90 insertions(+)
> 
> diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
> index 9369d3b4c526..2cd85c918a09 100644
> --- a/app/test-pmd/cmdline.c
> +++ b/app/test-pmd/cmdline.c
> @@ -726,6 +726,10 @@ static void cmd_help_long_parsed(void *parsed_result,
>  			"port config port-id rss reta (hash,queue)[,(hash,queue)]\n"
>  			"    Set the RSS redirection table.\n\n"
>  
> +			"port config port-id rss-hash-algo (default|simple_xor|toeplitz|"
>

Variables marked by putting them within (), so 'port-id' should be
(port_id).

<...>

> +static cmdline_parse_inst_t cmd_config_rss_hash_algo = {
> +	.f = cmd_config_rss_hash_algo_parsed,
> +	.data = NULL,
> +	.help_str = "port config <port_id> rss-hash-algo "
> +		"(default|simple_xor|toeplitz|symmetric_toeplitz|symmetric_toeplitz_sort)",
>

'simple_xor', 'toeplitz', etc.. are keywords, not name of variable, so
should not use (). Instead like:
"port config <port_id> rss-hash-algo default|simple_xor|..."
  
Ferruh Yigit Nov. 30, 2023, 11:38 a.m. UTC | #2
On 11/30/2023 10:44 AM, Jie Hai wrote:
> +static void
> +cmd_config_rss_hash_algo_parsed(void *parsed_result,
> +				__rte_unused struct cmdline *cl,
> +				__rte_unused void *data)
> +{
> +	struct cmd_config_rss_hash_algo *res = parsed_result;
> +	uint8_t rss_key[RSS_HASH_KEY_LENGTH];
> +	struct rte_eth_rss_conf rss_conf;
> +	int ret;
> +
> +	rss_conf.rss_key_len = RSS_HASH_KEY_LENGTH;
> +	rss_conf.rss_key = rss_key;
> +	ret = rte_eth_dev_rss_hash_conf_get(res->port_id, &rss_conf);
> +	if (ret != 0) {
> +		fprintf(stderr, "failed to get port %u RSS confinguration\n",
> 

s/confinguration/configuration/
  

Patch

diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index 9369d3b4c526..2cd85c918a09 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -726,6 +726,10 @@  static void cmd_help_long_parsed(void *parsed_result,
 			"port config port-id rss reta (hash,queue)[,(hash,queue)]\n"
 			"    Set the RSS redirection table.\n\n"
 
+			"port config port-id rss-hash-algo (default|simple_xor|toeplitz|"
+			"symmetric_toeplitz|symmetric_toeplitz_sort)\n"
+			"    Set the RSS hash algorithm.\n\n"
+
 			"port config (port_id) dcb vt (on|off) (traffic_class)"
 			" pfc (on|off)\n"
 			"    Set the DCB mode.\n\n"
@@ -2275,6 +2279,80 @@  static cmdline_parse_inst_t cmd_config_rss_hash_key = {
 	},
 };
 
+/* *** configure rss hash algorithm *** */
+struct cmd_config_rss_hash_algo {
+	cmdline_fixed_string_t port;
+	cmdline_fixed_string_t config;
+	portid_t port_id;
+	cmdline_fixed_string_t rss_hash_algo;
+	cmdline_fixed_string_t algo;
+};
+
+static void
+cmd_config_rss_hash_algo_parsed(void *parsed_result,
+				__rte_unused struct cmdline *cl,
+				__rte_unused void *data)
+{
+	struct cmd_config_rss_hash_algo *res = parsed_result;
+	uint8_t rss_key[RSS_HASH_KEY_LENGTH];
+	struct rte_eth_rss_conf rss_conf;
+	int ret;
+
+	rss_conf.rss_key_len = RSS_HASH_KEY_LENGTH;
+	rss_conf.rss_key = rss_key;
+	ret = rte_eth_dev_rss_hash_conf_get(res->port_id, &rss_conf);
+	if (ret != 0) {
+		fprintf(stderr, "failed to get port %u RSS confinguration\n",
+			res->port_id);
+		return;
+	}
+
+	ret = rte_eth_find_rss_algo(res->algo, &rss_conf.algorithm);
+	if (ret != 0) {
+		fprintf(stderr, "port %u configured invalid RSS hash algorithm: %s\n",
+			res->port_id, res->algo);
+		return;
+	}
+
+	ret = rte_eth_dev_rss_hash_update(res->port_id, &rss_conf);
+	if (ret != 0) {
+		fprintf(stderr, "failed to set port %u RSS hash algorithm\n",
+			res->port_id);
+		return;
+	}
+}
+
+static cmdline_parse_token_string_t cmd_config_rss_hash_algo_port =
+	TOKEN_STRING_INITIALIZER(struct cmd_config_rss_hash_algo, port, "port");
+static cmdline_parse_token_string_t cmd_config_rss_hash_algo_config =
+	TOKEN_STRING_INITIALIZER(struct cmd_config_rss_hash_algo, config,
+				 "config");
+static cmdline_parse_token_num_t cmd_config_rss_hash_algo_port_id =
+	TOKEN_NUM_INITIALIZER(struct cmd_config_rss_hash_algo, port_id,
+			      RTE_UINT16);
+static cmdline_parse_token_string_t cmd_config_rss_hash_algo_rss_hash_algo =
+	TOKEN_STRING_INITIALIZER(struct cmd_config_rss_hash_algo,
+				 rss_hash_algo, "rss-hash-algo");
+static cmdline_parse_token_string_t cmd_config_rss_hash_algo_algo =
+	TOKEN_STRING_INITIALIZER(struct cmd_config_rss_hash_algo, algo,
+				 "default#simple_xor#toeplitz#"
+				 "symmetric_toeplitz#symmetric_toeplitz_sort");
+
+static cmdline_parse_inst_t cmd_config_rss_hash_algo = {
+	.f = cmd_config_rss_hash_algo_parsed,
+	.data = NULL,
+	.help_str = "port config <port_id> rss-hash-algo "
+		"(default|simple_xor|toeplitz|symmetric_toeplitz|symmetric_toeplitz_sort)",
+	.tokens = {
+		(void *)&cmd_config_rss_hash_algo_port,
+		(void *)&cmd_config_rss_hash_algo_config,
+		(void *)&cmd_config_rss_hash_algo_port_id,
+		(void *)&cmd_config_rss_hash_algo_rss_hash_algo,
+		(void *)&cmd_config_rss_hash_algo_algo,
+		NULL,
+	},
+};
+
 /* *** cleanup txq mbufs *** */
 struct cmd_cleanup_txq_mbufs_result {
 	cmdline_fixed_string_t port;
@@ -13165,6 +13243,7 @@  static cmdline_parse_ctx_t builtin_ctx[] = {
 	(cmdline_parse_inst_t *)&cmd_showport_rss_hash_key,
 	(cmdline_parse_inst_t *)&cmd_showport_rss_hash_algo,
 	(cmdline_parse_inst_t *)&cmd_config_rss_hash_key,
+	(cmdline_parse_inst_t *)&cmd_config_rss_hash_algo,
 	(cmdline_parse_inst_t *)&cmd_cleanup_txq_mbufs,
 	(cmdline_parse_inst_t *)&cmd_dump,
 	(cmdline_parse_inst_t *)&cmd_dump_one,
diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
index 447e28e6944f..3c7d20c2db82 100644
--- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst
+++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
@@ -2263,6 +2263,17 @@  hash of input [IP] packets received on port::
                      ipv6-udp-ex <string of hex digits \
                      (variable length, NIC dependent)>)
 
+
+port config rss hash algorithm
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+To configure the RSS hash algorithm used to compute the RSS
+hash of input packets received on port::
+
+   testpmd> port config <port_id> rss-hash-algo (default|\
+                     simple_xor|toeplitz|symmetric_toeplitz|\
+                     symmetric_toeplitz_sort)
+
 port cleanup txq mbufs
 ~~~~~~~~~~~~~~~~~~~~~~