From patchwork Thu Dec 1 10:26:23 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Wilczynski, Michal" X-Patchwork-Id: 13061152 X-Patchwork-Delegate: dsahern@gmail.com Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 30DD2C43217 for ; Thu, 1 Dec 2022 10:28:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230334AbiLAK2N (ORCPT ); Thu, 1 Dec 2022 05:28:13 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35820 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230361AbiLAK2J (ORCPT ); Thu, 1 Dec 2022 05:28:09 -0500 Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E16E32CCB3 for ; Thu, 1 Dec 2022 02:27:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1669890479; x=1701426479; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=eXn6Yvb5MA1RZy55IvPtGrVfS3vqrD8npS+FVGk1oK0=; b=Ak1KXtVy6HOZF/I8DbViZHGFLOUVLHnPtl6EPaRU7elRMGnY47qEla7V pppjxcC/anTv1eOGWc1utRer7OMNK5s31O01889uOxXfipOSLfgDOxX0n 6MBj2uqNhf63nDpC/G8GXRhKoxVFo5owChjWyxYzK7zp8tskBFzsgEEb9 IkGzbbIES2JyqbHa2PeNYTa5Yw1ALdBPV/VV1/gD/1vG7BX9m3a0jeW3l B5BAiuq90QdIr9f3BXpN8iXUSPtGCx4VLJJ8O+rf7+y66m0la/yCao7qm VOCINZHOJUD5eUzBBx7AmW7+pgff7/tDsHwqsV7McewqCejGmgNL+ovkR A==; X-IronPort-AV: E=McAfee;i="6500,9779,10547"; a="313277998" X-IronPort-AV: E=Sophos;i="5.96,209,1665471600"; d="scan'208";a="313277998" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Dec 2022 02:27:59 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10547"; a="769184479" X-IronPort-AV: E=Sophos;i="5.96,209,1665471600"; d="scan'208";a="769184479" Received: from unknown (HELO fedora.igk.intel.com) ([10.123.220.6]) by orsmga004-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Dec 2022 02:27:56 -0800 From: Michal Wilczynski To: netdev@vger.kernel.org Cc: alexandr.lobakin@intel.com, przemyslaw.kitszel@intel.com, jiri@resnulli.us, wojciech.drewek@intel.com, dsahern@gmail.com, stephen@networkplumber.org, Michal Wilczynski Subject: [PATCH iproute2-next v2 1/4] devlink: Add uapi changes for tx_priority and tx_weight Date: Thu, 1 Dec 2022 11:26:23 +0100 Message-Id: <20221201102626.56390-2-michal.wilczynski@intel.com> X-Mailer: git-send-email 2.37.2 In-Reply-To: <20221201102626.56390-1-michal.wilczynski@intel.com> References: <20221201102626.56390-1-michal.wilczynski@intel.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: dsahern@gmail.com Per discussion [1] I'm putting the uapi changes in separate commit. Those changes are already merged to net-next [2]. [1] https://lore.kernel.org/netdev/48df4e83-a9b8-11db-aeaf-2015666af5a5@gmail.com/ [2] https://lore.kernel.org/netdev/20221115104825.172668-1-michal.wilczynski@intel.com/ Signed-off-by: Michal Wilczynski --- include/uapi/linux/devlink.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/include/uapi/linux/devlink.h b/include/uapi/linux/devlink.h index 0224b8bd49b2..b6b058e4bdb2 100644 --- a/include/uapi/linux/devlink.h +++ b/include/uapi/linux/devlink.h @@ -607,6 +607,9 @@ enum devlink_attr { DEVLINK_ATTR_SELFTESTS, /* nested */ + DEVLINK_ATTR_RATE_TX_PRIORITY, /* u32 */ + DEVLINK_ATTR_RATE_TX_WEIGHT, /* u32 */ + /* add new attributes above here, update the policy in devlink.c */ __DEVLINK_ATTR_MAX, From patchwork Thu Dec 1 10:26:24 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Wilczynski, Michal" X-Patchwork-Id: 13061153 X-Patchwork-Delegate: dsahern@gmail.com Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id F3CE2C4321E for ; Thu, 1 Dec 2022 10:28:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230314AbiLAK2T (ORCPT ); Thu, 1 Dec 2022 05:28:19 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35408 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230372AbiLAK2L (ORCPT ); Thu, 1 Dec 2022 05:28:11 -0500 Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1B5A355CB6 for ; Thu, 1 Dec 2022 02:28:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1669890484; x=1701426484; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=6Q84uwQYQDZ8UVWa0FNGN4rCnZZ8GKp3KP4kP8monbU=; b=Ywy9w3qPCele2fARzTyTVPUG26NjzoW/gRfVwcNZt05N0js6KCY9FFfK CGnLav/xiBP0NyBmA5MDKUWiX5p8WjbjEWlQZmhOT6lCt2hQp1Pl5YACD hwXaW1NAAzFwuvfTeAlFXzC4qXFynFItvMqkViGwjZ36KAoB7oKT5gK0Y bf8b5IKuEhRTUmUf3NApwdbbHfpFDUtO9FLKyySI3BpyuNTJeCeLK9UVd rG6oniMz4sEngzIDbtqdgGyBkfxe/JJAigPTzoWzE+XZi1FSX+6zqqcry uB8KSGei96gWpyArDwPRPPRLTIH7V/3LY4gIzlkrZABM0dbOr6xeDAQlP w==; X-IronPort-AV: E=McAfee;i="6500,9779,10547"; a="313278008" X-IronPort-AV: E=Sophos;i="5.96,209,1665471600"; d="scan'208";a="313278008" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Dec 2022 02:28:03 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10547"; a="769184519" X-IronPort-AV: E=Sophos;i="5.96,209,1665471600"; d="scan'208";a="769184519" Received: from unknown (HELO fedora.igk.intel.com) ([10.123.220.6]) by orsmga004-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Dec 2022 02:28:01 -0800 From: Michal Wilczynski To: netdev@vger.kernel.org Cc: alexandr.lobakin@intel.com, przemyslaw.kitszel@intel.com, jiri@resnulli.us, wojciech.drewek@intel.com, dsahern@gmail.com, stephen@networkplumber.org, Michal Wilczynski Subject: [PATCH iproute2-next v2 2/4] devlink: Introduce new attribute 'tx_priority' to devlink-rate Date: Thu, 1 Dec 2022 11:26:24 +0100 Message-Id: <20221201102626.56390-3-michal.wilczynski@intel.com> X-Mailer: git-send-email 2.37.2 In-Reply-To: <20221201102626.56390-1-michal.wilczynski@intel.com> References: <20221201102626.56390-1-michal.wilczynski@intel.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: dsahern@gmail.com To fully utilize hierarchical QoS algorithm new attribute 'tx_priority' needs to be introduced. Priority attribute allows for usage of strict priority arbiter among siblings. This arbitration scheme attempts to schedule nodes based on their priority as long as the nodes remain within their bandwidth limit. Introduce ability to configure tx_priority from devlink userspace utility. Make the new attribute optional. Example commands: $ devlink port function rate add pci/0000:4b:00.0/node_custom \ tx_priority 5 parent node_0 $ devlink port function rate set pci/0000:4b:00.0/2 tx_priority 5 Signed-off-by: Michal Wilczynski Reviewed-by: Wojciech Drewek --- devlink/devlink.c | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/devlink/devlink.c b/devlink/devlink.c index 8aefa101b2f8..479d153e2a5e 100644 --- a/devlink/devlink.c +++ b/devlink/devlink.c @@ -295,6 +295,7 @@ static void ifname_map_free(struct ifname_map *ifname_map) #define DL_OPT_LINECARD BIT(52) #define DL_OPT_LINECARD_TYPE BIT(53) #define DL_OPT_SELFTESTS BIT(54) +#define DL_OPT_PORT_FN_RATE_TX_PRIORITY BIT(55) struct dl_opts { uint64_t present; /* flags of present items */ @@ -353,6 +354,7 @@ struct dl_opts { uint16_t rate_type; uint64_t rate_tx_share; uint64_t rate_tx_max; + uint32_t rate_tx_priority; char *rate_node_name; const char *rate_parent_node; uint32_t linecard_index; @@ -2048,6 +2050,13 @@ static int dl_argv_parse(struct dl *dl, uint64_t o_required, if (err) return err; o_found |= DL_OPT_PORT_FN_RATE_TX_MAX; + } else if (dl_argv_match(dl, "tx_priority") && + (o_all & DL_OPT_PORT_FN_RATE_TX_PRIORITY)) { + dl_arg_inc(dl); + err = dl_argv_uint32_t(dl, &opts->rate_tx_priority); + if (err) + return err; + o_found |= DL_OPT_PORT_FN_RATE_TX_PRIORITY; } else if (dl_argv_match(dl, "parent") && (o_all & DL_OPT_PORT_FN_RATE_PARENT)) { dl_arg_inc(dl); @@ -2316,6 +2325,9 @@ static void dl_opts_put(struct nlmsghdr *nlh, struct dl *dl) if (opts->present & DL_OPT_PORT_FN_RATE_TX_SHARE) mnl_attr_put_u64(nlh, DEVLINK_ATTR_RATE_TX_SHARE, opts->rate_tx_share); + if (opts->present & DL_OPT_PORT_FN_RATE_TX_PRIORITY) + mnl_attr_put_u32(nlh, DEVLINK_ATTR_RATE_TX_PRIORITY, + opts->rate_tx_priority); if (opts->present & DL_OPT_PORT_FN_RATE_TX_MAX) mnl_attr_put_u64(nlh, DEVLINK_ATTR_RATE_TX_MAX, opts->rate_tx_max); @@ -4936,6 +4948,13 @@ static void pr_out_port_fn_rate(struct dl *dl, struct nlattr **tb) print_rate(dl->use_iec, PRINT_ANY, "tx_max", " tx_max %s", rate); } + if (tb[DEVLINK_ATTR_RATE_TX_PRIORITY]) { + uint32_t priority = + mnl_attr_get_u32(tb[DEVLINK_ATTR_RATE_TX_PRIORITY]); + if (priority) + print_uint(PRINT_ANY, "tx_priority", + " tx_priority %u", priority); + } if (tb[DEVLINK_ATTR_RATE_PARENT_NODE_NAME]) { const char *parent = mnl_attr_get_str(tb[DEVLINK_ATTR_RATE_PARENT_NODE_NAME]); @@ -4967,11 +4986,12 @@ static void cmd_port_fn_rate_help(void) pr_err("Usage: devlink port function rate help\n"); pr_err(" devlink port function rate show [ DEV/{ PORT_INDEX | NODE_NAME } ]\n"); pr_err(" devlink port function rate add DEV/NODE_NAME\n"); - pr_err(" [ tx_share VAL ][ tx_max VAL ][ { parent NODE_NAME | noparent } ]\n"); + pr_err(" [ tx_share VAL ][ tx_max VAL ][ tx_priority N ][ { parent NODE_NAME | noparent } ]\n"); pr_err(" devlink port function rate del DEV/NODE_NAME\n"); pr_err(" devlink port function rate set DEV/{ PORT_INDEX | NODE_NAME }\n"); - pr_err(" [ tx_share VAL ][ tx_max VAL ][ { parent NODE_NAME | noparent } ]\n\n"); + pr_err(" [ tx_share VAL ][ tx_max VAL ][ tx_priority N ][ { parent NODE_NAME | noparent } ]\n\n"); pr_err(" VAL - float or integer value in units of bits or bytes per second (bit|bps)\n"); + pr_err(" N - integer representing priority of the node among siblings\n"); pr_err(" and SI (k-, m-, g-, t-) or IEC (ki-, mi-, gi-, ti-) case-insensitive prefix.\n"); pr_err(" Bare number, means bits per second, is possible.\n\n"); pr_err(" For details refer to devlink-rate(8) man page.\n"); @@ -5030,7 +5050,8 @@ static int cmd_port_fn_rate_add(struct dl *dl) int err; err = dl_argv_parse(dl, DL_OPT_PORT_FN_RATE_NODE_NAME, - DL_OPT_PORT_FN_RATE_TX_SHARE | DL_OPT_PORT_FN_RATE_TX_MAX); + DL_OPT_PORT_FN_RATE_TX_SHARE | DL_OPT_PORT_FN_RATE_TX_MAX | + DL_OPT_PORT_FN_RATE_TX_PRIORITY); if (err) return err; @@ -5084,6 +5105,9 @@ static int port_fn_get_rates_cb(const struct nlmsghdr *nlh, void *data) if (tb[DEVLINK_ATTR_RATE_TX_MAX]) opts->rate_tx_max = mnl_attr_get_u64(tb[DEVLINK_ATTR_RATE_TX_MAX]); + if (tb[DEVLINK_ATTR_RATE_TX_PRIORITY]) + opts->rate_tx_priority = + mnl_attr_get_u32(tb[DEVLINK_ATTR_RATE_TX_PRIORITY]); return MNL_CB_OK; } @@ -5097,6 +5121,7 @@ static int cmd_port_fn_rate_set(struct dl *dl) DL_OPT_PORT_FN_RATE_NODE_NAME, DL_OPT_PORT_FN_RATE_TX_SHARE | DL_OPT_PORT_FN_RATE_TX_MAX | + DL_OPT_PORT_FN_RATE_TX_PRIORITY | DL_OPT_PORT_FN_RATE_PARENT); if (err) return err; From patchwork Thu Dec 1 10:26:25 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Wilczynski, Michal" X-Patchwork-Id: 13061154 X-Patchwork-Delegate: dsahern@gmail.com Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4701EC43217 for ; Thu, 1 Dec 2022 10:28:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230135AbiLAK21 (ORCPT ); Thu, 1 Dec 2022 05:28:27 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35916 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229940AbiLAK2L (ORCPT ); Thu, 1 Dec 2022 05:28:11 -0500 Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AEED34C266 for ; Thu, 1 Dec 2022 02:28:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1669890487; x=1701426487; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=7S/cIJHi5VukoIjgJADGZU8OdAX4F0jMjOiOmCL5dtk=; b=Wc0k+KuvgTJ2+ZHq5oCIDy9sMPzY+5E4YEJO44/P6DHkeY44ARK1dc10 QWhfK5uamdjaivA13UNdNFQvz8rK/LqDo/1J54kBkw18KS48Dg83NYlD3 6uqdHUuwVIOOG7xI0fG/TZ9H6N6oHMvspmw/HwSfiPVKQFhoR/S4SunPR J9FP7g3l1+S40R/KfQwiKEGxpU7QHz1mXDghkkPYiXMytKogK8hNYbuvZ 5uNx7tXWtDx8ZFl5Vv1KxfukNjPZ5VC9Y6BxLIDMvqmIs78rTJTe/LqAR em4ImQrtr9phLZ9krd7s2/kCJU32uA7oHGdQlYDpbzoDq+N+o8Q3ryE/s A==; X-IronPort-AV: E=McAfee;i="6500,9779,10547"; a="313278014" X-IronPort-AV: E=Sophos;i="5.96,209,1665471600"; d="scan'208";a="313278014" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Dec 2022 02:28:07 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10547"; a="769184536" X-IronPort-AV: E=Sophos;i="5.96,209,1665471600"; d="scan'208";a="769184536" Received: from unknown (HELO fedora.igk.intel.com) ([10.123.220.6]) by orsmga004-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Dec 2022 02:28:04 -0800 From: Michal Wilczynski To: netdev@vger.kernel.org Cc: alexandr.lobakin@intel.com, przemyslaw.kitszel@intel.com, jiri@resnulli.us, wojciech.drewek@intel.com, dsahern@gmail.com, stephen@networkplumber.org, Michal Wilczynski Subject: [PATCH iproute2-next v2 3/4] devlink: Introduce new attribute 'tx_weight' to devlink-rate Date: Thu, 1 Dec 2022 11:26:25 +0100 Message-Id: <20221201102626.56390-4-michal.wilczynski@intel.com> X-Mailer: git-send-email 2.37.2 In-Reply-To: <20221201102626.56390-1-michal.wilczynski@intel.com> References: <20221201102626.56390-1-michal.wilczynski@intel.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: dsahern@gmail.com To fully utilize hierarchical QoS algorithm new attribute 'tx_weight' needs to be introduced. Weight attribute allows for usage of Weighted Fair Queuing arbitration scheme among siblings. This arbitration scheme can be used simultaneously with the strict priority. Introduce ability to configure tx_weight from devlink userspace utility. Make the new attribute optional. Example commands: $ devlink port function rate add pci/0000:4b:00.0/node_custom \ tx_weight 50 parent node_0 $ devlink port function rate set pci/0000:4b:00.0/2 tx_weight 20 Signed-off-by: Michal Wilczynski Reviewed-by: Wojciech Drewek --- devlink/devlink.c | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/devlink/devlink.c b/devlink/devlink.c index 479d153e2a5e..536db5c9a009 100644 --- a/devlink/devlink.c +++ b/devlink/devlink.c @@ -296,6 +296,7 @@ static void ifname_map_free(struct ifname_map *ifname_map) #define DL_OPT_LINECARD_TYPE BIT(53) #define DL_OPT_SELFTESTS BIT(54) #define DL_OPT_PORT_FN_RATE_TX_PRIORITY BIT(55) +#define DL_OPT_PORT_FN_RATE_TX_WEIGHT BIT(56) struct dl_opts { uint64_t present; /* flags of present items */ @@ -355,6 +356,7 @@ struct dl_opts { uint64_t rate_tx_share; uint64_t rate_tx_max; uint32_t rate_tx_priority; + uint32_t rate_tx_weight; char *rate_node_name; const char *rate_parent_node; uint32_t linecard_index; @@ -2057,6 +2059,13 @@ static int dl_argv_parse(struct dl *dl, uint64_t o_required, if (err) return err; o_found |= DL_OPT_PORT_FN_RATE_TX_PRIORITY; + } else if (dl_argv_match(dl, "tx_weight") && + (o_all & DL_OPT_PORT_FN_RATE_TX_WEIGHT)) { + dl_arg_inc(dl); + err = dl_argv_uint32_t(dl, &opts->rate_tx_weight); + if (err) + return err; + o_found |= DL_OPT_PORT_FN_RATE_TX_WEIGHT; } else if (dl_argv_match(dl, "parent") && (o_all & DL_OPT_PORT_FN_RATE_PARENT)) { dl_arg_inc(dl); @@ -2328,6 +2337,9 @@ static void dl_opts_put(struct nlmsghdr *nlh, struct dl *dl) if (opts->present & DL_OPT_PORT_FN_RATE_TX_PRIORITY) mnl_attr_put_u32(nlh, DEVLINK_ATTR_RATE_TX_PRIORITY, opts->rate_tx_priority); + if (opts->present & DL_OPT_PORT_FN_RATE_TX_WEIGHT) + mnl_attr_put_u32(nlh, DEVLINK_ATTR_RATE_TX_WEIGHT, + opts->rate_tx_weight); if (opts->present & DL_OPT_PORT_FN_RATE_TX_MAX) mnl_attr_put_u64(nlh, DEVLINK_ATTR_RATE_TX_MAX, opts->rate_tx_max); @@ -4955,6 +4967,13 @@ static void pr_out_port_fn_rate(struct dl *dl, struct nlattr **tb) print_uint(PRINT_ANY, "tx_priority", " tx_priority %u", priority); } + if (tb[DEVLINK_ATTR_RATE_TX_WEIGHT]) { + uint32_t weight = + mnl_attr_get_u32(tb[DEVLINK_ATTR_RATE_TX_WEIGHT]); + if (weight) + print_uint(PRINT_ANY, "tx_weight", + " tx_weight %u", weight); + } if (tb[DEVLINK_ATTR_RATE_PARENT_NODE_NAME]) { const char *parent = mnl_attr_get_str(tb[DEVLINK_ATTR_RATE_PARENT_NODE_NAME]); @@ -4986,12 +5005,12 @@ static void cmd_port_fn_rate_help(void) pr_err("Usage: devlink port function rate help\n"); pr_err(" devlink port function rate show [ DEV/{ PORT_INDEX | NODE_NAME } ]\n"); pr_err(" devlink port function rate add DEV/NODE_NAME\n"); - pr_err(" [ tx_share VAL ][ tx_max VAL ][ tx_priority N ][ { parent NODE_NAME | noparent } ]\n"); + pr_err(" [ tx_share VAL ][ tx_max VAL ][ tx_priority N ][ tx_weight N ][ { parent NODE_NAME | noparent } ]\n"); pr_err(" devlink port function rate del DEV/NODE_NAME\n"); pr_err(" devlink port function rate set DEV/{ PORT_INDEX | NODE_NAME }\n"); - pr_err(" [ tx_share VAL ][ tx_max VAL ][ tx_priority N ][ { parent NODE_NAME | noparent } ]\n\n"); + pr_err(" [ tx_share VAL ][ tx_max VAL ][ tx_priority N ][ tx_weight N ][ { parent NODE_NAME | noparent } ]\n\n"); pr_err(" VAL - float or integer value in units of bits or bytes per second (bit|bps)\n"); - pr_err(" N - integer representing priority of the node among siblings\n"); + pr_err(" N - integer representing priority/weight of the node among siblings\n"); pr_err(" and SI (k-, m-, g-, t-) or IEC (ki-, mi-, gi-, ti-) case-insensitive prefix.\n"); pr_err(" Bare number, means bits per second, is possible.\n\n"); pr_err(" For details refer to devlink-rate(8) man page.\n"); @@ -5051,7 +5070,8 @@ static int cmd_port_fn_rate_add(struct dl *dl) err = dl_argv_parse(dl, DL_OPT_PORT_FN_RATE_NODE_NAME, DL_OPT_PORT_FN_RATE_TX_SHARE | DL_OPT_PORT_FN_RATE_TX_MAX | - DL_OPT_PORT_FN_RATE_TX_PRIORITY); + DL_OPT_PORT_FN_RATE_TX_PRIORITY | + DL_OPT_PORT_FN_RATE_TX_WEIGHT); if (err) return err; @@ -5108,6 +5128,9 @@ static int port_fn_get_rates_cb(const struct nlmsghdr *nlh, void *data) if (tb[DEVLINK_ATTR_RATE_TX_PRIORITY]) opts->rate_tx_priority = mnl_attr_get_u32(tb[DEVLINK_ATTR_RATE_TX_PRIORITY]); + if (tb[DEVLINK_ATTR_RATE_TX_WEIGHT]) + opts->rate_tx_weight = + mnl_attr_get_u32(tb[DEVLINK_ATTR_RATE_TX_WEIGHT]); return MNL_CB_OK; } @@ -5122,6 +5145,7 @@ static int cmd_port_fn_rate_set(struct dl *dl) DL_OPT_PORT_FN_RATE_TX_SHARE | DL_OPT_PORT_FN_RATE_TX_MAX | DL_OPT_PORT_FN_RATE_TX_PRIORITY | + DL_OPT_PORT_FN_RATE_TX_WEIGHT | DL_OPT_PORT_FN_RATE_PARENT); if (err) return err; From patchwork Thu Dec 1 10:26:26 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Wilczynski, Michal" X-Patchwork-Id: 13061155 X-Patchwork-Delegate: dsahern@gmail.com Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 80487C47088 for ; Thu, 1 Dec 2022 10:28:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230427AbiLAK23 (ORCPT ); Thu, 1 Dec 2022 05:28:29 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35820 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230309AbiLAK2M (ORCPT ); Thu, 1 Dec 2022 05:28:12 -0500 Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9897A2C105 for ; Thu, 1 Dec 2022 02:28:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1669890491; x=1701426491; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=mc7Od7XYGYoGaurxyko9c2tZRfh+P5cEKjX66w/8Ywc=; b=CX4WLXKsLZkuLvJMcyUpU9vsSuyB40QNHggPycPx9SOxGTG6arSudMYm /XRCBIQADx0GPAqcjJS4VLPI9VeJOMjdv9LjkfQwQVVJFWQXjFbTo/n5o 1gacZ5Vb6JkomqKUxL5v8JOHXjSrufH4+QLFL62o3CR/X8kZEaBXm6jss aBKafnSome28zWeak57lM6VhfMZvcifxab2ZJ4Gm6w+Dhb7YEHrG0xtyM p7NZQLu31y7A2w+/SH3fLfaWn9CvjCcn8uUC8Q+U9MqL8V4LFQL0Amx8L scjFqND3S7wyNuq1TfC3rLJn9EZQAOG2tTjC2zq9dL6AuqRST7T8wzMMC Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10547"; a="313278028" X-IronPort-AV: E=Sophos;i="5.96,209,1665471600"; d="scan'208";a="313278028" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Dec 2022 02:28:11 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10547"; a="769184577" X-IronPort-AV: E=Sophos;i="5.96,209,1665471600"; d="scan'208";a="769184577" Received: from unknown (HELO fedora.igk.intel.com) ([10.123.220.6]) by orsmga004-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Dec 2022 02:28:08 -0800 From: Michal Wilczynski To: netdev@vger.kernel.org Cc: alexandr.lobakin@intel.com, przemyslaw.kitszel@intel.com, jiri@resnulli.us, wojciech.drewek@intel.com, dsahern@gmail.com, stephen@networkplumber.org, Michal Wilczynski Subject: [PATCH iproute2-next v2 4/4] devlink: Add documentation for tx_prority and tx_weight Date: Thu, 1 Dec 2022 11:26:26 +0100 Message-Id: <20221201102626.56390-5-michal.wilczynski@intel.com> X-Mailer: git-send-email 2.37.2 In-Reply-To: <20221201102626.56390-1-michal.wilczynski@intel.com> References: <20221201102626.56390-1-michal.wilczynski@intel.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: dsahern@gmail.com New netlink attributes tx_priority and tx_weight were added. Update the man page for devlink-rate to account for new attributes. Signed-off-by: Michal Wilczynski Reviewed-by: Wojciech Drewek --- man/man8/devlink-rate.8 | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/man/man8/devlink-rate.8 b/man/man8/devlink-rate.8 index cc2f50c38619..bcec3c31673a 100644 --- a/man/man8/devlink-rate.8 +++ b/man/man8/devlink-rate.8 @@ -26,12 +26,16 @@ devlink-rate \- devlink rate management .RI "{ " DEV/PORT_INDEX " | " DEV/NODE_NAME " } " .RB [ " tx_share \fIVALUE " ] .RB [ " tx_max \fIVALUE " ] +.RB [ " tx_priority \fIN " ] +.RB [ " tx_weight \fIN " ] .RB "[ {" " parent \fINODE_NAME " | " noparent " "} ]" .ti -8 .BI "devlink port function rate add " DEV/NODE_NAME .RB [ " tx_share \fIVALUE " ] .RB [ " tx_max \fIVALUE " ] +.RB [ " tx_priority \fIN " ] +.RB [ " tx_weight \fIN " ] .RB "[ {" " parent \fINODE_NAME " | " noparent " "} ]" .ti -8 @@ -83,6 +87,20 @@ rate group. .PP .BI tx_max " VALUE" - specifies maximum tx rate value. +.PP +.BI tx_priority " N" +- allows for usage of strict priority arbiter among siblings. This arbitration +scheme attempts to schedule nodes based on their priority as long as the nodes +remain within their bandwidth limit. The higher the priority the higher the +probability that the node will get selected for scheduling. +.PP +.BI tx_weight " N" +- allows for usage of Weighted Fair Queuing arbitration scheme among siblings. +This arbitration scheme can be used simultaneously with the strict priority. +As a node is configured with a higher rate it gets more BW relative to it's +siblings. Values are relative like a percentage points, they basically tell +how much BW should node take relative to it's siblings. +.PP .TP 8 .I VALUE These parameter accept a floating point number, possibly followed by either a @@ -123,6 +141,10 @@ To specify in IEC units, replace the SI prefix (k-, m-, g-, t-) with IEC prefix (ki-, mi-, gi- and ti-) respectively. Input is case-insensitive. .RE .PP +.TP 8 +.I N +These parameter accept integer meaning weight or priority of a node. +.PP .BI parent " NODE_NAME \fR| " noparent - set rate object parent to existing node with name \fINODE_NAME\fR or unset parent. Rate limits of the parent node applied to all it's children. Actual