[v7,9/9] app/testpmd: add RSS hash algorithms display
Checks
Commit Message
Add the command "show port X rss-hash algorithm" to display
the RSS hash algorithms of port X. An example is shown:
testpmd> show port 0 rss-hash algorithm
RSS algorithms:
toeplitz
Signed-off-by: Jie Hai <haijie1@huawei.com>
---
app/test-pmd/cmdline.c | 29 ++++++++++++++++++++++++-----
app/test-pmd/config.c | 29 ++++++++++-------------------
app/test-pmd/testpmd.h | 2 +-
3 files changed, 35 insertions(+), 25 deletions(-)
Comments
在 2023/10/28 9:46, Jie Hai 写道:
> Add the command "show port X rss-hash algorithm" to display
> the RSS hash algorithms of port X. An example is shown:
>
> testpmd> show port 0 rss-hash algorithm
> RSS algorithms:
> toeplitz
>
> Signed-off-by: Jie Hai <haijie1@huawei.com>
> ---
> app/test-pmd/cmdline.c | 29 ++++++++++++++++++++++++-----
> app/test-pmd/config.c | 29 ++++++++++-------------------
> app/test-pmd/testpmd.h | 2 +-
> 3 files changed, 35 insertions(+), 25 deletions(-)
>
> diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
> index 679ca47b9401..d0eafd7f1254 100644
> --- a/app/test-pmd/cmdline.c
> +++ b/app/test-pmd/cmdline.c
> @@ -174,8 +174,8 @@ static void cmd_help_long_parsed(void *parsed_result,
> " by masks on port X. size is used to indicate the"
> " hardware supported reta size\n\n"
>
> - "show port (port_id) rss-hash [key]\n"
> - " Display the RSS hash functions and RSS hash key of port\n\n"
> + "show port (port_id) rss-hash [key | algorithm]\n"
> + " Display the RSS hash functions, RSS hash key and RSS hash algorithms of port\n\n"
>
> "clear port (info|stats|xstats|fdir) (port_id|all)\n"
> " Clear information for port_id, or all.\n\n"
> @@ -3026,15 +3026,17 @@ struct cmd_showport_rss_hash {
> cmdline_fixed_string_t rss_hash;
> cmdline_fixed_string_t rss_type;
> cmdline_fixed_string_t key; /* optional argument */
> + cmdline_fixed_string_t algorithm; /* optional argument */
> };
>
> static void cmd_showport_rss_hash_parsed(void *parsed_result,
> __rte_unused struct cmdline *cl,
> - void *show_rss_key)
> + __rte_unused void *data)
> {
> struct cmd_showport_rss_hash *res = parsed_result;
>
> - port_rss_hash_conf_show(res->port_id, show_rss_key != NULL);
> + port_rss_hash_conf_show(res->port_id,
> + !strcmp(res->key, "key"), !strcmp(res->algorithm, "algorithm"));
> }
>
> static cmdline_parse_token_string_t cmd_showport_rss_hash_show =
> @@ -3049,6 +3051,8 @@ static cmdline_parse_token_string_t cmd_showport_rss_hash_rss_hash =
> "rss-hash");
> static cmdline_parse_token_string_t cmd_showport_rss_hash_rss_key =
> TOKEN_STRING_INITIALIZER(struct cmd_showport_rss_hash, key, "key");
> +static cmdline_parse_token_string_t cmd_showport_rss_hash_rss_algo =
> + TOKEN_STRING_INITIALIZER(struct cmd_showport_rss_hash, algorithm, "algorithm");
>
> static cmdline_parse_inst_t cmd_showport_rss_hash = {
> .f = cmd_showport_rss_hash_parsed,
> @@ -3065,7 +3069,7 @@ static cmdline_parse_inst_t cmd_showport_rss_hash = {
>
> static cmdline_parse_inst_t cmd_showport_rss_hash_key = {
> .f = cmd_showport_rss_hash_parsed,
> - .data = (void *)1,
> + .data = NULL,
> .help_str = "show port <port_id> rss-hash key",
> .tokens = {
> (void *)&cmd_showport_rss_hash_show,
> @@ -3077,6 +3081,20 @@ static cmdline_parse_inst_t cmd_showport_rss_hash_key = {
> },
> };
>
> +static cmdline_parse_inst_t cmd_showport_rss_hash_algo = {
> + .f = cmd_showport_rss_hash_parsed,
> + .data = NULL,
> + .help_str = "show port <port_id> rss-hash algorithm",
> + .tokens = {
> + (void *)&cmd_showport_rss_hash_show,
> + (void *)&cmd_showport_rss_hash_port,
> + (void *)&cmd_showport_rss_hash_port_id,
> + (void *)&cmd_showport_rss_hash_rss_hash,
> + (void *)&cmd_showport_rss_hash_rss_algo,
> + NULL,
> + },
> +};
> +
> /* *** Configure DCB *** */
> struct cmd_config_dcb {
> cmdline_fixed_string_t port;
> @@ -12953,6 +12971,7 @@ static cmdline_parse_ctx_t builtin_ctx[] = {
> (cmdline_parse_inst_t *)&cmd_tunnel_udp_config,
> (cmdline_parse_inst_t *)&cmd_showport_rss_hash,
> (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_cleanup_txq_mbufs,
> (cmdline_parse_inst_t *)&cmd_dump,
> diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c
> index b9fdb7e8f162..c090b77b536c 100644
> --- a/app/test-pmd/config.c
> +++ b/app/test-pmd/config.c
> @@ -1504,24 +1504,7 @@ rss_config_display(struct rte_flow_action_rss *rss_conf)
> printf(" %d", rss_conf->queue[i]);
> printf("\n");
>
> - printf(" function: ");
> - switch (rss_conf->func) {
> - case RTE_ETH_HASH_FUNCTION_DEFAULT:
> - printf("default\n");
> - break;
> - case RTE_ETH_HASH_FUNCTION_TOEPLITZ:
> - printf("toeplitz\n");
> - break;
> - case RTE_ETH_HASH_FUNCTION_SIMPLE_XOR:
> - printf("simple_xor\n");
> - break;
> - case RTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ:
> - printf("symmetric_toeplitz\n");
> - break;
> - default:
> - printf("Unknown function\n");
> - return;
> - }
> + printf(" function: %s\n", rte_eth_dev_rss_algo_name(rss_conf->func));
>
> printf(" RSS key:\n");
> if (rss_conf->key_len == 0) {
> @@ -4486,7 +4469,7 @@ port_rss_reta_info(portid_t port_id,
> * key of the port.
> */
> void
> -port_rss_hash_conf_show(portid_t port_id, int show_rss_key)
> +port_rss_hash_conf_show(portid_t port_id, int show_rss_key, int show_rss_algo)
> {
> struct rte_eth_rss_conf rss_conf = {0};
> uint8_t rss_key[RSS_HASH_KEY_LENGTH];
> @@ -4536,8 +4519,16 @@ port_rss_hash_conf_show(portid_t port_id, int show_rss_key)
> printf("RSS disabled\n");
> return;
> }
> +
> + if (show_rss_algo) {
> + printf("RSS algorithms:\n %s\n",
> + rte_eth_dev_rss_algo_name(rss_conf.algorithm));
algorithms --> algorithm, right?
Acked-by: Huisong Li <lihuisong@huawei.com>
> + return;
> + }
> +
> printf("RSS functions:\n");
> rss_types_display(rss_hf, TESTPMD_RSS_TYPES_CHAR_NUM_PER_LINE);
> +
> if (!show_rss_key)
> return;
> printf("RSS key:\n");
> diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h
> index 09a36b90b806..9b10a9ea1cf2 100644
> --- a/app/test-pmd/testpmd.h
> +++ b/app/test-pmd/testpmd.h
> @@ -1153,7 +1153,7 @@ int set_vf_rate_limit(portid_t port_id, uint16_t vf, uint32_t rate,
> int set_rxq_avail_thresh(portid_t port_id, uint16_t queue_id,
> uint8_t avail_thresh);
>
> -void port_rss_hash_conf_show(portid_t port_id, int show_rss_key);
> +void port_rss_hash_conf_show(portid_t port_id, int show_rss_key, int show_rss_algo);
> void port_rss_hash_key_update(portid_t port_id, char rss_type[],
> uint8_t *hash_key, uint8_t hash_key_len);
> int rx_queue_id_is_invalid(queueid_t rxq_id);
@@ -174,8 +174,8 @@ static void cmd_help_long_parsed(void *parsed_result,
" by masks on port X. size is used to indicate the"
" hardware supported reta size\n\n"
- "show port (port_id) rss-hash [key]\n"
- " Display the RSS hash functions and RSS hash key of port\n\n"
+ "show port (port_id) rss-hash [key | algorithm]\n"
+ " Display the RSS hash functions, RSS hash key and RSS hash algorithms of port\n\n"
"clear port (info|stats|xstats|fdir) (port_id|all)\n"
" Clear information for port_id, or all.\n\n"
@@ -3026,15 +3026,17 @@ struct cmd_showport_rss_hash {
cmdline_fixed_string_t rss_hash;
cmdline_fixed_string_t rss_type;
cmdline_fixed_string_t key; /* optional argument */
+ cmdline_fixed_string_t algorithm; /* optional argument */
};
static void cmd_showport_rss_hash_parsed(void *parsed_result,
__rte_unused struct cmdline *cl,
- void *show_rss_key)
+ __rte_unused void *data)
{
struct cmd_showport_rss_hash *res = parsed_result;
- port_rss_hash_conf_show(res->port_id, show_rss_key != NULL);
+ port_rss_hash_conf_show(res->port_id,
+ !strcmp(res->key, "key"), !strcmp(res->algorithm, "algorithm"));
}
static cmdline_parse_token_string_t cmd_showport_rss_hash_show =
@@ -3049,6 +3051,8 @@ static cmdline_parse_token_string_t cmd_showport_rss_hash_rss_hash =
"rss-hash");
static cmdline_parse_token_string_t cmd_showport_rss_hash_rss_key =
TOKEN_STRING_INITIALIZER(struct cmd_showport_rss_hash, key, "key");
+static cmdline_parse_token_string_t cmd_showport_rss_hash_rss_algo =
+ TOKEN_STRING_INITIALIZER(struct cmd_showport_rss_hash, algorithm, "algorithm");
static cmdline_parse_inst_t cmd_showport_rss_hash = {
.f = cmd_showport_rss_hash_parsed,
@@ -3065,7 +3069,7 @@ static cmdline_parse_inst_t cmd_showport_rss_hash = {
static cmdline_parse_inst_t cmd_showport_rss_hash_key = {
.f = cmd_showport_rss_hash_parsed,
- .data = (void *)1,
+ .data = NULL,
.help_str = "show port <port_id> rss-hash key",
.tokens = {
(void *)&cmd_showport_rss_hash_show,
@@ -3077,6 +3081,20 @@ static cmdline_parse_inst_t cmd_showport_rss_hash_key = {
},
};
+static cmdline_parse_inst_t cmd_showport_rss_hash_algo = {
+ .f = cmd_showport_rss_hash_parsed,
+ .data = NULL,
+ .help_str = "show port <port_id> rss-hash algorithm",
+ .tokens = {
+ (void *)&cmd_showport_rss_hash_show,
+ (void *)&cmd_showport_rss_hash_port,
+ (void *)&cmd_showport_rss_hash_port_id,
+ (void *)&cmd_showport_rss_hash_rss_hash,
+ (void *)&cmd_showport_rss_hash_rss_algo,
+ NULL,
+ },
+};
+
/* *** Configure DCB *** */
struct cmd_config_dcb {
cmdline_fixed_string_t port;
@@ -12953,6 +12971,7 @@ static cmdline_parse_ctx_t builtin_ctx[] = {
(cmdline_parse_inst_t *)&cmd_tunnel_udp_config,
(cmdline_parse_inst_t *)&cmd_showport_rss_hash,
(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_cleanup_txq_mbufs,
(cmdline_parse_inst_t *)&cmd_dump,
@@ -1504,24 +1504,7 @@ rss_config_display(struct rte_flow_action_rss *rss_conf)
printf(" %d", rss_conf->queue[i]);
printf("\n");
- printf(" function: ");
- switch (rss_conf->func) {
- case RTE_ETH_HASH_FUNCTION_DEFAULT:
- printf("default\n");
- break;
- case RTE_ETH_HASH_FUNCTION_TOEPLITZ:
- printf("toeplitz\n");
- break;
- case RTE_ETH_HASH_FUNCTION_SIMPLE_XOR:
- printf("simple_xor\n");
- break;
- case RTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ:
- printf("symmetric_toeplitz\n");
- break;
- default:
- printf("Unknown function\n");
- return;
- }
+ printf(" function: %s\n", rte_eth_dev_rss_algo_name(rss_conf->func));
printf(" RSS key:\n");
if (rss_conf->key_len == 0) {
@@ -4486,7 +4469,7 @@ port_rss_reta_info(portid_t port_id,
* key of the port.
*/
void
-port_rss_hash_conf_show(portid_t port_id, int show_rss_key)
+port_rss_hash_conf_show(portid_t port_id, int show_rss_key, int show_rss_algo)
{
struct rte_eth_rss_conf rss_conf = {0};
uint8_t rss_key[RSS_HASH_KEY_LENGTH];
@@ -4536,8 +4519,16 @@ port_rss_hash_conf_show(portid_t port_id, int show_rss_key)
printf("RSS disabled\n");
return;
}
+
+ if (show_rss_algo) {
+ printf("RSS algorithms:\n %s\n",
+ rte_eth_dev_rss_algo_name(rss_conf.algorithm));
+ return;
+ }
+
printf("RSS functions:\n");
rss_types_display(rss_hf, TESTPMD_RSS_TYPES_CHAR_NUM_PER_LINE);
+
if (!show_rss_key)
return;
printf("RSS key:\n");
@@ -1153,7 +1153,7 @@ int set_vf_rate_limit(portid_t port_id, uint16_t vf, uint32_t rate,
int set_rxq_avail_thresh(portid_t port_id, uint16_t queue_id,
uint8_t avail_thresh);
-void port_rss_hash_conf_show(portid_t port_id, int show_rss_key);
+void port_rss_hash_conf_show(portid_t port_id, int show_rss_key, int show_rss_algo);
void port_rss_hash_key_update(portid_t port_id, char rss_type[],
uint8_t *hash_key, uint8_t hash_key_len);
int rx_queue_id_is_invalid(queueid_t rxq_id);