app/procinfo: dump detailed info for Rx/Tx descriptors

This patch support Rx/Tx descriptor dump

The command is like:
dpdk-proc-info -a xxxx:xx:xx.x --file-prefix=xxx --
--show-rx-descriptor queue_id:offset:num

dpdk-proc-info -a xxxx:xx:xx.x --file-prefix=xxx --
--show-tx-descriptor queue_id:offset:num

queue_id: A queue identifier on this port.
offset: The offset of the descriptor starting from tail.
num: The number of the descriptors to dump.

Signed-off-by: Min Hu (Connor) <humin29@huawei.com>
Signed-off-by: Dongdong Liu <liudongdong3@huawei.com>
Acked-by: Reshma Pattan <reshma.pattan@intel.com>
This commit is contained in:
Dongdong Liu 2022-10-11 19:18:42 +08:00 committed by David Marchand
parent a6d81dc032
commit 6ff065b221
2 changed files with 120 additions and 1 deletions

View File

@ -117,6 +117,21 @@ static uint32_t enable_shw_rss_reta;
/* Enable show module eeprom information. */ /* Enable show module eeprom information. */
static uint32_t enable_shw_module_eeprom; static uint32_t enable_shw_module_eeprom;
/* Enable dump Rx/Tx descriptor. */
static uint32_t enable_shw_rx_desc_dump;
static uint32_t enable_shw_tx_desc_dump;
#define DESC_PARAM_NUM 3
struct desc_param {
uint16_t queue_id; /* A queue identifier on this port. */
uint16_t offset; /* The offset of the descriptor starting from tail. */
uint16_t num; /* The number of the descriptors to dump. */
};
static struct desc_param rx_desc_param;
static struct desc_param tx_desc_param;
/* display usage */ /* display usage */
static void static void
proc_info_usage(const char *prgname) proc_info_usage(const char *prgname)
@ -148,6 +163,14 @@ proc_info_usage(const char *prgname)
" --firmware-version: to display ethdev firmware version\n" " --firmware-version: to display ethdev firmware version\n"
" --show-rss-reta: to display ports redirection table\n" " --show-rss-reta: to display ports redirection table\n"
" --show-module-eeprom: to display ports module eeprom information\n" " --show-module-eeprom: to display ports module eeprom information\n"
" --show-rx-descriptor queue_id:offset:num to display ports Rx descriptor information. "
"queue_id: A Rx queue identifier on this port. "
"offset: The offset of the descriptor starting from tail. "
"num: The number of the descriptors to dump.\n"
" --show-tx-descriptor queue_id:offset:num to display ports Tx descriptor information. "
"queue_id: A Tx queue identifier on this port. "
"offset: The offset of the descriptor starting from tail. "
"num: The number of the descriptors to dump.\n"
" --iter-mempool=name: iterate mempool elements to display content\n" " --iter-mempool=name: iterate mempool elements to display content\n"
" --dump-regs=file-prefix: dump registers to file with the file-prefix\n", " --dump-regs=file-prefix: dump registers to file with the file-prefix\n",
prgname); prgname);
@ -200,6 +223,19 @@ parse_xstats_ids(char *list, uint64_t *ids, int limit) {
return length; return length;
} }
static int
parse_descriptor_param(char *list, struct desc_param *desc)
{
int ret;
ret = sscanf(list, "%hu:%hu:%hu", &desc->queue_id, &desc->offset,
&desc->num);
if (ret != DESC_PARAM_NUM)
return -EINVAL;
return 0;
}
static int static int
proc_info_preparse_args(int argc, char **argv) proc_info_preparse_args(int argc, char **argv)
{ {
@ -264,6 +300,8 @@ proc_info_parse_args(int argc, char **argv)
{"firmware-version", 0, NULL, 0}, {"firmware-version", 0, NULL, 0},
{"show-rss-reta", 0, NULL, 0}, {"show-rss-reta", 0, NULL, 0},
{"show-module-eeprom", 0, NULL, 0}, {"show-module-eeprom", 0, NULL, 0},
{"show-rx-descriptor", required_argument, NULL, 1},
{"show-tx-descriptor", required_argument, NULL, 1},
{NULL, 0, 0, 0} {NULL, 0, 0, 0}
}; };
@ -367,6 +405,26 @@ proc_info_parse_args(int argc, char **argv)
return -1; return -1;
} }
nb_xstats_ids = ret; nb_xstats_ids = ret;
} else if (!strncmp(long_option[option_index].name,
"show-rx-descriptor", MAX_LONG_OPT_SZ)) {
int ret = parse_descriptor_param(optarg,
&rx_desc_param);
if (ret < 0) {
fprintf(stderr, "Error parsing Rx descriptor param: %s\n",
strerror(-ret));
return -1;
}
enable_shw_rx_desc_dump = 1;
} else if (!strncmp(long_option[option_index].name,
"show-tx-descriptor", MAX_LONG_OPT_SZ)) {
int ret = parse_descriptor_param(optarg,
&tx_desc_param);
if (ret < 0) {
fprintf(stderr, "Error parsing Tx descriptor param: %s\n",
strerror(-ret));
return -1;
}
enable_shw_tx_desc_dump = 1;
} }
break; break;
default: default:
@ -1644,6 +1702,48 @@ show_module_eeprom_info(void)
} }
} }
static void
nic_rx_descriptor_display(uint16_t port_id, struct desc_param *desc)
{
uint16_t queue_id = desc->queue_id;
uint16_t offset = desc->offset;
uint16_t num = desc->num;
int ret;
snprintf(bdr_str, MAX_STRING_LEN, " show - Rx descriptor ");
STATS_BDR_STR(10, bdr_str);
printf("Dump ethdev Rx descriptor for port %u, queue %u, offset %u, num %u\n",
port_id, queue_id, offset, num);
ret = rte_eth_rx_descriptor_dump(port_id, queue_id, offset, num,
stdout);
if (ret < 0)
fprintf(stderr, "Error dumping ethdev Rx descriptor: %s\n",
strerror(-ret));
}
static void
nic_tx_descriptor_display(uint16_t port_id, struct desc_param *desc)
{
uint16_t queue_id = desc->queue_id;
uint16_t offset = desc->offset;
uint16_t num = desc->num;
int ret;
snprintf(bdr_str, MAX_STRING_LEN, " show - Tx descriptor ");
STATS_BDR_STR(10, bdr_str);
printf("Dump ethdev Tx descriptor for port %u, queue %u, offset %u, num %u\n",
port_id, queue_id, offset, num);
ret = rte_eth_tx_descriptor_dump(port_id, queue_id, offset, num,
stdout);
if (ret < 0)
fprintf(stderr, "Error dumping ethdev Tx descriptor: %s\n",
strerror(-ret));
}
int int
main(int argc, char **argv) main(int argc, char **argv)
{ {
@ -1732,6 +1832,10 @@ main(int argc, char **argv)
metrics_display(i); metrics_display(i);
#endif #endif
if (enable_shw_rx_desc_dump)
nic_rx_descriptor_display(i, &rx_desc_param);
if (enable_shw_tx_desc_dump)
nic_tx_descriptor_display(i, &tx_desc_param);
} }
#ifdef RTE_LIB_METRICS #ifdef RTE_LIB_METRICS

