[dpdk-dev] [PATCH v5 4/4] testpmd: make use of per-PMD TxRx parameters
Shreyansh Jain
shreyansh.jain at nxp.com
Mon Apr 9 14:55:15 CEST 2018
On Friday 06 April 2018 08:20 PM, Remy Horton wrote:
> The optimal values of several transmission & reception related
> parameters, such as burst sizes, descriptor ring sizes, and number
> of queues, varies between different network interface devices. This
> patch allows testpmd to make use of per-PMD tuned parameter values.
>
> Signed-off-by: Remy Horton <remy.horton at intel.com>
> ---
> app/test-pmd/cmdline.c | 31 ++++++++++++++++++++++++++++---
> app/test-pmd/parameters.c | 38 +++++++++++++++++++++++++++++++++-----
> app/test-pmd/testpmd.c | 5 +++--
> 3 files changed, 64 insertions(+), 10 deletions(-)
>
> diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
> index 40b31ad..0914425 100644
> --- a/app/test-pmd/cmdline.c
> +++ b/app/test-pmd/cmdline.c
> @@ -2599,6 +2599,8 @@ cmd_config_burst_parsed(void *parsed_result,
> __attribute__((unused)) void *data)
> {
> struct cmd_config_burst *res = parsed_result;
> + struct rte_eth_dev_info dev_info;
> + uint16_t rec_nb_pkts;
>
> if (!all_ports_stopped()) {
> printf("Please stop all ports first\n");
> @@ -2606,11 +2608,34 @@ cmd_config_burst_parsed(void *parsed_result,
> }
>
> if (!strcmp(res->name, "burst")) {
> - if (res->value < 1 || res->value > MAX_PKT_BURST) {
> + if (res->value == 0) {
Documentation for burst mode changes to testpmd would need an update.
I guess, only when the user explicitly sets 'set burst 0' would the
driver defaults be picked up - isn't it?
Maybe something like this:
--->8---
--- a/doc/guides/testpmd_app_ug/run_app.rst
+++ b/doc/guides/testpmd_app_ug/run_app.rst
@@ -372,7 +372,9 @@ The commandline options are:
* ``--burst=N``
Set the number of packets per burst to N, where 1 <= N <= 512.
- The default value is 16.
+ The default value is 32.
+ If set to 0, driver default is used if defined. Else, if driver default
+ is not defined, default of 32 is used.
* ``--mbcache=N``
--->8---
In the above, I think the existing documented default value needs to be
changed. It is set to '#define DEF_PKT_BURST 32'
If you add that, please use my ack for next revision.
(For patch 1/4, I had already given my Ack in v2)
> + /* If user gives a value of zero, query the PMD for
> + * its recommended Rx burst size. Testpmd uses a single
> + * size for all ports, so assume all ports are the same
> + * NIC model and use the values from Port 0.
> + */
> + rte_eth_dev_info_get(0, &dev_info);
> + rec_nb_pkts = dev_info.default_rxportconf.burst_size;
> +
> + if (rec_nb_pkts == 0) {
> + printf("PMD does not recommend a burst size.\n"
> + "User provided value must be between"
> + " 1 and %d\n", MAX_PKT_BURST);
> + return;
> + } else if (rec_nb_pkts > MAX_PKT_BURST) {
> + printf("PMD recommended burst size of %d"
> + " exceeds maximum value of %d\n",
> + rec_nb_pkts, MAX_PKT_BURST);
> + return;
> + }
> + printf("Using PMD-provided burst value of %d\n",
> + rec_nb_pkts);
> + nb_pkt_per_burst = rec_nb_pkts;
> + } else if (res->value > MAX_PKT_BURST) {
> printf("burst must be >= 1 && <= %d\n", MAX_PKT_BURST);
> return;
> - }
> - nb_pkt_per_burst = res->value;
> + } else
> + nb_pkt_per_burst = res->value;
> } else {
> printf("Unknown parameter\n");
> return;
> diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c
> index 2192bdc..cb6a229 100644
> --- a/app/test-pmd/parameters.c
> +++ b/app/test-pmd/parameters.c
> @@ -544,6 +544,8 @@ launch_args_parse(int argc, char** argv)
> /* Default offloads for all ports. */
> uint64_t rx_offloads = rx_mode.offloads;
> uint64_t tx_offloads = tx_mode.offloads;
> + struct rte_eth_dev_info dev_info;
> + uint16_t rec_nb_pkts;
>
> static struct option lgopts[] = {
> { "help", 0, 0, 0 },
> @@ -947,12 +949,38 @@ launch_args_parse(int argc, char** argv)
> }
> if (!strcmp(lgopts[opt_idx].name, "burst")) {
> n = atoi(optarg);
> - if ((n >= 1) && (n <= MAX_PKT_BURST))
> - nb_pkt_per_burst = (uint16_t) n;
> - else
> + if (n == 0) {
> + /* A burst size of zero means that the
> + * PMD should be queried for
> + * recommended Rx burst size. Since
> + * testpmd uses a single size for all
> + * ports, port 0 is queried for the
> + * value, on the assumption that all
> + * ports are of the same NIC model.
> + */
> + rte_eth_dev_info_get(0, &dev_info);
> + rec_nb_pkts = dev_info
> + .default_rxportconf.burst_size;
> +
> + if (rec_nb_pkts == 0)
> + rte_exit(EXIT_FAILURE,
> + "PMD does not recommend a burst size. "
> + "Provided value must be between "
> + "1 and %d\n", MAX_PKT_BURST);
> + else if (rec_nb_pkts > MAX_PKT_BURST)
> + rte_exit(EXIT_FAILURE,
> + "PMD recommended burst size of %d"
> + " exceeds maximum value of %d\n",
> + rec_nb_pkts, MAX_PKT_BURST);
> + printf("Using PMD-provided burst value of %d\n",
> + rec_nb_pkts);
> + nb_pkt_per_burst = rec_nb_pkts;
> + } else if (n > MAX_PKT_BURST)
> rte_exit(EXIT_FAILURE,
> - "burst must >= 1 and <= %d]",
> - MAX_PKT_BURST);
> + "burst must be between1 and %d\n",
> + MAX_PKT_BURST);
> + else
> + nb_pkt_per_burst = (uint16_t) n;
> }
> if (!strcmp(lgopts[opt_idx].name, "mbcache")) {
> n = atoi(optarg);
> diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
> index 4c0e258..82eb197 100644
> --- a/app/test-pmd/testpmd.c
> +++ b/app/test-pmd/testpmd.c
> @@ -210,9 +210,10 @@ queueid_t nb_txq = 1; /**< Number of TX queues per port. */
>
> /*
> * Configurable number of RX/TX ring descriptors.
> + * Defaults are supplied by drivers via ethdev.
> */
> -#define RTE_TEST_RX_DESC_DEFAULT 1024
> -#define RTE_TEST_TX_DESC_DEFAULT 1024
> +#define RTE_TEST_RX_DESC_DEFAULT 0
> +#define RTE_TEST_TX_DESC_DEFAULT 0
> uint16_t nb_rxd = RTE_TEST_RX_DESC_DEFAULT; /**< Number of RX descriptors. */
> uint16_t nb_txd = RTE_TEST_TX_DESC_DEFAULT; /**< Number of TX descriptors. */
>
>
More information about the dev
mailing list