Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/91912/?format=api
http://patches.dpdk.org/api/patches/91912/?format=api", "web_url": "http://patches.dpdk.org/project/dpdk/patch/20210421041958.2306539-3-lizh@nvidia.com/", "project": { "id": 1, "url": "http://patches.dpdk.org/api/projects/1/?format=api", "name": "DPDK", "link_name": "dpdk", "list_id": "dev.dpdk.org", "list_email": "dev@dpdk.org", "web_url": "http://core.dpdk.org", "scm_url": "git://dpdk.org/dpdk", "webscm_url": "http://git.dpdk.org/dpdk", "list_archive_url": "https://inbox.dpdk.org/dev", "list_archive_url_format": "https://inbox.dpdk.org/dev/{}", "commit_url_format": "" }, "msgid": "<20210421041958.2306539-3-lizh@nvidia.com>", "list_archive_url": "https://inbox.dpdk.org/dev/20210421041958.2306539-3-lizh@nvidia.com", "date": "2021-04-21T04:19:57", "name": "[v4,2/2] net/mlx5: support meter PPS profile", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": true, "hash": "c5bf77cf1b963dbbc83ee54d6e247eda9789576a", "submitter": { "id": 1967, "url": "http://patches.dpdk.org/api/people/1967/?format=api", "name": "Li Zhang", "email": "lizh@nvidia.com" }, "delegate": { "id": 3268, "url": "http://patches.dpdk.org/api/users/3268/?format=api", "username": "rasland", "first_name": "Raslan", "last_name": "Darawsheh", "email": "rasland@nvidia.com" }, "mbox": "http://patches.dpdk.org/project/dpdk/patch/20210421041958.2306539-3-lizh@nvidia.com/mbox/", "series": [ { "id": 16541, "url": "http://patches.dpdk.org/api/series/16541/?format=api", "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=16541", "date": "2021-04-21T04:19:57", "name": "Support meter PPS(packet per second) in MLX5 PMD", "version": 4, "mbox": "http://patches.dpdk.org/series/16541/mbox/" } ], "comments": "http://patches.dpdk.org/api/patches/91912/comments/", "check": "fail", "checks": "http://patches.dpdk.org/api/patches/91912/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<dev-bounces@dpdk.org>", "X-Original-To": "patchwork@inbox.dpdk.org", "Delivered-To": "patchwork@inbox.dpdk.org", "Received": [ "from mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 07FF4A0548;\n\tWed, 21 Apr 2021 06:20:08 +0200 (CEST)", "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id D39D9418DB;\n\tWed, 21 Apr 2021 06:20:08 +0200 (CEST)", "from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129])\n by mails.dpdk.org (Postfix) with ESMTP id B32BD4191B\n for <dev@dpdk.org>; Wed, 21 Apr 2021 06:20:06 +0200 (CEST)", "from Internal Mail-Server by MTLPINE1 (envelope-from\n lizh@nvidia.com)\n with SMTP; 21 Apr 2021 07:20:01 +0300", "from nvidia.com (c-235-17-1-009.mtl.labs.mlnx [10.235.17.9])\n by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id 13L4K08C020974;\n Wed, 21 Apr 2021 07:20:01 +0300" ], "From": "Li Zhang <lizh@nvidia.com>", "To": "dekelp@nvidia.com, orika@nvidia.com, viacheslavo@nvidia.com,\n matan@nvidia.com, shahafs@nvidia.com", "Cc": "dev@dpdk.org, thomas@monjalon.net, rasland@nvidia.com, roniba@nvidia.com", "Date": "Wed, 21 Apr 2021 07:19:57 +0300", "Message-Id": "<20210421041958.2306539-3-lizh@nvidia.com>", "X-Mailer": "git-send-email 2.21.0", "In-Reply-To": "<20210421041958.2306539-1-lizh@nvidia.com>", "References": "<20210331092319.1446618-1-lizh@nvidia.com>\n <20210421041958.2306539-1-lizh@nvidia.com>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "Subject": "[dpdk-dev] [PATCH v4 2/2] net/mlx5: support meter PPS profile", "X-BeenThere": "dev@dpdk.org", "X-Mailman-Version": "2.1.29", "Precedence": "list", "List-Id": "DPDK patches and discussions <dev.dpdk.org>", "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>", "List-Archive": "<http://mails.dpdk.org/archives/dev/>", "List-Post": "<mailto:dev@dpdk.org>", "List-Help": "<mailto:dev-request@dpdk.org?subject=help>", "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>", "Errors-To": "dev-bounces@dpdk.org", "Sender": "\"dev\" <dev-bounces@dpdk.org>" }, "content": "Currently meter algorithms only supports bytes per second(BPS).\nSuch as Single Rate Three Color Marker (srTCM rfc2697)\nAdd packet_mode flag to support rate is packet per second.\nSo that it can meter traffic by packet per second (PPS).\n\nSigned-off-by: Li Zhang <lizh@nvidia.com>\nAcked-by: Matan Azrad <matan@nvidia.com>\n---\n doc/guides/nics/mlx5.rst | 1 +\n drivers/net/mlx5/mlx5_flow_aso.c | 17 ++++---\n drivers/net/mlx5/mlx5_flow_meter.c | 74 +++++++++++++++++++++++-------\n 3 files changed, 69 insertions(+), 23 deletions(-)", "diff": "diff --git a/doc/guides/nics/mlx5.rst b/doc/guides/nics/mlx5.rst\nindex b27a9a69f6..2bb4f18a08 100644\n--- a/doc/guides/nics/mlx5.rst\n+++ b/doc/guides/nics/mlx5.rst\n@@ -416,6 +416,7 @@ Limitations\n - green: QUEUE, RSS, PORT_ID, JUMP, MARK and SET_TAG.\n - yellow: must be empty.\n - RED: must be DROP.\n+ - meter profile packet mode is supported.\n \n Statistics\n ----------\ndiff --git a/drivers/net/mlx5/mlx5_flow_aso.c b/drivers/net/mlx5/mlx5_flow_aso.c\nindex 20cd4fe18c..da513a600c 100644\n--- a/drivers/net/mlx5/mlx5_flow_aso.c\n+++ b/drivers/net/mlx5/mlx5_flow_aso.c\n@@ -191,7 +191,6 @@ mlx5_aso_mtr_init_sq(struct mlx5_aso_sq *sq)\n \tvolatile struct mlx5_aso_wqe *restrict wqe;\n \tint i;\n \tint size = 1 << sq->log_desc_n;\n-\tuint32_t idx;\n \n \t/* All the next fields state should stay constant. */\n \tfor (i = 0, wqe = &sq->sq_obj.aso_wqes[0]; i < size; ++i, ++wqe) {\n@@ -204,11 +203,6 @@ mlx5_aso_mtr_init_sq(struct mlx5_aso_sq *sq)\n \t\t\t (BYTEWISE_64BYTE << ASO_CSEG_DATA_MASK_MODE_OFFSET));\n \t\twqe->general_cseg.flags = RTE_BE32(MLX5_COMP_ALWAYS <<\n \t\t\t\t\t\t\t MLX5_COMP_MODE_OFFSET);\n-\t\tfor (idx = 0; idx < MLX5_ASO_METERS_PER_WQE;\n-\t\t\tidx++)\n-\t\t\twqe->aso_dseg.mtrs[idx].v_bo_sc_bbog_mm =\n-\t\t\t\tRTE_BE32((1 << ASO_DSEG_VALID_OFFSET) |\n-\t\t\t\t(MLX5_FLOW_COLOR_GREEN << ASO_DSEG_SC_OFFSET));\n \t}\n }\n \n@@ -664,6 +658,7 @@ mlx5_aso_mtr_sq_enqueue_single(struct mlx5_aso_sq *sq,\n {\n \tvolatile struct mlx5_aso_wqe *wqe = NULL;\n \tstruct mlx5_flow_meter_info *fm = NULL;\n+\tstruct mlx5_flow_meter_profile *fmp;\n \tuint16_t size = 1 << sq->log_desc_n;\n \tuint16_t mask = size - 1;\n \tuint16_t res;\n@@ -704,6 +699,16 @@ mlx5_aso_mtr_sq_enqueue_single(struct mlx5_aso_sq *sq,\n \t\t\tRTE_BE32(MLX5_IFC_FLOW_METER_DISABLE_CBS_CIR_VAL);\n \t\twqe->aso_dseg.mtrs[dseg_idx].ebs_eir = 0;\n \t}\n+\tfmp = fm->profile;\n+\tif (fmp->profile.packet_mode)\n+\t\twqe->aso_dseg.mtrs[dseg_idx].v_bo_sc_bbog_mm =\n+\t\t\t\tRTE_BE32((1 << ASO_DSEG_VALID_OFFSET) |\n+\t\t\t\t(MLX5_FLOW_COLOR_GREEN << ASO_DSEG_SC_OFFSET) |\n+\t\t\t\t(MLX5_METER_MODE_PKT << ASO_DSEG_MTR_MODE));\n+\telse\n+\t\twqe->aso_dseg.mtrs[dseg_idx].v_bo_sc_bbog_mm =\n+\t\t\t\tRTE_BE32((1 << ASO_DSEG_VALID_OFFSET) |\n+\t\t\t\t(MLX5_FLOW_COLOR_GREEN << ASO_DSEG_SC_OFFSET));\n \tsq->head++;\n \tsq->pi += 2;/* Each WQE contains 2 WQEBB's. */\n \trte_io_wmb();\ndiff --git a/drivers/net/mlx5/mlx5_flow_meter.c b/drivers/net/mlx5/mlx5_flow_meter.c\nindex e97a1d77a6..ac2735e6e2 100644\n--- a/drivers/net/mlx5/mlx5_flow_meter.c\n+++ b/drivers/net/mlx5/mlx5_flow_meter.c\n@@ -144,13 +144,19 @@ mlx5_flow_meter_profile_validate(struct rte_eth_dev *dev,\n \tif (profile->alg == RTE_MTR_SRTCM_RFC2697) {\n \t\tif (priv->config.hca_attr.qos.flow_meter_old) {\n \t\t\t/* Verify support for flow meter parameters. */\n-\t\t\tif (profile->srtcm_rfc2697.cir > 0 &&\n-\t\t\t profile->srtcm_rfc2697.cir <= MLX5_SRTCM_CIR_MAX &&\n-\t\t\t profile->srtcm_rfc2697.cbs > 0 &&\n-\t\t\t profile->srtcm_rfc2697.cbs <= MLX5_SRTCM_CBS_MAX &&\n-\t\t\t profile->srtcm_rfc2697.ebs <= MLX5_SRTCM_EBS_MAX)\n-\t\t\t\treturn 0;\n-\t\t\telse\n+\t\t\tif (priv->sh->meter_aso_en && profile->packet_mode) {\n+\t\t\t\tif (profile->srtcm_rfc2697.cir > 0 &&\n+\t\t\t\t\t(profile->srtcm_rfc2697.cir <<\n+\t\t\t\t\tMLX5_MTRS_PPS_MAP_BPS_SHIFT)\n+\t\t\t\t\t<= MLX5_SRTCM_CIR_MAX &&\n+\t\t\t\t\tprofile->srtcm_rfc2697.cbs > 0 &&\n+\t\t\t\t\t(profile->srtcm_rfc2697.cbs <<\n+\t\t\t\t\tMLX5_MTRS_PPS_MAP_BPS_SHIFT)\n+\t\t\t\t\t<= MLX5_SRTCM_CBS_MAX &&\n+\t\t\t\t\t(profile->srtcm_rfc2697.ebs <<\n+\t\t\t\t\tMLX5_MTRS_PPS_MAP_BPS_SHIFT)\n+\t\t\t\t\t<= MLX5_SRTCM_EBS_MAX)\n+\t\t\t\t\treturn 0;\n \t\t\t\treturn -rte_mtr_error_set\n \t\t\t\t\t (error, ENOTSUP,\n \t\t\t\t\t RTE_MTR_ERROR_TYPE_MTR_PARAMS,\n@@ -158,6 +164,22 @@ mlx5_flow_meter_profile_validate(struct rte_eth_dev *dev,\n \t\t\t\t\t profile->srtcm_rfc2697.ebs ?\n \t\t\t\t\t \"Metering value ebs must be 0.\" :\n \t\t\t\t\t \"Invalid metering parameters.\");\n+\t\t\t}\n+\t\t\tif (profile->srtcm_rfc2697.cir > 0 &&\n+\t\t\t\tprofile->srtcm_rfc2697.cir <=\n+\t\t\t\t\t\tMLX5_SRTCM_CIR_MAX &&\n+\t\t\t\tprofile->srtcm_rfc2697.cbs > 0 &&\n+\t\t\t\tprofile->srtcm_rfc2697.cbs <=\n+\t\t\t\t\t\tMLX5_SRTCM_CBS_MAX &&\n+\t\t\t\tprofile->srtcm_rfc2697.ebs <=\n+\t\t\t\t\t\tMLX5_SRTCM_EBS_MAX)\n+\t\t\t\treturn 0;\n+\t\t\treturn -rte_mtr_error_set(error, ENOTSUP,\n+\t\t\t\t\tRTE_MTR_ERROR_TYPE_MTR_PARAMS,\n+\t\t\t\t\tNULL,\n+\t\t\t\t\tprofile->srtcm_rfc2697.ebs ?\n+\t\t\t\t\t\"Metering value ebs must be 0.\" :\n+\t\t\t\t\t\"Invalid metering parameters.\");\n \t\t}\n \t}\n \treturn -rte_mtr_error_set(error, ENOTSUP,\n@@ -241,20 +263,36 @@ mlx5_flow_meter_xbs_man_exp_calc(uint64_t xbs, uint8_t *man, uint8_t *exp)\n */\n static int\n mlx5_flow_meter_param_fill(struct mlx5_flow_meter_profile *fmp,\n-\t\t\t struct rte_mtr_error *error)\n+\t\t\tstruct mlx5_priv *priv, struct rte_mtr_error *error)\n {\n \tstruct mlx5_flow_meter_srtcm_rfc2697_prm *srtcm = &fmp->srtcm_prm;\n \tuint8_t man, exp;\n \tuint32_t cbs_exp, cbs_man, cir_exp, cir_man;\n \tuint32_t ebs_exp, ebs_man;\n+\tuint64_t cir, cbs, ebs;\n \n \tif (fmp->profile.alg != RTE_MTR_SRTCM_RFC2697)\n \t\treturn -rte_mtr_error_set(error, ENOTSUP,\n \t\t\t\tRTE_MTR_ERROR_TYPE_METER_PROFILE,\n \t\t\t\tNULL, \"Metering algorithm not supported.\");\n+\tif (!priv->sh->meter_aso_en && fmp->profile.packet_mode)\n+\t\treturn -rte_mtr_error_set(error, ENOTSUP,\n+\t\t\tRTE_MTR_ERROR_TYPE_METER_PROFILE,\n+\t\t\tNULL, \"Metering algorithm packet mode not supported.\");\n+\tif (priv->sh->meter_aso_en && fmp->profile.packet_mode) {\n+\t\tcir = fmp->profile.srtcm_rfc2697.cir <<\n+\t\t\t\tMLX5_MTRS_PPS_MAP_BPS_SHIFT;\n+\t\tcbs = fmp->profile.srtcm_rfc2697.cbs <<\n+\t\t\t\tMLX5_MTRS_PPS_MAP_BPS_SHIFT;\n+\t\tebs = fmp->profile.srtcm_rfc2697.ebs <<\n+\t\t\t\tMLX5_MTRS_PPS_MAP_BPS_SHIFT;\n+\t} else {\n+\t\tcir = fmp->profile.srtcm_rfc2697.cir;\n+\t\tcbs = fmp->profile.srtcm_rfc2697.cbs;\n+\t\tebs = fmp->profile.srtcm_rfc2697.ebs;\n+\t}\n \t/* cir = 8G * cir_mantissa * 1/(2^cir_exponent)) Bytes/Sec */\n-\tmlx5_flow_meter_cir_man_exp_calc(fmp->profile.srtcm_rfc2697.cir,\n-\t\t\t\t &man, &exp);\n+\tmlx5_flow_meter_cir_man_exp_calc(cir, &man, &exp);\n \t/* Check if cir mantissa is too large. */\n \tif (exp > ASO_DSEG_CIR_EXP_MASK)\n \t\treturn -rte_mtr_error_set(error, ENOTSUP,\n@@ -264,8 +302,7 @@ mlx5_flow_meter_param_fill(struct mlx5_flow_meter_profile *fmp,\n \tcir_man = man;\n \tcir_exp = exp;\n \t /* cbs = cbs_mantissa * 2^cbs_exponent */\n-\tmlx5_flow_meter_xbs_man_exp_calc(fmp->profile.srtcm_rfc2697.cbs,\n-\t\t\t\t &man, &exp);\n+\tmlx5_flow_meter_xbs_man_exp_calc(cbs, &man, &exp);\n \t/* Check if cbs mantissa is too large. */\n \tif (exp > ASO_DSEG_EXP_MASK)\n \t\treturn -rte_mtr_error_set(error, ENOTSUP,\n@@ -278,8 +315,7 @@ mlx5_flow_meter_param_fill(struct mlx5_flow_meter_profile *fmp,\n \t\t\t\tcbs_man << ASO_DSEG_CBS_MAN_OFFSET |\n \t\t\t\tcir_exp << ASO_DSEG_CIR_EXP_OFFSET |\n \t\t\t\tcir_man);\n-\tmlx5_flow_meter_xbs_man_exp_calc(fmp->profile.srtcm_rfc2697.ebs,\n-\t\t\t\t &man, &exp);\n+\tmlx5_flow_meter_xbs_man_exp_calc(ebs, &man, &exp);\n \t/* Check if ebs mantissa is too large. */\n \tif (exp > ASO_DSEG_EXP_MASK)\n \t\treturn -rte_mtr_error_set(error, ENOTSUP,\n@@ -319,11 +355,15 @@ mlx5_flow_mtr_cap_get(struct rte_eth_dev *dev,\n \t\t\t\t\t RTE_MTR_ERROR_TYPE_UNSPECIFIED, NULL,\n \t\t\t\t\t \"Meter is not supported\");\n \tmemset(cap, 0, sizeof(*cap));\n-\tif (priv->sh->meter_aso_en)\n+\tif (priv->sh->meter_aso_en) {\n \t\t/* 2 meters per one ASO cache line. */\n \t\tcap->n_max = 1 << (qattr->log_max_num_meter_aso + 1);\n-\telse\n+\t\tcap->srtcm_rfc2697_packet_mode_supported = 1;\n+\t} else {\n \t\tcap->n_max = 1 << qattr->log_max_flow_meter;\n+\t\tcap->srtcm_rfc2697_packet_mode_supported = 0;\n+\t}\n+\tcap->srtcm_rfc2697_byte_mode_supported = 1;\n \tcap->n_shared_max = cap->n_max;\n \tcap->identical = 1;\n \tcap->shared_identical = 1;\n@@ -384,7 +424,7 @@ mlx5_flow_meter_profile_add(struct rte_eth_dev *dev,\n \tfmp->id = meter_profile_id;\n \tfmp->profile = *profile;\n \t/* Fill the flow meter parameters for the PRM. */\n-\tret = mlx5_flow_meter_param_fill(fmp, error);\n+\tret = mlx5_flow_meter_param_fill(fmp, priv, error);\n \tif (ret)\n \t\tgoto error;\n \t/* Add to list. */\n", "prefixes": [ "v4", "2/2" ] }{ "id": 91912, "url": "