View File

@ -21,7 +21,8 @@ The application has a number of command line options:
--stats-reset | --xstats-reset] [ --show-port | --show-tm | --show-crypto | --stats-reset | --xstats-reset] [ --show-port | --show-tm | --show-crypto |
--show-ring[=name] | --show-mempool[=name] | --iter-mempool=name | --show-ring[=name] | --show-mempool[=name] | --iter-mempool=name |
--show-port-private | --version | --firmware-version | --show-rss-reta | --show-port-private | --version | --firmware-version | --show-rss-reta |
--show-module-eeprom ] --show-module-eeprom | --show-rx-descriptor queue_id:offset:num |
--show-tx-descriptor queue_id:offset:num ]
Parameters Parameters
~~~~~~~~~~ ~~~~~~~~~~
@ -86,6 +87,20 @@ The show-rss-reta parameter displays ports rss redirection table.
**--show-module-eeprom** **--show-module-eeprom**
The show-module-eeprom parameter displays ports module eeprom information. The show-module-eeprom parameter displays ports module eeprom information.
**--show-rx-descriptor queue_id:offset:num**
The show-rx-descriptor parameter displays ports Rx descriptor information
specified by queue_id, offset and num.
queue_id: A Rx queue identifier on this port.
offset: The offset of the descriptor starting from tail.
num: The number of the descriptors to dump.
**--show-tx-descriptor queue_id:offset:num**
The show-tx-descriptor parameter displays ports Tx descriptor information
specified by queue_id, offset and num.
queue_id: A Tx queue identifier on this port.
offset: The offset of the descriptor starting from tail.
num: The number of the descriptors to dump.
Limitations Limitations
----------- -----------