From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 7D905A059F; Sat, 11 Apr 2020 13:44:46 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 96F271C133; Sat, 11 Apr 2020 13:44:45 +0200 (CEST) Received: from mail-pf1-f194.google.com (mail-pf1-f194.google.com [209.85.210.194]) by dpdk.org (Postfix) with ESMTP id 157181C10F for ; Sat, 11 Apr 2020 13:44:44 +0200 (CEST) Received: by mail-pf1-f194.google.com with SMTP id b8so2212989pfp.8 for ; Sat, 11 Apr 2020 04:44:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=65KETF+5YoTUBoJQ0QrMKX6s+m/S6sKQLPsHvmP7jVQ=; b=YS3KyyDlk/HGXpel0MwNciVwKEbt/g5R+7W97Me2HgllxwqteI3jhoUDC5Uxv6qzUK n1Gb3kX9+d+YnnkSUjjq6Y2b7//XeJFKF36e1cauI8XUq5BN3rARnyqLgy7frC9d5LJp xa3BF6v2F4SH4wPls/AgYCVxD3c1XUfFq0IWmMAyaZX0uuKqeos+CTA3VqhnKvj+a0rW Iu+FC+cWgMJPsSjWaKd51LYGFaXokjanG47PPMO+NXfKhFpwI2lq4Zcp+sh1OA95Pnlv K8kaCIng5Ne0e82S0ZO715QJjMENAcixvc4zuwLK3J01M41BUhmCTflxfMN8WHYYdxp2 rqDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=65KETF+5YoTUBoJQ0QrMKX6s+m/S6sKQLPsHvmP7jVQ=; b=fR/HtPyRGJLGsRVb/5u9sgNAgxLJiLv5u48WDXMmJdb4XZadk7HQfUxoWmzWwuMNNM TIkZGQ7+hTNM7BIupdsWZlP6sNAJf94Ae2jtCM04QktXtDdg7Kc3OZTTjE8gg+0/00m4 Tok7ugsDO5wAoMD9k3hZOxyR+RzzKhhFOdDa3ThEkV5Gxc5zXIk1CEUug6aOhEjjmDhV 5ad5xk5oqA4ORx8y6HD26ZDrNyaxic0i+OQw/pnUfPutkRHczdED1+T+4S/4UwKsy6c8 PCpnRj9qvtXjqVZt/kCXM3+oirp6NAmNBa164ZOTa5oA8bqEe/5G2gL3GRI9qhYWcILE 0U2g== X-Gm-Message-State: AGi0PuYrI1Y2yVP7avj3KqMz88YYjAAhOM/JitInDJO+/bziZnLGCCs3 V39vkx3xp4DJRozmKEZ0XxQ= X-Google-Smtp-Source: APiQypKRMlI8H2REickY7ozaNAZLhnjaGfGHFsMPsE7VnEqJ/NIw29252NJ04NHCRWRh8a1PleInIQ== X-Received: by 2002:a63:3195:: with SMTP id x143mr8548621pgx.326.1586605482991; Sat, 11 Apr 2020 04:44:42 -0700 (PDT) Received: from hyd1588t430.marvell.com ([115.113.156.2]) by smtp.gmail.com with ESMTPSA id mg20sm4004793pjb.12.2020.04.11.04.44.40 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 11 Apr 2020 04:44:42 -0700 (PDT) From: Nithin Dabilpuram To: Cristian Dumitrescu , Thomas Monjalon , Ferruh Yigit , Andrew Rybchenko Cc: dev@dpdk.org, jerinj@marvell.com, kkanas@marvell.com, Nithin Dabilpuram Date: Sat, 11 Apr 2020 17:14:27 +0530 Message-Id: <20200411114430.18506-1-nithind1988@gmail.com> X-Mailer: git-send-email 2.8.4 In-Reply-To: <20200330160019.29674-1-ndabilpuram@marvell.com> References: <20200330160019.29674-1-ndabilpuram@marvell.com> Subject: [dpdk-dev] [PATCH v2 1/4] ethdev: add tm support for shaper config in pkt mode X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 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" From: Nithin Dabilpuram Some NIC hardware support shaper to work in packet mode i.e shaping or ratelimiting traffic is in packets per second (PPS) as opposed to default bytes per second (BPS). Hence this patch adds support to configure shared or private shaper in packet mode, provide rate in PPS and add related tm capabilities in port/level/node capability structures. This patch also updates tm port/level/node capability structures with exiting features of scheduler wfq packet mode, scheduler wfq byte mode and private/shared shaper byte mode. Signed-off-by: Nithin Dabilpuram --- v1..v2: - Add seperate capability for shaper and scheduler pktmode and bytemode. - Add packet_mode field in struct rte_tm_shaper_params to indicate packet mode shaper profile. lib/librte_ethdev/rte_tm.h | 156 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 154 insertions(+), 2 deletions(-) diff --git a/lib/librte_ethdev/rte_tm.h b/lib/librte_ethdev/rte_tm.h index f9c0cf3..38fff4c 100644 --- a/lib/librte_ethdev/rte_tm.h +++ b/lib/librte_ethdev/rte_tm.h @@ -250,6 +250,23 @@ struct rte_tm_capabilities { */ uint64_t shaper_private_rate_max; + /** Shaper private packet mode supported. When non-zero, this parameter + * indicates that there is atleast one node that can be configured + * with packet mode in it's private shaper. When shaper is configured + * in packet mode, committed/peak rate provided is interpreted + * in packets per second. + */ + int shaper_private_packet_mode_supported; + + /** Shaper private byte mode supported. When non-zero, this parameter + * indicates that there is atleast one node that can be configured + * with byte mode in it's private shaper. When shaper is configured + * in byte mode, committed/peak rate provided is interpreted in + * bytes per second. + */ + int shaper_private_byte_mode_supported; + + /** Maximum number of shared shapers. The value of zero indicates that * shared shapers are not supported. */ @@ -284,6 +301,21 @@ struct rte_tm_capabilities { */ uint64_t shaper_shared_rate_max; + /** Shaper shared packet mode supported. When non-zero, this parameter + * indicates a shared shaper can be configured with packet mode. + * When shared shaper is configured in packet mode, committed/peak rate + * provided is interpreted in packets per second. + */ + int shaper_shared_packet_mode_supported; + + /** Shaper shared byte mode supported. When non-zero, this parameter + * indicates that a shared shaper can be configured with byte mode. + * When shared shaper is configured in byte mode, committed/peak rate + * provided is interpreted in bytes per second. + */ + int shaper_shared_byte_mode_supported; + + /** Minimum value allowed for packet length adjustment for any private * or shared shaper. */ @@ -339,6 +371,22 @@ struct rte_tm_capabilities { */ uint32_t sched_wfq_weight_max; + /** WFQ packet mode supported. When non-zero, this parameter indicates + * that there is at least one non-leaf node that supports packet mode + * for WFQ among its children. WFQ weights will be applied against + * packet count for scheduling children when a non-leaf node + * is configured appropriately. + */ + int sched_wfq_packet_mode_supported; + + /** WFQ byte mode supported. When non-zero, this parameter indicates + * that there is at least one non-leaf node that supports byte mode + * for WFQ among its children. WFQ weights will be applied against + * bytes for scheduling children when a non-leaf node is configured + * appropriately. + */ + int sched_wfq_byte_mode_supported; + /** WRED packet mode support. When non-zero, this parameter indicates * that there is at least one leaf node that supports the WRED packet * mode, which might not be true for all the leaf nodes. In packet @@ -485,6 +533,24 @@ struct rte_tm_level_capabilities { */ uint64_t shaper_private_rate_max; + /** Shaper private packet mode supported. When non-zero, + * this parameter indicates there is atleast one + * non-leaf node at this level that can be configured + * with packet mode in its private shaper. When private + * shaper is configured in packet mode, committed/peak + * rate provided is interpreted in packets per second. + */ + int shaper_private_packet_mode_supported; + + /** Shaper private byte mode supported. When non-zero, + * this parameter indicates there is atleast one + * non-leaf node at this level that can be configured + * with byte mode in its private shaper. When private + * shaper is configured in byte mode, committed/peak + * rate provided is interpreted in bytes per second. + */ + int shaper_private_byte_mode_supported; + /** Maximum number of shared shapers that any non-leaf * node on this level can be part of. The value of zero * indicates that shared shapers are not supported by @@ -554,6 +620,25 @@ struct rte_tm_level_capabilities { */ uint32_t sched_wfq_weight_max; + /** WFQ packet mode supported. When non-zero, this + * parameter indicates that there is at least one + * non-leaf node at this level that supports packet + * mode for WFQ among its children. WFQ weights will + * be applied against packet count for scheduling + * children when a non-leaf node is configured + * appropriately. + */ + int sched_wfq_packet_mode_supported; + + /** WFQ byte mode supported. When non-zero, this + * parameter indicates that there is at least one + * non-leaf node at this level that supports byte + * mode for WFQ among its children. WFQ weights will + * be applied against bytes for scheduling children + * when a non-leaf node is configured appropriately. + */ + int sched_wfq_byte_mode_supported; + /** Mask of statistics counter types supported by the * non-leaf nodes on this level. Every supported * statistics counter type is supported by at least one @@ -596,6 +681,24 @@ struct rte_tm_level_capabilities { */ uint64_t shaper_private_rate_max; + /** Shaper private packet mode supported. When non-zero, + * this parameter indicates there is atleast one leaf + * node at this level that can be configured with + * packet mode in its private shaper. When private + * shaper is configured in packet mode, committed/peak + * rate provided is interpreted in packets per second. + */ + int shaper_private_packet_mode_supported; + + /** Shaper private byte mode supported. When non-zero, + * this parameter indicates there is atleast one leaf + * node at this level that can be configured with + * byte mode in its private shaper. When private shaper + * is configured in byte mode, committed/peak rate + * provided is interpreted in bytes per second. + */ + int shaper_private_byte_mode_supported; + /** Maximum number of shared shapers that any leaf node * on this level can be part of. The value of zero * indicates that shared shapers are not supported by @@ -686,6 +789,20 @@ struct rte_tm_node_capabilities { */ uint64_t shaper_private_rate_max; + /** Shaper private packet mode supported. When non-zero, this parameter + * indicates private shaper of current node can be configured with + * packet mode. When configured in packet mode, committed/peak rate + * provided is interpreted in packets per second. + */ + int shaper_private_packet_mode_supported; + + /** Shaper private byte mode supported. When non-zero, this parameter + * indicates private shaper of current node can be configured with + * byte mode. When configured in byte mode, committed/peak rate + * provided is interpreted in bytes per second. + */ + int shaper_private_byte_mode_supported; + /** Maximum number of shared shapers the current node can be part of. * The value of zero indicates that shared shapers are not supported by * the current node. @@ -735,6 +852,23 @@ struct rte_tm_node_capabilities { * WFQ weight, so WFQ is reduced to FQ. */ uint32_t sched_wfq_weight_max; + + /** WFQ packet mode supported. When non-zero, this + * parameter indicates that current node supports packet + * mode for WFQ among its children. WFQ weights will be + * applied against packet count for scheduling children + * when configured appropriately. + */ + int sched_wfq_packet_mode_supported; + + /** WFQ byte mode supported. When non-zero, this + * parameter indicates that current node supports byte + * mode for WFQ among its children. WFQ weights will be + * applied against bytes for scheduling children when + * configured appropriately. + */ + int sched_wfq_byte_mode_supported; + } nonleaf; /** Items valid only for leaf nodes. */ @@ -836,10 +970,10 @@ struct rte_tm_wred_params { * Token bucket */ struct rte_tm_token_bucket { - /** Token bucket rate (bytes per second) */ + /** Token bucket rate (bytes per second or packets per second) */ uint64_t rate; - /** Token bucket size (bytes), a.k.a. max burst size */ + /** Token bucket size (bytes or packets), a.k.a. max burst size */ uint64_t size; }; @@ -860,6 +994,11 @@ struct rte_tm_token_bucket { * Dual rate shapers use both the committed and the peak token buckets. The * rate of the peak bucket has to be bigger than zero, as well as greater than * or equal to the rate of the committed bucket. + * + * @see struct rte_tm_capabilities::shaper_private_packet_mode_supported + * @see struct rte_tm_capabilities::shaper_private_byte_mode_supported + * @see struct rte_tm_capabilities::shaper_shared_packet_mode_supported + * @see struct rte_tm_capabilities::shaper_shared_byte_mode_supported */ struct rte_tm_shaper_params { /** Committed token bucket */ @@ -874,6 +1013,17 @@ struct rte_tm_shaper_params { * RTE_TM_ETH_FRAMING_OVERHEAD_FCS). */ int32_t pkt_length_adjust; + + /** When zero, the private or shared shaper that is associated to this + * profile works in byte mode and hence *rate* and *size* fields in + * both token bucket configurations are specified in bytes per second + * and bytes respectively. + * When non-zero, that private or shared shaper works in packet mode and + * hence *rate* and *size* fields in both token bucket configurations + * are specified in packets per second and packets respectively. In + * packet mode, *pkt_length_adjust* is ignored. + */ + int packet_mode; }; /** @@ -925,6 +1075,8 @@ struct rte_tm_node_params { * When non-NULL, it points to a pre-allocated array of * *n_sp_priorities* values, with non-zero value for * byte-mode and zero for packet-mode. + * @see struct rte_tm_node_capabilities::sched_wfq_packet_mode_supported + * @see struct rte_tm_node_capabilities::sched_wfq_byte_mode_supported */ int *wfq_weight_mode; -- 2.8.4