From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 01C3345C06; Tue, 29 Oct 2024 02:49:20 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9B0B54014F; Tue, 29 Oct 2024 02:49:19 +0100 (CET) Received: from szxga07-in.huawei.com (szxga07-in.huawei.com [45.249.212.35]) by mails.dpdk.org (Postfix) with ESMTP id 83F6140144 for ; Tue, 29 Oct 2024 02:49:17 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.88.163]) by szxga07-in.huawei.com (SkyGuard) with ESMTP id 4XctRz0Gsgz1SDRK; Tue, 29 Oct 2024 09:47:43 +0800 (CST) Received: from kwepemm600004.china.huawei.com (unknown [7.193.23.242]) by mail.maildlp.com (Postfix) with ESMTPS id F188D180019; Tue, 29 Oct 2024 09:49:13 +0800 (CST) Received: from [10.67.121.59] (10.67.121.59) by kwepemm600004.china.huawei.com (7.193.23.242) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Tue, 29 Oct 2024 09:49:13 +0800 Message-ID: <75651ad4-fae1-588f-2c3c-f987581dba3e@huawei.com> Date: Tue, 29 Oct 2024 09:49:12 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.2.0 Subject: Re: [PATCH v2 2/2] net/bonding: add command to set dedicated queue size To: Chaoyong He , CC: , Long Wu , Peng Zhang References: <20240624020355.3712965-1-chaoyong.he@corigine.com> <20241011032412.3672788-1-chaoyong.he@corigine.com> <20241011032412.3672788-3-chaoyong.he@corigine.com> From: "lihuisong (C)" In-Reply-To: <20241011032412.3672788-3-chaoyong.he@corigine.com> Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 8bit X-Originating-IP: [10.67.121.59] X-ClientProxiedBy: dggems704-chm.china.huawei.com (10.3.19.181) To kwepemm600004.china.huawei.com (7.193.23.242) 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 Very useful, Acked-by: Huisong Li 在 2024/10/11 11:24, Chaoyong He 写道: > From: Long Wu > > The testpmd application can not modify the value of > dedicated hardware Rx/Tx queue size, and hardcoded > them as (128/512). This will cause the bonding port > start fail if some NIC requires more Rx/Tx descriptors > than the hardcoded number. > > Therefore, add a command into testpmd application to > support the modification of the size of the dedicated > hardware Rx/Tx queue. Also export an external interface > to also let other applications can change it. > > Signed-off-by: Long Wu > Reviewed-by: Peng Zhang > Reviewed-by: Chaoyong He > --- > .../link_bonding_poll_mode_drv_lib.rst | 8 ++ > doc/guides/rel_notes/release_24_11.rst | 4 + > drivers/net/bonding/bonding_testpmd.c | 84 +++++++++++++++++++ > drivers/net/bonding/eth_bond_8023ad_private.h | 3 + > drivers/net/bonding/rte_eth_bond_8023ad.c | 41 +++++++++ > drivers/net/bonding/rte_eth_bond_8023ad.h | 23 +++++ > drivers/net/bonding/rte_eth_bond_pmd.c | 6 +- > drivers/net/bonding/version.map | 1 + > 8 files changed, 168 insertions(+), 2 deletions(-) > > diff --git a/doc/guides/prog_guide/link_bonding_poll_mode_drv_lib.rst b/doc/guides/prog_guide/link_bonding_poll_mode_drv_lib.rst > index 60717a3587..6498cf7d3d 100644 > --- a/doc/guides/prog_guide/link_bonding_poll_mode_drv_lib.rst > +++ b/doc/guides/prog_guide/link_bonding_poll_mode_drv_lib.rst > @@ -637,3 +637,11 @@ in balance mode with a transmission policy of layer 2+3:: > Members (3): [1 3 4] > Active Members (3): [1 3 4] > Primary: [3] > + > +set bonding lacp dedicated_queue size > +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > + > +Set hardware dedicated queue size for LACP control traffic in > +mode 4 (link-aggregation-802.3ad):: > + > + testpmd> set bonding lacp dedicated_queues (rxq|txq) queue_size > diff --git a/doc/guides/rel_notes/release_24_11.rst b/doc/guides/rel_notes/release_24_11.rst > index 9bfc719e02..bec466f58d 100644 > --- a/doc/guides/rel_notes/release_24_11.rst > +++ b/doc/guides/rel_notes/release_24_11.rst > @@ -98,6 +98,10 @@ New Features > * Added SR-IOV VF support. > * Added recent 1400/14000 and 15000 models to the supported list. > > +* **Updated bonding driver.** > + > + * Added new function ``rte_eth_bond_8023ad_dedicated_queue_size_set`` > + to set hardware dedicated Rx/Tx queue size in mode-4. > > Removed Items > ------------- > diff --git a/drivers/net/bonding/bonding_testpmd.c b/drivers/net/bonding/bonding_testpmd.c > index fc0bfd8f74..ce0e47d8ea 100644 > --- a/drivers/net/bonding/bonding_testpmd.c > +++ b/drivers/net/bonding/bonding_testpmd.c > @@ -156,6 +156,85 @@ static cmdline_parse_inst_t cmd_set_lacp_dedicated_queues = { > } > }; > > +/* *** SET BONDING SLOW_QUEUE HW QUEUE SIZE *** */ > +struct cmd_set_bonding_hw_dedicated_queue_size_result { > + cmdline_fixed_string_t set; > + cmdline_fixed_string_t bonding; > + cmdline_fixed_string_t lacp; > + cmdline_fixed_string_t dedicated_queues; > + portid_t port_id; > + cmdline_fixed_string_t queue_type; > + cmdline_fixed_string_t queue_size; > + uint16_t size; > +}; > + > +static void cmd_set_bonding_hw_dedicated_queue_size_parsed(void *parsed_result, > + __rte_unused struct cmdline *cl, __rte_unused void *data) > +{ > + int ret; > + struct rte_port *port; > + struct cmd_set_bonding_hw_dedicated_queue_size_result *res = parsed_result; > + > + port = &ports[res->port_id]; > + > + /** Check if the port is not started **/ > + if (port->port_status != RTE_PORT_STOPPED) { > + TESTPMD_LOG(ERR, "Please stop port %u first\n", res->port_id); > + return; > + } > + > + ret = rte_eth_bond_8023ad_dedicated_queue_size_set(res->port_id, > + res->size, res->queue_type); > + if (ret != 0) > + TESTPMD_LOG(ERR, "Failed to set port %u hardware dedicated %s " > + "ring size %u\n", > + res->port_id, res->queue_type, res->size); > +} > + > +static cmdline_parse_token_string_t cmd_setbonding_hw_dedicated_queue_size_set = > + TOKEN_STRING_INITIALIZER(struct cmd_set_bonding_hw_dedicated_queue_size_result, > + set, "set"); > +static cmdline_parse_token_string_t cmd_setbonding_hw_dedicated_queue_size_bonding = > + TOKEN_STRING_INITIALIZER(struct cmd_set_bonding_hw_dedicated_queue_size_result, > + bonding, "bonding"); > +static cmdline_parse_token_string_t cmd_setbonding_hw_dedicated_queue_size_lacp = > + TOKEN_STRING_INITIALIZER(struct cmd_set_bonding_hw_dedicated_queue_size_result, > + lacp, "lacp"); > +static cmdline_parse_token_string_t cmd_setbonding_hw_dedicated_queue_size_dedicated = > + TOKEN_STRING_INITIALIZER(struct cmd_set_bonding_hw_dedicated_queue_size_result, > + dedicated_queues, "dedicated_queues"); > +static cmdline_parse_token_num_t cmd_setbonding_hw_dedicated_queue_port_id = > + TOKEN_NUM_INITIALIZER(struct cmd_set_bonding_hw_dedicated_queue_size_result, > + port_id, RTE_UINT16); > +static cmdline_parse_token_string_t cmd_setbonding_hw_dedicated_queue_queue_type = > + TOKEN_STRING_INITIALIZER(struct cmd_set_bonding_hw_dedicated_queue_size_result, > + queue_type, "rxq#txq"); > +static cmdline_parse_token_string_t cmd_setbonding_hw_dedicated_queue_queue_size = > + TOKEN_STRING_INITIALIZER(struct cmd_set_bonding_hw_dedicated_queue_size_result, > + queue_size, "queue_size"); > +static cmdline_parse_token_num_t cmd_setbonding_hw_dedicated_queue_size_size = > + TOKEN_NUM_INITIALIZER(struct cmd_set_bonding_hw_dedicated_queue_size_result, > + size, RTE_UINT16); > + > +static cmdline_parse_inst_t cmd_set_lacp_dedicated_hw_queue_size = { > + .f = cmd_set_bonding_hw_dedicated_queue_size_parsed, > + .help_str = "set bonding lacp dedicated_queues (rxq|txq) " > + "queue_size : " > + "Set hardware dedicated queue size for LACP control traffic", > + .data = NULL, > + .tokens = { > + (void *)&cmd_setbonding_hw_dedicated_queue_size_set, > + (void *)&cmd_setbonding_hw_dedicated_queue_size_bonding, > + (void *)&cmd_setbonding_hw_dedicated_queue_size_lacp, > + (void *)&cmd_setbonding_hw_dedicated_queue_size_dedicated, > + (void *)&cmd_setbonding_hw_dedicated_queue_port_id, > + (void *)&cmd_setbonding_hw_dedicated_queue_queue_type, > + (void *)&cmd_setbonding_hw_dedicated_queue_queue_size, > + (void *)&cmd_setbonding_hw_dedicated_queue_size_size, > + NULL > + } > +}; > + > /* *** SET BALANCE XMIT POLICY *** */ > struct cmd_set_bonding_balance_xmit_policy_result { > cmdline_fixed_string_t set; > @@ -747,6 +826,11 @@ static struct testpmd_driver_commands bonding_cmds = { > "set bonding mode IEEE802.3AD aggregator policy (port_id) (agg_name)\n" > " Set Aggregation mode for IEEE802.3AD (mode 4)\n", > }, > + { > + &cmd_set_lacp_dedicated_hw_queue_size, > + "set bonding lacp dedicated_queues (rxq|txq) queue_size \n" > + " Set hardware dedicated queue size for LACP control traffic.\n", > + }, > { NULL, NULL }, > }, > }; > diff --git a/drivers/net/bonding/eth_bond_8023ad_private.h b/drivers/net/bonding/eth_bond_8023ad_private.h > index ab7d15f81a..b0264e2275 100644 > --- a/drivers/net/bonding/eth_bond_8023ad_private.h > +++ b/drivers/net/bonding/eth_bond_8023ad_private.h > @@ -176,6 +176,9 @@ struct mode8023ad_private { > > uint16_t rx_qid; > uint16_t tx_qid; > + > + uint16_t rx_queue_size; > + uint16_t tx_queue_size; > } dedicated_queues; > enum rte_bond_8023ad_agg_selection agg_selection; > }; > diff --git a/drivers/net/bonding/rte_eth_bond_8023ad.c b/drivers/net/bonding/rte_eth_bond_8023ad.c > index 7f885ab521..37a3f8528d 100644 > --- a/drivers/net/bonding/rte_eth_bond_8023ad.c > +++ b/drivers/net/bonding/rte_eth_bond_8023ad.c > @@ -1254,6 +1254,8 @@ bond_mode_8023ad_conf_assign(struct mode8023ad_private *mode4, > mode4->dedicated_queues.enabled = 0; > mode4->dedicated_queues.rx_qid = UINT16_MAX; > mode4->dedicated_queues.tx_qid = UINT16_MAX; > + mode4->dedicated_queues.rx_queue_size = SLOW_RX_QUEUE_HW_DEFAULT_SIZE; > + mode4->dedicated_queues.tx_queue_size = SLOW_TX_QUEUE_HW_DEFAULT_SIZE; > } > > void > @@ -1753,3 +1755,42 @@ rte_eth_bond_8023ad_dedicated_queues_disable(uint16_t port) > > return retval; > } > + > +int > +rte_eth_bond_8023ad_dedicated_queue_size_set(uint16_t port, > + uint16_t queue_size, > + const char *queue_type) > +{ > + struct rte_eth_dev *dev; > + struct bond_dev_private *internals; > + > + if (valid_bonding_port_id(port) != 0) { > + RTE_BOND_LOG(ERR, "The bonding port id is invalid"); > + return -EINVAL; > + } > + > + dev = &rte_eth_devices[port]; > + > + /* Device must be stopped to set up slow queue */ > + if (dev->data->dev_started != 0) { > + RTE_BOND_LOG(ERR, "Please stop the bonding port"); > + return -EINVAL; > + } > + > + internals = dev->data->dev_private; > + if (internals->mode4.dedicated_queues.enabled == 0) { > + RTE_BOND_LOG(ERR, "Please enable dedicated queue"); > + return -EINVAL; > + } > + > + if (strcmp(queue_type, "rxq") == 0) { > + internals->mode4.dedicated_queues.rx_queue_size = queue_size; > + } else if (strcmp(queue_type, "txq") == 0) { > + internals->mode4.dedicated_queues.tx_queue_size = queue_size; > + } else { > + RTE_BOND_LOG(ERR, "Unknown queue type %s", queue_type); > + return -EINVAL; > + } > + > + return 0; > +} > diff --git a/drivers/net/bonding/rte_eth_bond_8023ad.h b/drivers/net/bonding/rte_eth_bond_8023ad.h > index b2deb26e2e..a8c9dadbd0 100644 > --- a/drivers/net/bonding/rte_eth_bond_8023ad.h > +++ b/drivers/net/bonding/rte_eth_bond_8023ad.h > @@ -35,6 +35,9 @@ extern "C" { > #define MARKER_TLV_TYPE_INFO 0x01 > #define MARKER_TLV_TYPE_RESP 0x02 > > +#define SLOW_TX_QUEUE_HW_DEFAULT_SIZE 512 > +#define SLOW_RX_QUEUE_HW_DEFAULT_SIZE 512 > + > typedef void (*rte_eth_bond_8023ad_ext_slowrx_fn)(uint16_t member_id, > struct rte_mbuf *lacp_pkt); > > @@ -309,6 +312,26 @@ rte_eth_bond_8023ad_dedicated_queues_enable(uint16_t port_id); > int > rte_eth_bond_8023ad_dedicated_queues_disable(uint16_t port_id); > > + > +/** > + * Set hardware slow queue ring size > + * > + * This function set bonding port hardware slow queue ring size. > + * Bonding port must be stopped to change this configuration. > + * > + * @param port_id Bonding device id > + * @param queue_size Slow queue ring size > + * @param queue_type Slow queue type, "rxq" or "txq" > + * > + * @return > + * 0 on success, negative value otherwise. > + * > + */ > +__rte_experimental > +int > +rte_eth_bond_8023ad_dedicated_queue_size_set(uint16_t port, > + uint16_t queue_size, > + const char *queue_type); > /* > * Get aggregator mode for 8023ad > * @param port_id Bonding device id > diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c > index 34131f0e35..d995fe62b2 100644 > --- a/drivers/net/bonding/rte_eth_bond_pmd.c > +++ b/drivers/net/bonding/rte_eth_bond_pmd.c > @@ -1688,7 +1688,8 @@ member_configure_slow_queue(struct rte_eth_dev *bonding_eth_dev, > /* Configure slow Rx queue */ > > errval = rte_eth_rx_queue_setup(member_eth_dev->data->port_id, > - internals->mode4.dedicated_queues.rx_qid, 128, > + internals->mode4.dedicated_queues.rx_qid, > + internals->mode4.dedicated_queues.rx_queue_size, > rte_eth_dev_socket_id(member_eth_dev->data->port_id), > NULL, port->slow_pool); > if (errval != 0) { > @@ -1701,7 +1702,8 @@ member_configure_slow_queue(struct rte_eth_dev *bonding_eth_dev, > } > > errval = rte_eth_tx_queue_setup(member_eth_dev->data->port_id, > - internals->mode4.dedicated_queues.tx_qid, 512, > + internals->mode4.dedicated_queues.tx_qid, > + internals->mode4.dedicated_queues.tx_queue_size, > rte_eth_dev_socket_id(member_eth_dev->data->port_id), > NULL); > if (errval != 0) { > diff --git a/drivers/net/bonding/version.map b/drivers/net/bonding/version.map > index a309469b1f..f9c935a04f 100644 > --- a/drivers/net/bonding/version.map > +++ b/drivers/net/bonding/version.map > @@ -30,6 +30,7 @@ DPDK_25 { > EXPERIMENTAL { > # added in 23.11 > global: > + rte_eth_bond_8023ad_dedicated_queue_size_set; > rte_eth_bond_8023ad_member_info; > rte_eth_bond_active_members_get; > rte_eth_bond_member_add;