From: Slava Ovsiienko <viacheslavo@mellanox.com>
To: Alexander Kozyrev <akozyrev@mellanox.com>, "dev@dpdk.org" <dev@dpdk.org>
Cc: Raslan Darawsheh <rasland@mellanox.com>,
Matan Azrad <matan@mellanox.com>,
"ferruh.yigit@intel.com" <ferruh.yigit@intel.com>,
Thomas Monjalon <thomas@monjalon.net>
Subject: Re: [dpdk-dev] [PATCH 1/4] net/mlx5: add a devarg to specify MPRQ stride size
Date: Thu, 2 Apr 2020 10:00:12 +0000 [thread overview]
Message-ID: <AM4PR05MB32659C5D623F3803E5FC8F0DD2C60@AM4PR05MB3265.eurprd05.prod.outlook.com> (raw)
In-Reply-To: <1585691559-17409-2-git-send-email-akozyrev@mellanox.com>
> -----Original Message-----
> From: Alexander Kozyrev <akozyrev@mellanox.com>
> Sent: Wednesday, April 1, 2020 0:53
> To: dev@dpdk.org
> Cc: Raslan Darawsheh <rasland@mellanox.com>; Matan Azrad
> <matan@mellanox.com>; Slava Ovsiienko <viacheslavo@mellanox.com>;
> ferruh.yigit@intel.com; Thomas Monjalon <thomas@monjalon.net>
> Subject: [PATCH 1/4] net/mlx5: add a devarg to specify MPRQ stride size
>
> Define a device parameter to configure log 2 of a stride size for MPRQ
> - mprq_log_stride_size. User is able to specify a stride size in a range allowed
> by an underlying hardware. The default stride size is defined as
> 2048 bytes to encompass most commonly used packet sizes in the Internet
> (MTU 1518 and less) and will be used in case a maximum configured packet
> size cannot fit into the largest possible stride size. Otherwise a stride size is
> set to a large enough value to encompass a whole packet.
>
> Signed-off-by: Alexander Kozyrev <akozyrev@mellanox.com>
Acked-by: Viacheslav Ovsiienko <viacheslavo@mellanox.com>
> ---
> drivers/net/mlx5/mlx5.c | 34 +++++++++++++++++++++++++++-------
> drivers/net/mlx5/mlx5.h | 1 +
> drivers/net/mlx5/mlx5_defs.h | 3 +++
> drivers/net/mlx5/mlx5_rxq.c | 22 +++++++++++++---------
> 4 files changed, 44 insertions(+), 16 deletions(-)
>
> diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c index
> 6a11b14..a2ba6d3 100644
> --- a/drivers/net/mlx5/mlx5.c
> +++ b/drivers/net/mlx5/mlx5.c
> @@ -63,6 +63,9 @@
> /* Device parameter to configure log 2 of the number of strides for MPRQ. */
> #define MLX5_RX_MPRQ_LOG_STRIDE_NUM "mprq_log_stride_num"
>
> +/* Device parameter to configure log 2 of the stride size for MPRQ. */
> +#define MLX5_RX_MPRQ_LOG_STRIDE_SIZE "mprq_log_stride_size"
> +
> /* Device parameter to limit the size of memcpy'd packet for MPRQ. */
> #define MLX5_RX_MPRQ_MAX_MEMCPY_LEN "mprq_max_memcpy_len"
>
> @@ -1531,6 +1534,8 @@ struct mlx5_flow_id_pool *
> config->mprq.enabled = !!tmp;
> } else if (strcmp(MLX5_RX_MPRQ_LOG_STRIDE_NUM, key) == 0) {
> config->mprq.stride_num_n = tmp;
> + } else if (strcmp(MLX5_RX_MPRQ_LOG_STRIDE_SIZE, key) == 0) {
> + config->mprq.stride_size_n = tmp;
> } else if (strcmp(MLX5_RX_MPRQ_MAX_MEMCPY_LEN, key) == 0) {
> config->mprq.max_memcpy_len = tmp;
> } else if (strcmp(MLX5_RXQS_MIN_MPRQ, key) == 0) { @@ -1627,6
> +1632,7 @@ struct mlx5_flow_id_pool *
> MLX5_RXQ_PKT_PAD_EN,
> MLX5_RX_MPRQ_EN,
> MLX5_RX_MPRQ_LOG_STRIDE_NUM,
> + MLX5_RX_MPRQ_LOG_STRIDE_SIZE,
> MLX5_RX_MPRQ_MAX_MEMCPY_LEN,
> MLX5_RXQS_MIN_MPRQ,
> MLX5_TXQ_INLINE,
> @@ -2302,8 +2308,6 @@ struct mlx5_flow_id_pool *
> mprq_caps.min_single_wqe_log_num_of_strides;
> mprq_max_stride_num_n =
> mprq_caps.max_single_wqe_log_num_of_strides;
> - config.mprq.stride_num_n =
> RTE_MAX(MLX5_MPRQ_STRIDE_NUM_N,
> - mprq_min_stride_num_n);
> }
> #endif
> if (RTE_CACHE_LINE_SIZE == 128 &&
> @@ -2617,17 +2621,32 @@ struct mlx5_flow_id_pool * #endif
> }
> if (config.mprq.enabled && mprq) {
> - if (config.mprq.stride_num_n > mprq_max_stride_num_n ||
> - config.mprq.stride_num_n < mprq_min_stride_num_n) {
> + if (config.mprq.stride_num_n &&
> + (config.mprq.stride_num_n > mprq_max_stride_num_n ||
> + config.mprq.stride_num_n < mprq_min_stride_num_n)) {
> config.mprq.stride_num_n =
> - RTE_MAX(MLX5_MPRQ_STRIDE_NUM_N,
> - mprq_min_stride_num_n);
> +
> RTE_MIN(RTE_MAX(MLX5_MPRQ_STRIDE_NUM_N,
> + mprq_min_stride_num_n),
> + mprq_max_stride_num_n);
> DRV_LOG(WARNING,
> "the number of strides"
> " for Multi-Packet RQ is out of range,"
> " setting default value (%u)",
> 1 << config.mprq.stride_num_n);
> }
> + if (config.mprq.stride_size_n &&
> + (config.mprq.stride_size_n > mprq_max_stride_size_n ||
> + config.mprq.stride_size_n < mprq_min_stride_size_n)) {
> + config.mprq.stride_size_n =
> +
> RTE_MIN(RTE_MAX(MLX5_MPRQ_STRIDE_SIZE_N,
> + mprq_min_stride_size_n),
> + mprq_max_stride_size_n);
> + DRV_LOG(WARNING,
> + "the size of a stride"
> + " for Multi-Packet RQ is out of range,"
> + " setting default value (%u)",
> + 1 << config.mprq.stride_size_n);
> + }
> config.mprq.min_stride_size_n = mprq_min_stride_size_n;
> config.mprq.max_stride_size_n = mprq_max_stride_size_n;
> } else if (config.mprq.enabled && !mprq) { @@ -3361,7 +3380,8 @@
> struct mlx5_flow_id_pool *
> .mr_ext_memseg_en = 1,
> .mprq = {
> .enabled = 0, /* Disabled by default. */
> - .stride_num_n = MLX5_MPRQ_STRIDE_NUM_N,
> + .stride_num_n = 0,
> + .stride_size_n = 0,
> .max_memcpy_len =
> MLX5_MPRQ_MEMCPY_DEFAULT_LEN,
> .min_rxqs_num = MLX5_MPRQ_MIN_RXQS,
> },
> diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h index
> 62b0810..c8e2454 100644
> --- a/drivers/net/mlx5/mlx5.h
> +++ b/drivers/net/mlx5/mlx5.h
> @@ -176,6 +176,7 @@ struct mlx5_dev_config {
> struct {
> unsigned int enabled:1; /* Whether MPRQ is enabled. */
> unsigned int stride_num_n; /* Number of strides. */
> + unsigned int stride_size_n; /* Size of a stride. */
> unsigned int min_stride_size_n; /* Min size of a stride. */
> unsigned int max_stride_size_n; /* Max size of a stride. */
> unsigned int max_memcpy_len;
> diff --git a/drivers/net/mlx5/mlx5_defs.h b/drivers/net/mlx5/mlx5_defs.h
> index 19e8253..260f584 100644
> --- a/drivers/net/mlx5/mlx5_defs.h
> +++ b/drivers/net/mlx5/mlx5_defs.h
> @@ -143,6 +143,9 @@
> /* Log 2 of the default number of strides per WQE for Multi-Packet RQ. */
> #define MLX5_MPRQ_STRIDE_NUM_N 6U
>
> +/* Log 2 of the default size of a stride per WQE for Multi-Packet RQ.
> +*/ #define MLX5_MPRQ_STRIDE_SIZE_N 11U
> +
> /* Two-byte shift is disabled for Multi-Packet RQ. */ #define
> MLX5_MPRQ_TWO_BYTE_SHIFT 0
>
> diff --git a/drivers/net/mlx5/mlx5_rxq.c b/drivers/net/mlx5/mlx5_rxq.c index
> 0a95e3c..85fcfe6 100644
> --- a/drivers/net/mlx5/mlx5_rxq.c
> +++ b/drivers/net/mlx5/mlx5_rxq.c
> @@ -1856,25 +1856,26 @@ struct mlx5_rxq_ctrl *
> strd_headroom_en = 1;
> mprq_stride_size = non_scatter_min_mbuf_size;
> }
> + if (!config->mprq.stride_num_n)
> + config->mprq.stride_num_n = MLX5_MPRQ_STRIDE_NUM_N;
> + if (!config->mprq.stride_size_n)
> + config->mprq.stride_size_n = (mprq_stride_size <=
> + (1U << config->mprq.max_stride_size_n)) ?
> + log2above(mprq_stride_size) :
> MLX5_MPRQ_STRIDE_SIZE_N;
> /*
> * This Rx queue can be configured as a Multi-Packet RQ if all of the
> * following conditions are met:
> * - MPRQ is enabled.
> * - The number of descs is more than the number of strides.
> - * - max_rx_pkt_len plus overhead is less than the max size of a
> - * stride.
> * Otherwise, enable Rx scatter if necessary.
> */
> - if (mprq_en &&
> - desc > (1U << config->mprq.stride_num_n) &&
> - mprq_stride_size <= (1U << config->mprq.max_stride_size_n)) {
> + if (mprq_en && desc > (1U << config->mprq.stride_num_n)) {
> /* TODO: Rx scatter isn't supported yet. */
> tmpl->rxq.sges_n = 0;
> /* Trim the number of descs needed. */
> desc >>= config->mprq.stride_num_n;
> tmpl->rxq.strd_num_n = config->mprq.stride_num_n;
> - tmpl->rxq.strd_sz_n = RTE_MAX(log2above(mprq_stride_size),
> - config->mprq.min_stride_size_n);
> + tmpl->rxq.strd_sz_n = config->mprq.stride_size_n;
> tmpl->rxq.strd_shift_en = MLX5_MPRQ_TWO_BYTE_SHIFT;
> tmpl->rxq.strd_headroom_en = strd_headroom_en;
> tmpl->rxq.mprq_max_memcpy_len =
> RTE_MIN(first_mb_free_size, @@ -1924,9 +1925,12 @@ struct mlx5_rxq_ctrl *
> DRV_LOG(WARNING,
> "port %u MPRQ is requested but cannot be enabled"
> " (requested: desc = %u, stride_sz = %u,"
> - " supported: min_stride_num = %u, max_stride_sz =
> %u).",
> - dev->data->port_id, desc, mprq_stride_size,
> + " supported: min_stride_num = %u, min_stride_sz =
> %u,"
> + "max_stride_sz = %u).",
> + dev->data->port_id, desc,
> + (1 << config->mprq.stride_size_n),
> (1 << config->mprq.stride_num_n),
> + (1 << config->mprq.min_stride_size_n),
> (1 << config->mprq.max_stride_size_n));
> DRV_LOG(DEBUG, "port %u maximum number of segments per
> packet: %u",
> dev->data->port_id, 1 << tmpl->rxq.sges_n);
> --
> 1.8.3.1
next prev parent reply other threads:[~2020-04-02 10:00 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-31 21:52 [dpdk-dev] [PATCH 0/4] net/mlx5: add large packet size support to MPRQ Alexander Kozyrev
2020-03-31 21:52 ` [dpdk-dev] [PATCH 1/4] net/mlx5: add a devarg to specify MPRQ stride size Alexander Kozyrev
2020-04-02 10:00 ` Slava Ovsiienko [this message]
2020-03-31 21:52 ` [dpdk-dev] [PATCH 2/4] net/mlx5: enable MPRQ multi-stride operations Alexander Kozyrev
2020-04-02 10:01 ` Slava Ovsiienko
2020-03-31 21:52 ` [dpdk-dev] [PATCH 3/4] doc: add a decsription for MPRQ stride size devarg Alexander Kozyrev
2020-03-31 21:52 ` [dpdk-dev] [PATCH 4/4] net/mlx5: add multi-segment packets in MPRQ mode Alexander Kozyrev
2020-04-02 10:02 ` Slava Ovsiienko
2020-04-02 18:11 ` [dpdk-dev] [PATCH 0/3] net/mlx5: add large packet size support to MPRQ Alexander Kozyrev
2020-04-02 18:11 ` [dpdk-dev] [PATCH 1/3] net/mlx5: add a devarg to specify MPRQ stride size Alexander Kozyrev
2020-04-02 18:11 ` [dpdk-dev] [PATCH 2/3] net/mlx5: enable MPRQ multi-stride operations Alexander Kozyrev
2020-04-02 18:11 ` [dpdk-dev] [PATCH 3/3] net/mlx5: add multi-segment packets in MPRQ mode Alexander Kozyrev
2020-04-09 22:23 ` [dpdk-dev] [PATCH v4 0/3] net/mlx5: add large packet size support to MPRQ Alexander Kozyrev
2020-04-09 22:23 ` [dpdk-dev] [PATCH v4 1/3] net/mlx5: add a devarg to specify MPRQ stride size Alexander Kozyrev
2020-04-14 11:42 ` Ferruh Yigit
2020-04-14 12:52 ` Thomas Monjalon
2020-04-15 11:01 ` Ferruh Yigit
2020-04-15 11:25 ` Luca Boccassi
2020-04-15 15:34 ` Alexander Kozyrev
2020-04-15 15:52 ` [dpdk-dev] [dpdk-stable] " Luca Boccassi
2020-04-09 22:23 ` [dpdk-dev] [PATCH v4 2/3] net/mlx5: enable MPRQ multi-stride operations Alexander Kozyrev
2020-04-09 22:23 ` [dpdk-dev] [PATCH v4 3/3] net/mlx5: add multi-segment packets in MPRQ mode Alexander Kozyrev
2020-04-10 14:01 ` [dpdk-dev] [PATCH v4 0/3] net/mlx5: add large packet size support to MPRQ Matan Azrad
2020-04-13 10:57 ` Raslan Darawsheh
2020-04-09 21:24 ` [dpdk-dev] [PATCH v3 " Alexander Kozyrev
2020-04-09 21:24 ` [dpdk-dev] [PATCH v3 1/3] net/mlx5: add a devarg to specify MPRQ stride size Alexander Kozyrev
2020-04-09 21:24 ` [dpdk-dev] [PATCH v3 2/3] net/mlx5: enable MPRQ multi-stride operations Alexander Kozyrev
2020-04-09 21:24 ` [dpdk-dev] [PATCH v3 3/3] net/mlx5: add multi-segment packets in MPRQ mode Alexander Kozyrev
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=AM4PR05MB32659C5D623F3803E5FC8F0DD2C60@AM4PR05MB3265.eurprd05.prod.outlook.com \
--to=viacheslavo@mellanox.com \
--cc=akozyrev@mellanox.com \
--cc=dev@dpdk.org \
--cc=ferruh.yigit@intel.com \
--cc=matan@mellanox.com \
--cc=rasland@mellanox.com \
--cc=thomas@monjalon.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).