* [PATCH 1/2] net/bonding: standard the log message
2024-06-05 5:55 [PATCH 0/2] add function to set dedicated queue size Chaoyong He
@ 2024-06-05 5:55 ` Chaoyong He
2024-12-03 20:52 ` Stephen Hemminger
2024-06-05 5:55 ` [PATCH 2/2] net/bonding: add command to set dedicated queue size Chaoyong He
2024-06-05 15:57 ` [PATCH 0/2] add function " Stephen Hemminger
2 siblings, 1 reply; 7+ messages in thread
From: Chaoyong He @ 2024-06-05 5:55 UTC (permalink / raw)
To: dev; +Cc: oss-drivers, Long Wu, Peng Zhang, Chaoyong He
From: Long Wu <long.wu@corigine.com>
According to the check rules in the patch check script,
drivers and libraries must use the logging framework.
So standard the log message of bonding driver by using
the logging framework.
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>
---
drivers/net/bonding/bonding_testpmd.c | 42 ++++++++++++---------------
1 file changed, 19 insertions(+), 23 deletions(-)
diff --git a/drivers/net/bonding/bonding_testpmd.c b/drivers/net/bonding/bonding_testpmd.c
index 8fcd6cadd0..45b636fea7 100644
--- a/drivers/net/bonding/bonding_testpmd.c
+++ b/drivers/net/bonding/bonding_testpmd.c
@@ -34,15 +34,14 @@ static void cmd_set_bonding_mode_parsed(void *parsed_result,
* of device changed.
*/
if (port->port_status != RTE_PORT_STOPPED) {
- fprintf(stderr,
- "\t Error: Can't set bonding mode when port %d is not stopped\n",
+ TESTPMD_LOG(ERR, "\t Error: Can't set bonding mode when port %d is not stopped\n",
port_id);
return;
}
/* Set the bonding mode for the relevant port. */
if (rte_eth_bond_mode_set(port_id, res->value) != 0)
- fprintf(stderr, "\t Failed to set bonding mode for port = %d.\n",
+ TESTPMD_LOG(ERR, "\t Failed to set bonding mode for port = %d.\n",
port_id);
}
@@ -98,23 +97,23 @@ static void cmd_set_bonding_lacp_dedicated_queues_parsed(void *parsed_result,
/** Check if the port is not started **/
if (port->port_status != RTE_PORT_STOPPED) {
- fprintf(stderr, "Please stop port %d first\n", port_id);
+ TESTPMD_LOG(ERR, "Please stop port %d first\n", port_id);
return;
}
if (!strcmp(res->mode, "enable")) {
if (rte_eth_bond_8023ad_dedicated_queues_enable(port_id) == 0)
- printf("Dedicate queues for LACP control packets"
+ TESTPMD_LOG(INFO, "Dedicate queues for LACP control packets"
" enabled\n");
else
- printf("Enabling dedicate queues for LACP control "
+ TESTPMD_LOG(ERR, "Enabling dedicate queues for LACP control "
"packets on port %d failed\n", port_id);
} else if (!strcmp(res->mode, "disable")) {
if (rte_eth_bond_8023ad_dedicated_queues_disable(port_id) == 0)
- printf("Dedicated queues for LACP control packets "
+ TESTPMD_LOG(INFO, "Dedicated queues for LACP control packets "
"disabled\n");
else
- printf("Disabling dedicated queues for LACP control "
+ TESTPMD_LOG(ERR, "Disabling dedicated queues for LACP control "
"traffic on port %d failed\n", port_id);
}
}
@@ -178,14 +177,13 @@ static void cmd_set_bonding_balance_xmit_policy_parsed(void *parsed_result,
} else if (!strcmp(res->policy, "l34")) {
policy = BALANCE_XMIT_POLICY_LAYER34;
} else {
- fprintf(stderr, "\t Invalid xmit policy selection");
+ TESTPMD_LOG(ERR, "\t Invalid xmit policy selection");
return;
}
/* Set the bonding mode for the relevant port. */
if (rte_eth_bond_xmit_policy_set(port_id, policy) != 0) {
- fprintf(stderr,
- "\t Failed to set bonding balance xmit policy for port = %d.\n",
+ TESTPMD_LOG(ERR, "\t Failed to set bonding balance xmit policy for port = %d.\n",
port_id);
}
}
@@ -239,7 +237,7 @@ static void cmd_show_bonding_config_parsed(void *parsed_result,
bonding_mode = rte_eth_bond_mode_get(port_id);
if (bonding_mode < 0) {
- fprintf(stderr, "\tFailed to get bonding mode for port = %d\n",
+ TESTPMD_LOG(ERR, "\tFailed to get bonding mode for port = %d\n",
port_id);
return;
}
@@ -292,7 +290,7 @@ static void cmd_set_bonding_primary_parsed(void *parsed_result,
/* Set the primary member for a bonding device. */
if (rte_eth_bond_primary_set(main_port_id, member_port_id) != 0) {
- fprintf(stderr, "\t Failed to set primary member for port = %d.\n",
+ TESTPMD_LOG(ERR, "\t Failed to set primary member for port = %d.\n",
main_port_id);
return;
}
@@ -348,8 +346,7 @@ static void cmd_add_bonding_member_parsed(void *parsed_result,
/* add the member for a bonding device. */
if (rte_eth_bond_member_add(main_port_id, member_port_id) != 0) {
- fprintf(stderr,
- "\t Failed to add member %d to main port = %d.\n",
+ TESTPMD_LOG(ERR, "\t Failed to add member %d to main port = %d.\n",
member_port_id, main_port_id);
return;
}
@@ -407,8 +404,7 @@ static void cmd_remove_bonding_member_parsed(void *parsed_result,
/* remove the member from a bonding device. */
if (rte_eth_bond_member_remove(main_port_id, member_port_id) != 0) {
- fprintf(stderr,
- "\t Failed to remove member %d from main port = %d.\n",
+ TESTPMD_LOG(ERR, "\t Failed to remove member %d from main port = %d.\n",
member_port_id, main_port_id);
return;
}
@@ -467,7 +463,7 @@ static void cmd_create_bonding_device_parsed(void *parsed_result,
int ret;
if (test_done == 0) {
- fprintf(stderr, "Please stop forwarding first\n");
+ TESTPMD_LOG(ERR, "Please stop forwarding first\n");
return;
}
@@ -477,10 +473,10 @@ static void cmd_create_bonding_device_parsed(void *parsed_result,
/* Create a new bonding device. */
port_id = rte_eth_bond_create(ethdev_name, res->mode, res->socket);
if (port_id < 0) {
- fprintf(stderr, "\t Failed to create bonding device.\n");
+ TESTPMD_LOG(ERR, "\t Failed to create bonding device.\n");
return;
}
- printf("Created new bonding device %s on (port %d).\n", ethdev_name,
+ TESTPMD_LOG(INFO, "Created new bonding device %s on (port %d).\n", ethdev_name,
port_id);
/* Update number of ports */
@@ -488,7 +484,7 @@ static void cmd_create_bonding_device_parsed(void *parsed_result,
reconfig(port_id, res->socket);
ret = rte_eth_promiscuous_enable(port_id);
if (ret != 0)
- fprintf(stderr, "Failed to enable promiscuous mode for port %u: %s - ignore\n",
+ TESTPMD_LOG(ERR, "Failed to enable promiscuous mode for port %u: %s - ignore\n",
port_id, rte_strerror(-ret));
ports[port_id].update_conf = 1;
@@ -550,7 +546,7 @@ static void cmd_set_bond_mac_addr_parsed(void *parsed_result,
/* check the return value and print it if is < 0 */
if (ret < 0)
- fprintf(stderr, "set_bond_mac_addr error: (%s)\n",
+ TESTPMD_LOG(ERR, "set_bond_mac_addr error: (%s)\n",
strerror(-ret));
}
@@ -603,7 +599,7 @@ static void cmd_set_bond_mon_period_parsed(void *parsed_result,
/* check the return value and print it if is < 0 */
if (ret < 0)
- fprintf(stderr, "set_bond_mac_addr error: (%s)\n",
+ TESTPMD_LOG(ERR, "set_bond_mac_addr error: (%s)\n",
strerror(-ret));
}
--
2.39.1
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 2/2] net/bonding: add command to set dedicated queue size
2024-06-05 5:55 [PATCH 0/2] add function to set dedicated queue size Chaoyong He
2024-06-05 5:55 ` [PATCH 1/2] net/bonding: standard the log message Chaoyong He
@ 2024-06-05 5:55 ` Chaoyong He
2024-06-05 15:57 ` [PATCH 0/2] add function " Stephen Hemminger
2 siblings, 0 replies; 7+ messages in thread
From: Chaoyong He @ 2024-06-05 5:55 UTC (permalink / raw)
To: dev; +Cc: oss-drivers, Long Wu, Peng Zhang, 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_07.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 | 39 +++++++++
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, 166 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_07.rst b/doc/guides/rel_notes/release_24_07.rst
index e68a53d757..a17b5c4302 100644
--- a/doc/guides/rel_notes/release_24_07.rst
+++ b/doc/guides/rel_notes/release_24_07.rst
@@ -89,6 +89,10 @@ New Features
* Added SSE/NEON vector datapath.
+* **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 45b636fea7..540f0d64aa 100644
--- a/drivers/net/bonding/bonding_testpmd.c
+++ b/drivers/net/bonding/bonding_testpmd.c
@@ -154,6 +154,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;
@@ -745,6 +824,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 06c21ebe6d..c19645aa4f 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,40 @@ 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,
+ 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
+ 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..0a36fbe3ed 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 128
+
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,
+ 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 c40d18d128..f53856ff60 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 09ee21c55f..6626691f0e 100644
--- a/drivers/net/bonding/version.map
+++ b/drivers/net/bonding/version.map
@@ -30,6 +30,7 @@ DPDK_24 {
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;
--
2.39.1
^ permalink raw reply [flat|nested] 7+ messages in thread