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 B5FFC45D7B; Fri, 22 Nov 2024 10:54:14 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 7DF6E40270; Fri, 22 Nov 2024 10:54:13 +0100 (CET) Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by mails.dpdk.org (Postfix) with ESMTP id 9DD534026E for ; Fri, 22 Nov 2024 10:54:11 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.163.252]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4Xvmlr6w9nzqSPY; Fri, 22 Nov 2024 15:23:04 +0800 (CST) Received: from kwepemf500004.china.huawei.com (unknown [7.202.181.242]) by mail.maildlp.com (Postfix) with ESMTPS id E304E1800A5; Fri, 22 Nov 2024 15:24:55 +0800 (CST) Received: from localhost.localdomain (10.28.79.22) by kwepemf500004.china.huawei.com (7.202.181.242) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.11; Fri, 22 Nov 2024 15:24:55 +0800 From: Jie Hai To: , , , =?UTF-8?q?Morten=20Br=C3=B8rup?= , Chengwen Feng , Huisong Li CC: , Subject: [PATCH] examples/l3fwd: fix Tx performance deteriorate Date: Fri, 22 Nov 2024 15:13:36 +0800 Message-ID: <20241122071336.18470-1-haijie1@huawei.com> X-Mailer: git-send-email 2.22.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Originating-IP: [10.28.79.22] X-ClientProxiedBy: dggems703-chm.china.huawei.com (10.3.19.180) To kwepemf500004.china.huawei.com (7.202.181.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 The application send packets only when the buffer is full, or the buffer is empty and the number of packets to be sent extends half of the buffer. The change of MAX_PKT_BURST increases TX buffer size, while the default size of local cache on each lcore is 256, which not greater than the limit of transmitting. That would make the mbuf not on the local cache be frequently used and the performance deteriorates. This problem can be solved by making the TX threshold smaller than the local cache size. For example, use the '--mbcache' parameter to make the local cache greater. This patch optimizes the default performance by lowering TX threshold. Fixes: d5c4897ecfb2 ("examples/l3fwd: add option to set Rx burst size") Signed-off-by: Jie Hai --- examples/l3fwd/l3fwd.h | 8 +++++--- examples/l3fwd/l3fwd_common.h | 6 +++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/examples/l3fwd/l3fwd.h b/examples/l3fwd/l3fwd.h index 0cce3406ee7d..a01fecd51261 100644 --- a/examples/l3fwd/l3fwd.h +++ b/examples/l3fwd/l3fwd.h @@ -35,7 +35,7 @@ /* * Try to avoid TX buffering if we have at least MAX_TX_BURST packets to send. */ -#define MAX_TX_BURST (MAX_PKT_BURST / 2) +#define MAX_TX_BURST DEFAULT_PKT_BURST #define NB_SOCKETS 8 @@ -57,6 +57,8 @@ #define L3FWD_HASH_ENTRIES (1024*1024*1) #endif +static_assert(MAX_TX_BURST <= MAX_PKT_BURST, "MAX_TX_BURST should be at most MAX_PKT_BURST"); + struct parm_cfg { const char *rule_ipv4_name; const char *rule_ipv6_name; @@ -152,8 +154,8 @@ send_single_packet(struct lcore_conf *qconf, len++; /* enough pkts to be sent */ - if (unlikely(len == MAX_PKT_BURST)) { - send_burst(qconf, MAX_PKT_BURST, port); + if (unlikely(len == MAX_TX_BURST)) { + send_burst(qconf, MAX_TX_BURST, port); len = 0; } diff --git a/examples/l3fwd/l3fwd_common.h b/examples/l3fwd/l3fwd_common.h index d94e5f135791..3f504dc0a552 100644 --- a/examples/l3fwd/l3fwd_common.h +++ b/examples/l3fwd/l3fwd_common.h @@ -71,7 +71,7 @@ send_packetsx4(struct lcore_conf *qconf, uint16_t port, struct rte_mbuf *m[], * If TX buffer for that queue is empty, and we have enough packets, * then send them straightway. */ - if (num >= MAX_TX_BURST && len == 0) { + if (num >= MAX_TX_BURST / 2 && len == 0) { n = rte_eth_tx_burst(port, qconf->tx_queue_id[port], m, num); if (unlikely(n < num)) { do { @@ -112,9 +112,9 @@ send_packetsx4(struct lcore_conf *qconf, uint16_t port, struct rte_mbuf *m[], len += n; /* enough pkts to be sent */ - if (unlikely(len == MAX_PKT_BURST)) { + if (unlikely(len > MAX_TX_BURST)) { - send_burst(qconf, MAX_PKT_BURST, port); + send_burst(qconf, len, port); /* copy rest of the packets into the TX buffer. */ len = num - n; -- 2.22.0