Skip to content

Commit

Permalink
app/testpmd: support set RSS hash algorithm
Browse files Browse the repository at this point in the history
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 <[email protected]>
Reviewed-by: Huisong Li <[email protected]>
Reviewed-by: Ferruh Yigit <[email protected]>
  • Loading branch information
Jie Hai authored and ferruhy committed Dec 4, 2023
1 parent c4b01b7 commit 7516242
Show file tree
Hide file tree
Showing 2 changed files with 92 additions and 0 deletions.
81 changes: 81 additions & 0 deletions app/test-pmd/cmdline.c
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -2275,6 +2279,82 @@ 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;
uint32_t algorithm;
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 configuration\n",
res->port_id);
return;
}

algorithm = (uint32_t)rss_conf.algorithm;
ret = rte_eth_find_rss_algo(res->algo, &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;
Expand Down Expand Up @@ -13165,6 +13245,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,
Expand Down
11 changes: 11 additions & 0 deletions doc/guides/testpmd_app_ug/testpmd_funcs.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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
~~~~~~~~~~~~~~~~~~~~~~

Expand Down

0 comments on commit 7516242

Please sign in to comment.