- dpdk version - firmware version - RSS RETA - module eeprom information - Rx/Tx burst mode - Rx/Tx descriptor (cherry picked from commit b5fa0e5ece15d8a550ad9d4da199180477d28e6b)
224 lines
7.2 KiB
Diff
224 lines
7.2 KiB
Diff
From 95af4fb4b6c89c9488637920c497849b9ffb1bc6 Mon Sep 17 00:00:00 2001
|
|
From: Dongdong Liu <liudongdong3@huawei.com>
|
|
Date: Tue, 11 Oct 2022 19:18:42 +0800
|
|
Subject: app/procinfo: dump detailed info for Rx/Tx descriptors
|
|
|
|
[ upstream commit 6ff065b221b1048e27a0c9a9438d0f11e6fae06d ]
|
|
|
|
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>
|
|
---
|
|
app/proc-info/main.c | 104 +++++++++++++++++++++++++++++++++
|
|
doc/guides/tools/proc_info.rst | 17 +++++-
|
|
2 files changed, 120 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/app/proc-info/main.c b/app/proc-info/main.c
|
|
index dc948c7cc5..0cc01e3dad 100644
|
|
--- a/app/proc-info/main.c
|
|
+++ b/app/proc-info/main.c
|
|
@@ -117,6 +117,21 @@ static uint32_t enable_shw_rss_reta;
|
|
/* Enable show module eeprom information. */
|
|
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 */
|
|
static void
|
|
proc_info_usage(const char *prgname)
|
|
@@ -148,6 +163,14 @@ proc_info_usage(const char *prgname)
|
|
" --firmware-version: to display ethdev firmware version\n"
|
|
" --show-rss-reta: to display ports redirection table\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"
|
|
" --dump-regs=file-prefix: dump registers to file with the file-prefix\n",
|
|
prgname);
|
|
@@ -200,6 +223,19 @@ parse_xstats_ids(char *list, uint64_t *ids, int limit) {
|
|
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
|
|
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},
|
|
{"show-rss-reta", 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}
|
|
};
|
|
|
|
@@ -367,6 +405,26 @@ proc_info_parse_args(int argc, char **argv)
|
|
return -1;
|
|
}
|
|
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;
|
|
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
|
|
main(int argc, char **argv)
|
|
{
|
|
@@ -1732,6 +1832,10 @@ main(int argc, char **argv)
|
|
metrics_display(i);
|
|
#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
|
|
diff --git a/doc/guides/tools/proc_info.rst b/doc/guides/tools/proc_info.rst
|
|
index dc5d017cff..cf3502a8cb 100644
|
|
--- a/doc/guides/tools/proc_info.rst
|
|
+++ b/doc/guides/tools/proc_info.rst
|
|
@@ -21,7 +21,8 @@ The application has a number of command line options:
|
|
--stats-reset | --xstats-reset] [ --show-port | --show-tm | --show-crypto |
|
|
--show-ring[=name] | --show-mempool[=name] | --iter-mempool=name |
|
|
--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
|
|
~~~~~~~~~~
|
|
@@ -86,6 +87,20 @@ The show-rss-reta parameter displays ports rss redirection table.
|
|
**--show-module-eeprom**
|
|
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
|
|
-----------
|
|
|
|
--
|
|
2.23.0
|
|
|