DPDK patches and discussions
 help / color / mirror / Atom feed
From: Raslan Darawsheh <rasland@mellanox.com>
To: Shiri Kuzin <shirik@mellanox.com>, "dev@dpdk.org" <dev@dpdk.org>
Cc: Matan Azrad <matan@mellanox.com>,
	Slava Ovsiienko <viacheslavo@mellanox.com>
Subject: Re: [dpdk-dev] [PATCH] net/mlx5: creating relaxed ordering memory regions
Date: Wed, 25 Mar 2020 14:25:23 +0000	[thread overview]
Message-ID: <AM0PR05MB67071DC4406F6B85EF5779C5C2CE0@AM0PR05MB6707.eurprd05.prod.outlook.com> (raw)
In-Reply-To: <1585049979-12990-1-git-send-email-shirik@mellanox.com>

Hi,

> -----Original Message-----
> From: Shiri Kuzin <shirik@mellanox.com>
> Sent: Tuesday, March 24, 2020 1:40 PM
> To: dev@dpdk.org
> Cc: Matan Azrad <matan@mellanox.com>; Raslan Darawsheh
> <rasland@mellanox.com>; Slava Ovsiienko <viacheslavo@mellanox.com>
> Subject: [PATCH] net/mlx5: creating relaxed ordering memory regions
> 
> In the current state, when preforming read/write
> transactions we must wait for a completion in order
> to run the next transaction, and all transactions are
> performed by order.
> 
> Relaxed Ordering is a PCI optimization which by enabling it
> we allow the system to perform read/writes in a different
> order without having to wait for completion and improve
> the performance in that matter.
> 
> This commit introduces the creation of relaxed ordering
> memory regions in mlx5.
> As relaxed ordering is an optimization, drivers that
> do not support it can simply ignore it and therefore
> it is enabled by default.
> 
> Signed-off-by: Shiri Kuzin <shirik@mellanox.com>
> Acked-by: Matan Azrad <matan@mellanox.com>
> ---
>  doc/guides/rel_notes/release_20_05.rst | 2 +-
>  drivers/common/mlx5/mlx5_devx_cmds.c   | 4 ++++
>  drivers/common/mlx5/mlx5_devx_cmds.h   | 1 +
>  drivers/common/mlx5/mlx5_glue.h        | 4 ++++
>  drivers/common/mlx5/mlx5_prm.h         | 4 +++-
>  drivers/net/mlx5/mlx5_flow_dv.c        | 1 +
>  drivers/net/mlx5/mlx5_mr.c             | 6 ++++--
>  drivers/vdpa/mlx5/mlx5_vdpa_lm.c       | 1 +
>  drivers/vdpa/mlx5/mlx5_vdpa_mem.c      | 1 +
>  9 files changed, 20 insertions(+), 4 deletions(-)
> 
> diff --git a/doc/guides/rel_notes/release_20_05.rst
> b/doc/guides/rel_notes/release_20_05.rst
> index 000bbf5..c960fd2 100644
> --- a/doc/guides/rel_notes/release_20_05.rst
> +++ b/doc/guides/rel_notes/release_20_05.rst
> @@ -61,7 +61,7 @@ New Features
>    Updated Mellanox mlx5 driver with new features and improvements,
> including:
> 
>    * Added support for matching on IPv4 Time To Live and IPv6 Hop Limit.
> -
> +  * Added support for creating Relaxed Ordering Memory Regions.
> 
>  Removed Items
>  -------------
> diff --git a/drivers/common/mlx5/mlx5_devx_cmds.c
> b/drivers/common/mlx5/mlx5_devx_cmds.c
> index d960bc9..1157a44 100644
> --- a/drivers/common/mlx5/mlx5_devx_cmds.c
> +++ b/drivers/common/mlx5/mlx5_devx_cmds.c
> @@ -196,6 +196,10 @@ struct mlx5_devx_obj *
>  	MLX5_SET(mkc, mkc, pd, attr->pd);
>  	MLX5_SET(mkc, mkc, mkey_7_0, attr->umem_id & 0xFF);
>  	MLX5_SET(mkc, mkc, translations_octword_size, translation_size);
> +	if (attr->relaxed_ordering == 1) {
> +		MLX5_SET(mkc, mkc, relaxed_ordering_write, 0x1);
> +		MLX5_SET(mkc, mkc, relaxed_ordering_read, 0x1);
> +	}
>  	MLX5_SET64(mkc, mkc, start_addr, attr->addr);
>  	MLX5_SET64(mkc, mkc, len, attr->size);
>  	mkey->obj = mlx5_glue->devx_obj_create(ctx, in, in_size_dw * 4,
> out,
> diff --git a/drivers/common/mlx5/mlx5_devx_cmds.h
> b/drivers/common/mlx5/mlx5_devx_cmds.h
> index 6912dc6..20bb294 100644
> --- a/drivers/common/mlx5/mlx5_devx_cmds.h
> +++ b/drivers/common/mlx5/mlx5_devx_cmds.h
> @@ -33,6 +33,7 @@ struct mlx5_devx_mkey_attr {
>  	uint32_t pd;
>  	uint32_t log_entity_size;
>  	uint32_t pg_access:1;
> +	uint32_t relaxed_ordering:1;
>  	struct mlx5_klm *klm_array;
>  	int klm_num;
>  };
> diff --git a/drivers/common/mlx5/mlx5_glue.h
> b/drivers/common/mlx5/mlx5_glue.h
> index 6238b43..cd1136f 100644
> --- a/drivers/common/mlx5/mlx5_glue.h
> +++ b/drivers/common/mlx5/mlx5_glue.h
> @@ -98,6 +98,10 @@
>  			uint64_t comp_mask; };
>  #endif
> 
> +#ifndef IBV_ACCESS_RELAXED_ORDERING
> +#define IBV_ACCESS_RELAXED_ORDERING 0
> +#endif
> +
>  /* LIB_GLUE_VERSION must be updated every time this structure is
> modified. */
>  struct mlx5_glue {
>  	const char *version;
> diff --git a/drivers/common/mlx5/mlx5_prm.h
> b/drivers/common/mlx5/mlx5_prm.h
> index eee3a4b..00fd7c1 100644
> --- a/drivers/common/mlx5/mlx5_prm.h
> +++ b/drivers/common/mlx5/mlx5_prm.h
> @@ -882,7 +882,9 @@ struct mlx5_ifc_mkc_bits {
> 
>  	u8         translations_octword_size[0x20];
> 
> -	u8         reserved_at_1c0[0x1b];
> +	u8         reserved_at_1c0[0x19];
> +	u8		   relaxed_ordering_read[0x1];
> +	u8		   reserved_at_1da[0x1];
>  	u8         log_page_size[0x5];
> 
>  	u8         reserved_at_1e0[0x20];
> diff --git a/drivers/net/mlx5/mlx5_flow_dv.c
> b/drivers/net/mlx5/mlx5_flow_dv.c
> index 2090631..809833b 100644
> --- a/drivers/net/mlx5/mlx5_flow_dv.c
> +++ b/drivers/net/mlx5/mlx5_flow_dv.c
> @@ -3962,6 +3962,7 @@ struct field_modify_info modify_tcp[] = {
>  	mkey_attr.pg_access = 0;
>  	mkey_attr.klm_array = NULL;
>  	mkey_attr.klm_num = 0;
> +	mkey_attr.relaxed_ordering = 1;
>  	mem_mng->dm = mlx5_devx_cmd_mkey_create(sh->ctx,
> &mkey_attr);
>  	if (!mem_mng->dm) {
>  		mlx5_glue->devx_umem_dereg(mem_mng->umem);
> diff --git a/drivers/net/mlx5/mlx5_mr.c b/drivers/net/mlx5/mlx5_mr.c
> index cb97c87..fd1245d 100644
> --- a/drivers/net/mlx5/mlx5_mr.c
> +++ b/drivers/net/mlx5/mlx5_mr.c
> @@ -768,7 +768,8 @@ struct mr_update_mp_data {
>  	 * through mlx5_alloc_verbs_buf().
>  	 */
>  	mr->ibv_mr = mlx5_glue->reg_mr(sh->pd, (void *)data.start, len,
> -				       IBV_ACCESS_LOCAL_WRITE);
> +				       IBV_ACCESS_LOCAL_WRITE |
> +					   IBV_ACCESS_RELAXED_ORDERING);
>  	if (mr->ibv_mr == NULL) {
>  		DEBUG("port %u fail to create a verbs MR for address (%p)",
>  		      dev->data->port_id, (void *)addr);
> @@ -1217,7 +1218,8 @@ struct mr_update_mp_data {
>  	if (mr == NULL)
>  		return NULL;
>  	mr->ibv_mr = mlx5_glue->reg_mr(priv->sh->pd, (void *)addr, len,
> -				       IBV_ACCESS_LOCAL_WRITE);
> +				       IBV_ACCESS_LOCAL_WRITE |
> +					   IBV_ACCESS_RELAXED_ORDERING);
>  	if (mr->ibv_mr == NULL) {
>  		DRV_LOG(WARNING,
>  			"port %u fail to create a verbs MR for address (%p)",
> diff --git a/drivers/vdpa/mlx5/mlx5_vdpa_lm.c
> b/drivers/vdpa/mlx5/mlx5_vdpa_lm.c
> index 3358704..4457760 100644
> --- a/drivers/vdpa/mlx5/mlx5_vdpa_lm.c
> +++ b/drivers/vdpa/mlx5/mlx5_vdpa_lm.c
> @@ -39,6 +39,7 @@
>  			.pg_access = 1,
>  			.klm_array = NULL,
>  			.klm_num = 0,
> +			.relaxed_ordering = 0,
>  	};
>  	struct mlx5_devx_virtq_attr attr = {
>  		.type =
> MLX5_VIRTQ_MODIFY_TYPE_DIRTY_BITMAP_PARAMS,
> diff --git a/drivers/vdpa/mlx5/mlx5_vdpa_mem.c
> b/drivers/vdpa/mlx5/mlx5_vdpa_mem.c
> index 398ca35..da31b47 100644
> --- a/drivers/vdpa/mlx5/mlx5_vdpa_mem.c
> +++ b/drivers/vdpa/mlx5/mlx5_vdpa_mem.c
> @@ -263,6 +263,7 @@
>  		mkey_attr.pg_access = 1;
>  		mkey_attr.klm_array = NULL;
>  		mkey_attr.klm_num = 0;
> +		mkey_attr.relaxed_ordering = 0;
>  		entry->mkey = mlx5_devx_cmd_mkey_create(priv->ctx,
> &mkey_attr);
>  		if (!entry->mkey) {
>  			DRV_LOG(ERR, "Failed to create direct Mkey.");
> --
> 1.8.3.1


Patch applied to next-net-mlx,

Kindest regards,
Raslan Darawsheh

      reply	other threads:[~2020-03-25 14:25 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-24 11:39 Shiri Kuzin
2020-03-25 14:25 ` Raslan Darawsheh [this message]

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=AM0PR05MB67071DC4406F6B85EF5779C5C2CE0@AM0PR05MB6707.eurprd05.prod.outlook.com \
    --to=rasland@mellanox.com \
    --cc=dev@dpdk.org \
    --cc=matan@mellanox.com \
    --cc=shirik@mellanox.com \
    --cc=viacheslavo@mellanox.com \
    /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).