From: "lihuisong (C)" <lihuisong@huawei.com>
To: Chaoyong He <chaoyong.he@corigine.com>, <dev@dpdk.org>
Cc: <oss-drivers@corigine.com>, Long Wu <long.wu@corigine.com>,
Peng Zhang <peng.zhang@corigine.com>
Subject: Re: [PATCH v2 2/2] net/bonding: add command to set dedicated queue size
Date: Tue, 29 Oct 2024 09:49:12 +0800 [thread overview]
Message-ID: <75651ad4-fae1-588f-2c3c-f987581dba3e@huawei.com> (raw)
In-Reply-To: <20241011032412.3672788-3-chaoyong.he@corigine.com>
Very useful,
Acked-by: Huisong Li <lihuisong@huawei.com>
在 2024/10/11 11:24, Chaoyong He 写道:
> From: Long Wu <long.wu@corigine.com>
>
> 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 <long.wu@corigine.com>
> Reviewed-by: Peng Zhang <peng.zhang@corigine.com>
> Reviewed-by: Chaoyong He <chaoyong.he@corigine.com>
> ---
> .../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 <port_id> (rxq|txq) queue_size <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 <port_id> (rxq|txq) "
> + "queue_size <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 <port_id> (rxq|txq) queue_size <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;
next prev parent reply other threads:[~2024-10-29 1:49 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-24 2:03 [PATCH 0/2] add function " Chaoyong He
2024-06-24 2:03 ` [PATCH 1/2] net/bonding: standard the log message Chaoyong He
2024-10-10 18:10 ` Stephen Hemminger
2024-10-11 3:02 ` Chaoyong He
2024-06-24 2:03 ` [PATCH 2/2] net/bonding: add command to set dedicated queue size Chaoyong He
2024-10-10 18:13 ` Stephen Hemminger
2024-10-11 3:00 ` Chaoyong He
2024-10-11 3:24 ` [PATCH v2 0/2] add function " Chaoyong He
2024-10-11 3:24 ` [PATCH v2 1/2] net/bonding: standard the log message Chaoyong He
2024-10-11 5:10 ` Stephen Hemminger
2024-10-29 1:51 ` lihuisong (C)
2024-10-11 3:24 ` [PATCH v2 2/2] net/bonding: add command to set dedicated queue size Chaoyong He
2024-10-17 16:05 ` Thomas Monjalon
2024-10-29 1:49 ` lihuisong (C) [this message]
2024-12-03 18:39 ` Stephen Hemminger
2024-12-03 19:57 ` Stephen Hemminger
2024-12-04 6:21 ` Chaoyong He
2024-12-04 16:00 ` Stephen Hemminger
2024-12-05 2:53 ` Chaoyong He
2024-12-19 5:52 ` Chaoyong He
2024-12-25 21:22 ` Stephen Hemminger
2024-12-20 5:25 ` Stephen Hemminger
2024-12-26 1:26 ` [PATCH v3] net/bonding: fix dedicated queue setup failed Chaoyong He
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=75651ad4-fae1-588f-2c3c-f987581dba3e@huawei.com \
--to=lihuisong@huawei.com \
--cc=chaoyong.he@corigine.com \
--cc=dev@dpdk.org \
--cc=long.wu@corigine.com \
--cc=oss-drivers@corigine.com \
--cc=peng.zhang@corigine.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).