From patchwork Wed Mar 31 08:54:03 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Li Zhang X-Patchwork-Id: 90193 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: 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]) by inbox.dpdk.org (Postfix) with ESMTP id BDC26A034F; Wed, 31 Mar 2021 10:54:17 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A378D4069E; Wed, 31 Mar 2021 10:54:17 +0200 (CEST) Received: from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129]) by mails.dpdk.org (Postfix) with ESMTP id CF49840141 for ; Wed, 31 Mar 2021 10:54:15 +0200 (CEST) Received: from Internal Mail-Server by MTLPINE1 (envelope-from lizh@nvidia.com) with SMTP; 31 Mar 2021 11:54:13 +0300 Received: from nvidia.com (c-235-17-1-009.mtl.labs.mlnx [10.235.17.9]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id 12V8sDok009021; Wed, 31 Mar 2021 11:54:13 +0300 From: Li Zhang To: dekelp@nvidia.com, orika@nvidia.com, viacheslavo@nvidia.com, matan@nvidia.com, shahafs@nvidia.com, cristian.dumitrescu@intel.com, Thomas Monjalon , Ferruh Yigit , Andrew Rybchenko Cc: dev@dpdk.org, rasland@nvidia.com, roniba@nvidia.com Date: Wed, 31 Mar 2021 11:54:03 +0300 Message-Id: <20210331085405.1445546-2-lizh@nvidia.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20210331085405.1445546-1-lizh@nvidia.com> References: <20210331085405.1445546-1-lizh@nvidia.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 1/2] ethdev: add packet mode in meter profile structure X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Currently meter algorithms only supports rate is bytes per second(BPS). Add packet_mode flag in meter profile parameters data structure. So that it can meter traffic by packet per second. When packet_mode is 0, the profile rates and bucket sizes are specified in bytes per second and bytes when packet_mode is not 0, the profile rates and bucket sizes are specified in packets and packets per second. The below structure will be extended: rte_mtr_meter_profile rte_mtr_capabilities Signed-off-by: Li Zhang --- doc/guides/rel_notes/release_21_05.rst | 7 ++ lib/librte_ethdev/rte_mtr.h | 89 ++++++++++++++++++++++---- 2 files changed, 85 insertions(+), 11 deletions(-) diff --git a/doc/guides/rel_notes/release_21_05.rst b/doc/guides/rel_notes/release_21_05.rst index 3c76148b11..c9c15794ad 100644 --- a/doc/guides/rel_notes/release_21_05.rst +++ b/doc/guides/rel_notes/release_21_05.rst @@ -119,6 +119,13 @@ New Features * Added command to display Rx queue used descriptor count. ``show port (port_id) rxq (queue_id) desc used count`` +* **Added support for meter PPS profile.** + + Currently meter algorithms only supports bytes per second(BPS). + Add packet_mode in the meter profile parameters data structures + to support packet per second (PPS) mode. + So that it can meter traffic by packet per second. + Packet_mode must be 0 when it is bytes mode. Removed Items ------------- diff --git a/lib/librte_ethdev/rte_mtr.h b/lib/librte_ethdev/rte_mtr.h index e1dc59eb06..52611a90f5 100644 --- a/lib/librte_ethdev/rte_mtr.h +++ b/lib/librte_ethdev/rte_mtr.h @@ -133,46 +133,71 @@ struct rte_mtr_meter_profile { union { /** Items only valid when *alg* is set to srTCM - RFC 2697. */ struct { - /** Committed Information Rate (CIR) (bytes/second). */ + /** + * Committed Information Rate (CIR) + * (bytes per second or packets per second). + */ uint64_t cir; - /** Committed Burst Size (CBS) (bytes). */ + /** Committed Burst Size (CBS) (bytes or packets). */ uint64_t cbs; - /** Excess Burst Size (EBS) (bytes). */ + /** Excess Burst Size (EBS) (bytes or packets). */ uint64_t ebs; } srtcm_rfc2697; /** Items only valid when *alg* is set to trTCM - RFC 2698. */ struct { - /** Committed Information Rate (CIR) (bytes/second). */ + /** + * Committed Information Rate (CIR) + * (bytes per second or packets per second). + */ uint64_t cir; - /** Peak Information Rate (PIR) (bytes/second). */ + /** + * Peak Information Rate (PIR) + * (bytes per second or packets per second). + */ uint64_t pir; - /** Committed Burst Size (CBS) (byes). */ + /** Committed Burst Size (CBS) (bytes or packets). */ uint64_t cbs; - /** Peak Burst Size (PBS) (bytes). */ + /** Peak Burst Size (PBS) (bytes or packets). */ uint64_t pbs; } trtcm_rfc2698; /** Items only valid when *alg* is set to trTCM - RFC 4115. */ struct { - /** Committed Information Rate (CIR) (bytes/second). */ + /** + * Committed Information Rate (CIR) + * (bytes per second or packets per second). + */ uint64_t cir; - /** Excess Information Rate (EIR) (bytes/second). */ + /** + * Excess Information Rate (EIR) + * (bytes per second or packets per second). + */ uint64_t eir; - /** Committed Burst Size (CBS) (byes). */ + /** Committed Burst Size (CBS) (bytes or packets). */ uint64_t cbs; - /** Excess Burst Size (EBS) (bytes). */ + /** Excess Burst Size (EBS) (bytes or packets). */ uint64_t ebs; } trtcm_rfc4115; }; + + /** + * When zero, the byte mode is enabled for the current profile, so the + * *rate* and *size* fields are specified in bytes per second + * and bytes, respectively. + * When non-zero, the packet mode is enabled for the current profile, + * so the *rate* and *size* fields are specified in packets per second + * and packets, respectively. + */ + int packet_mode; }; /** @@ -333,6 +358,48 @@ struct rte_mtr_capabilities { */ int color_aware_trtcm_rfc4115_supported; + /** + * srTCM rfc2697 byte mode supported. + * When non-zero, it indicates that byte mode is supported for + * the srTCM RFC 2697 metering algorithm. + */ + int srtcm_rfc2697_byte_mode_supported; + + /** + * srTCM rfc2697 packet mode supported. + * When non-zero, it indicates that packet mode is supported for + * the srTCM RFC 2697 metering algorithm. + */ + int srtcm_rfc2697_packet_mode_supported; + + /** + * trTCM rfc2698 byte mode supported. + * When non-zero, it indicates that byte mode is supported for + * the trTCM RFC 2698 metering algorithm. + */ + int trtcm_rfc2698_byte_mode_supported; + + /** + * trTCM rfc2698 packet mode supported. + * When non-zero, it indicates that packet mode is supported for + * the trTCM RFC 2698 metering algorithm. + */ + int trtcm_rfc2698_packet_mode_supported; + + /** + * trTCM rfc4115 byte mode supported. + * When non-zero, it indicates that byte mode is supported for + * the trTCM RFC 4115 metering algorithm. + */ + int trtcm_rfc4115_byte_mode_supported; + + /** + * trTCM rfc4115 packet mode supported. + * When non-zero, it indicates that packet mode is supported for + * the trTCM RFC 4115 metering algorithm. + */ + int trtcm_rfc4115_packet_mode_supported; + /** Set of supported statistics counter types. * @see enum rte_mtr_stats_type */ From patchwork Wed Mar 31 08:54:04 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Li Zhang X-Patchwork-Id: 90195 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: 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]) by inbox.dpdk.org (Postfix) with ESMTP id 4E362A034F; Wed, 31 Mar 2021 10:54:28 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1688E140E19; Wed, 31 Mar 2021 10:54:20 +0200 (CEST) Received: from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129]) by mails.dpdk.org (Postfix) with ESMTP id D2EDB4069E for ; Wed, 31 Mar 2021 10:54:15 +0200 (CEST) Received: from Internal Mail-Server by MTLPINE1 (envelope-from lizh@nvidia.com) with SMTP; 31 Mar 2021 11:54:13 +0300 Received: from nvidia.com (c-235-17-1-009.mtl.labs.mlnx [10.235.17.9]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id 12V8sDol009021; Wed, 31 Mar 2021 11:54:13 +0300 From: Li Zhang To: dekelp@nvidia.com, orika@nvidia.com, viacheslavo@nvidia.com, matan@nvidia.com, shahafs@nvidia.com, cristian.dumitrescu@intel.com, Xiaoyun Li Cc: dev@dpdk.org, thomas@monjalon.net, rasland@nvidia.com, roniba@nvidia.com Date: Wed, 31 Mar 2021 11:54:04 +0300 Message-Id: <20210331085405.1445546-3-lizh@nvidia.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20210331085405.1445546-1-lizh@nvidia.com> References: <20210331085405.1445546-1-lizh@nvidia.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 2/2] app/testpmd: add meter profile packet mode option X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" add meter profile packet_mode to the ethernet device. One example: add port meter profile rfc2697 (port_id) (profile_id) (cir) (cbs) (ebs) (packet_mode) Signed-off-by: Li Zhang --- app/test-pmd/cmdline_mtr.c | 40 +++++++++++++++++++-- doc/guides/testpmd_app_ug/testpmd_funcs.rst | 31 ++++++++-------- 2 files changed, 54 insertions(+), 17 deletions(-) diff --git a/app/test-pmd/cmdline_mtr.c b/app/test-pmd/cmdline_mtr.c index bdc9ae8bfe..eff2473e7b 100644 --- a/app/test-pmd/cmdline_mtr.c +++ b/app/test-pmd/cmdline_mtr.c @@ -263,6 +263,18 @@ static void cmd_show_port_meter_cap_parsed(void *parsed_result, cap.color_aware_trtcm_rfc2698_supported); printf("cap.color_aware_trtcm_rfc4115_supported %" PRId32 "\n", cap.color_aware_trtcm_rfc4115_supported); + printf("cap.srtcm_rfc2697_byte_mode_supported %" PRId32 "\n", + cap.srtcm_rfc2697_byte_mode_supported); + printf("cap.srtcm_rfc2697_packet_mode_supported %" PRId32 "\n", + cap.srtcm_rfc2697_packet_mode_supported); + printf("cap.trtcm_rfc2698_byte_mode_supported %" PRId32 "\n", + cap.trtcm_rfc2698_byte_mode_supported); + printf("cap.trtcm_rfc2698_packet_mode_supported %" PRId32 "\n", + cap.trtcm_rfc2698_packet_mode_supported); + printf("cap.trtcm_rfc4115_byte_mode_supported %" PRId32 "\n", + cap.trtcm_rfc4115_byte_mode_supported); + printf("cap.trtcm_rfc4115_packet_mode_supported %" PRId32 "\n", + cap.trtcm_rfc4115_packet_mode_supported); printf("cap.stats_mask %" PRIx64 "\n", cap.stats_mask); } @@ -292,6 +304,7 @@ struct cmd_add_port_meter_profile_srtcm_result { uint64_t cir; uint64_t cbs; uint64_t ebs; + int packet_mode; }; cmdline_parse_token_string_t cmd_add_port_meter_profile_srtcm_add = @@ -333,6 +346,10 @@ cmdline_parse_token_num_t cmd_add_port_meter_profile_srtcm_ebs = TOKEN_NUM_INITIALIZER( struct cmd_add_port_meter_profile_srtcm_result, ebs, RTE_UINT64); +cmdline_parse_token_num_t cmd_add_port_meter_profile_srtcm_packet_mode = + TOKEN_NUM_INITIALIZER( + struct cmd_add_port_meter_profile_srtcm_result, + packet_mode, RTE_UINT32); static void cmd_add_port_meter_profile_srtcm_parsed(void *parsed_result, __rte_unused struct cmdline *cl, @@ -354,6 +371,7 @@ static void cmd_add_port_meter_profile_srtcm_parsed(void *parsed_result, mp.srtcm_rfc2697.cir = res->cir; mp.srtcm_rfc2697.cbs = res->cbs; mp.srtcm_rfc2697.ebs = res->ebs; + mp.packet_mode = res->packet_mode; ret = rte_mtr_meter_profile_add(port_id, profile_id, &mp, &error); if (ret != 0) { @@ -365,7 +383,7 @@ static void cmd_add_port_meter_profile_srtcm_parsed(void *parsed_result, cmdline_parse_inst_t cmd_add_port_meter_profile_srtcm = { .f = cmd_add_port_meter_profile_srtcm_parsed, .data = NULL, - .help_str = "add port meter profile srtcm_rfc2697 ", + .help_str = "add port meter profile srtcm_rfc2697 ", .tokens = { (void *)&cmd_add_port_meter_profile_srtcm_add, (void *)&cmd_add_port_meter_profile_srtcm_port, @@ -377,6 +395,7 @@ cmdline_parse_inst_t cmd_add_port_meter_profile_srtcm = { (void *)&cmd_add_port_meter_profile_srtcm_cir, (void *)&cmd_add_port_meter_profile_srtcm_cbs, (void *)&cmd_add_port_meter_profile_srtcm_ebs, + (void *)&cmd_add_port_meter_profile_srtcm_packet_mode, NULL, }, }; @@ -394,6 +413,7 @@ struct cmd_add_port_meter_profile_trtcm_result { uint64_t pir; uint64_t cbs; uint64_t pbs; + int packet_mode; }; cmdline_parse_token_string_t cmd_add_port_meter_profile_trtcm_add = @@ -439,6 +459,10 @@ cmdline_parse_token_num_t cmd_add_port_meter_profile_trtcm_pbs = TOKEN_NUM_INITIALIZER( struct cmd_add_port_meter_profile_trtcm_result, pbs, RTE_UINT64); +cmdline_parse_token_num_t cmd_add_port_meter_profile_trtcm_packet_mode = + TOKEN_NUM_INITIALIZER( + struct cmd_add_port_meter_profile_trtcm_result, + packet_mode, RTE_UINT32); static void cmd_add_port_meter_profile_trtcm_parsed(void *parsed_result, __rte_unused struct cmdline *cl, @@ -461,6 +485,7 @@ static void cmd_add_port_meter_profile_trtcm_parsed(void *parsed_result, mp.trtcm_rfc2698.pir = res->pir; mp.trtcm_rfc2698.cbs = res->cbs; mp.trtcm_rfc2698.pbs = res->pbs; + mp.packet_mode = res->packet_mode; ret = rte_mtr_meter_profile_add(port_id, profile_id, &mp, &error); if (ret != 0) { @@ -472,7 +497,7 @@ static void cmd_add_port_meter_profile_trtcm_parsed(void *parsed_result, cmdline_parse_inst_t cmd_add_port_meter_profile_trtcm = { .f = cmd_add_port_meter_profile_trtcm_parsed, .data = NULL, - .help_str = "add port meter profile trtcm_rfc2698 ", + .help_str = "add port meter profile trtcm_rfc2698 ", .tokens = { (void *)&cmd_add_port_meter_profile_trtcm_add, (void *)&cmd_add_port_meter_profile_trtcm_port, @@ -485,6 +510,7 @@ cmdline_parse_inst_t cmd_add_port_meter_profile_trtcm = { (void *)&cmd_add_port_meter_profile_trtcm_pir, (void *)&cmd_add_port_meter_profile_trtcm_cbs, (void *)&cmd_add_port_meter_profile_trtcm_pbs, + (void *)&cmd_add_port_meter_profile_trtcm_packet_mode, NULL, }, }; @@ -502,6 +528,7 @@ struct cmd_add_port_meter_profile_trtcm_rfc4115_result { uint64_t eir; uint64_t cbs; uint64_t ebs; + int packet_mode; }; cmdline_parse_token_string_t cmd_add_port_meter_profile_trtcm_rfc4115_add = @@ -549,6 +576,11 @@ cmdline_parse_token_num_t cmd_add_port_meter_profile_trtcm_rfc4115_ebs = TOKEN_NUM_INITIALIZER( struct cmd_add_port_meter_profile_trtcm_rfc4115_result, ebs, RTE_UINT64); +cmdline_parse_token_num_t + cmd_add_port_meter_profile_trtcm_rfc4115_packet_mode = + TOKEN_NUM_INITIALIZER( + struct cmd_add_port_meter_profile_trtcm_rfc4115_result, + packet_mode, RTE_UINT32); static void cmd_add_port_meter_profile_trtcm_rfc4115_parsed( void *parsed_result, @@ -573,6 +605,7 @@ static void cmd_add_port_meter_profile_trtcm_rfc4115_parsed( mp.trtcm_rfc4115.eir = res->eir; mp.trtcm_rfc4115.cbs = res->cbs; mp.trtcm_rfc4115.ebs = res->ebs; + mp.packet_mode = res->packet_mode; ret = rte_mtr_meter_profile_add(port_id, profile_id, &mp, &error); if (ret != 0) { @@ -584,7 +617,7 @@ static void cmd_add_port_meter_profile_trtcm_rfc4115_parsed( cmdline_parse_inst_t cmd_add_port_meter_profile_trtcm_rfc4115 = { .f = cmd_add_port_meter_profile_trtcm_rfc4115_parsed, .data = NULL, - .help_str = "add port meter profile trtcm_rfc4115 ", + .help_str = "add port meter profile trtcm_rfc4115 ", .tokens = { (void *)&cmd_add_port_meter_profile_trtcm_rfc4115_add, (void *)&cmd_add_port_meter_profile_trtcm_rfc4115_port, @@ -597,6 +630,7 @@ cmdline_parse_inst_t cmd_add_port_meter_profile_trtcm_rfc4115 = { (void *)&cmd_add_port_meter_profile_trtcm_rfc4115_eir, (void *)&cmd_add_port_meter_profile_trtcm_rfc4115_cbs, (void *)&cmd_add_port_meter_profile_trtcm_rfc4115_ebs, + (void *)&cmd_add_port_meter_profile_trtcm_rfc4115_packet_mode, NULL, }, }; diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst index f59eb8a27d..b5e52f6b1c 100644 --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst @@ -2698,14 +2698,15 @@ add port meter profile (srTCM rfc2967) Add meter profile (srTCM rfc2697) to the ethernet device:: testpmd> add port meter profile srtcm_rfc2697 (port_id) (profile_id) \ - (cir) (cbs) (ebs) + (cir) (cbs) (ebs) (packet_mode) where: * ``profile_id``: ID for the meter profile. -* ``cir``: Committed Information Rate (CIR) (bytes/second). -* ``cbs``: Committed Burst Size (CBS) (bytes). -* ``ebs``: Excess Burst Size (EBS) (bytes). +* ``cir``: Committed Information Rate (CIR) (bytes per second or packets per second). +* ``cbs``: Committed Burst Size (CBS) (bytes or packets). +* ``ebs``: Excess Burst Size (EBS) (bytes or packets). +* ``packet_mode``: Packets mode for meter profile. add port meter profile (trTCM rfc2968) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -2713,15 +2714,16 @@ add port meter profile (trTCM rfc2968) Add meter profile (srTCM rfc2698) to the ethernet device:: testpmd> add port meter profile trtcm_rfc2698 (port_id) (profile_id) \ - (cir) (pir) (cbs) (pbs) + (cir) (pir) (cbs) (pbs) (packet_mode) where: * ``profile_id``: ID for the meter profile. -* ``cir``: Committed information rate (bytes/second). -* ``pir``: Peak information rate (bytes/second). -* ``cbs``: Committed burst size (bytes). -* ``pbs``: Peak burst size (bytes). +* ``cir``: Committed information rate (bytes per second or packets per second). +* ``pir``: Peak information rate (bytes per second or packets per second). +* ``cbs``: Committed burst size (bytes or packets). +* ``pbs``: Peak burst size (bytes or packets). +* ``packet_mode``: Packets mode for meter profile. add port meter profile (trTCM rfc4115) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -2729,15 +2731,16 @@ add port meter profile (trTCM rfc4115) Add meter profile (trTCM rfc4115) to the ethernet device:: testpmd> add port meter profile trtcm_rfc4115 (port_id) (profile_id) \ - (cir) (eir) (cbs) (ebs) + (cir) (eir) (cbs) (ebs) (packet_mode) where: * ``profile_id``: ID for the meter profile. -* ``cir``: Committed information rate (bytes/second). -* ``eir``: Excess information rate (bytes/second). -* ``cbs``: Committed burst size (bytes). -* ``ebs``: Excess burst size (bytes). +* ``cir``: Committed information rate (bytes per second or packets per second). +* ``eir``: Excess information rate (bytes per second or packets per second). +* ``cbs``: Committed burst size (bytes or packets). +* ``ebs``: Excess burst size (bytes or packets). +* ``packet_mode``: Packets mode for meter profile. delete port meter profile ~~~~~~~~~~~~~~~~~~~~~~~~~