From patchwork Thu Oct 12 16:03:57 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trevor Tao X-Patchwork-Id: 132577 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id B0D4642363; Thu, 12 Oct 2023 18:04:25 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 374B7402BA; Thu, 12 Oct 2023 18:04:25 +0200 (CEST) Received: from m12.mail.163.com (m12.mail.163.com [220.181.12.196]) by mails.dpdk.org (Postfix) with ESMTP id 1F9AA4028A for ; Thu, 12 Oct 2023 18:04:21 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=From:Subject:Date:Message-Id:MIME-Version; bh=8Rdwp RhaqGGRpNqx7JKsPpwfI4tIvGlaPlZXdh+/6gU=; b=KGeEjwMnQobYd+BDwQI3c ZS9PM9z++HnhrGSSlA3GiAsVVQAQvbJCzEMVi9L4bm1cIMEPE9qSpWc17DwP410M CfKGrnJGWNaivp8NHsuckSD8MyZEa2IGC7HIY8O7AX2czkcjYsaHVQM455EfaXAx ttE1waCZ5yANpRfDYQ6un4= Received: from u2204.. (unknown [49.76.95.19]) by zwqz-smtp-mta-g5-2 (Coremail) with SMTP id _____wDnz6n2GChlO5GAAQ--.57701S2; Fri, 13 Oct 2023 00:04:15 +0800 (CST) From: Trevor Tao To: dev@dpdk.org Cc: Trevor Tao Subject: [PATCH v2 1/3] examples/l3fwd: relax RSS requirement with option Date: Thu, 12 Oct 2023 16:03:57 +0000 Message-Id: <20231012160359.422076-1-taozj888@163.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 X-CM-TRANSID: _____wDnz6n2GChlO5GAAQ--.57701S2 X-Coremail-Antispam: 1Uf129KBjvJXoWxCrW3ZFWrury5AFWUKF4DJwb_yoW5Kw47pF s8Gr9rXF1vvw43t3WFyF9xWrs8JFWUAws8Ars3Z343C3WUtFZ3Wr40krn8XFn7GF18WrWU X3yrXryxGF4qywUanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x0JUS-e5UUUUU= X-Originating-IP: [49.76.95.19] X-CM-SenderInfo: hwdr6yqyyyqiywtou0bp/1tbiKAAHx17WNZRWywAAsc 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 Now the port Rx mq_mode had been set to RTE_ETH_MQ_RX_RSS by default, but some hw and/or virtual interface does not support the RSS and offload mode presupposed, e.g., some virtio interfaces in the cloud don't support RSS and the error msg may like: virtio_dev_configure(): RSS support requested but not supported by the device Port0 dev_configure = -95 So to enable the l3fwd running in that environment, the Rx mode requirement can be relaxed to reflect the hardware feature reality here, and the l3fwd can run smoothly then. An option named "relax-rx-mode" is added to enable the relax action here, and it's disabled by default. Signed-off-by: Trevor Tao --- examples/l3fwd/main.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/examples/l3fwd/main.c b/examples/l3fwd/main.c index 6063eb1399..36a2a77756 100644 --- a/examples/l3fwd/main.c +++ b/examples/l3fwd/main.c @@ -73,6 +73,7 @@ static enum L3FWD_LOOKUP_MODE lookup_mode; static int numa_on = 1; /**< NUMA is enabled by default. */ static int parse_ptype; /**< Parse packet type using rx callback, and */ /**< disabled by default */ +static int relax_rx_mode; /**< Relax RX mode is disabled by default */ static int per_port_pool; /**< Use separate buffer pools per port; disabled */ /**< by default */ @@ -678,6 +679,7 @@ static const char short_options[] = #define CMD_LINE_OPT_MAX_PKT_LEN "max-pkt-len" #define CMD_LINE_OPT_HASH_ENTRY_NUM "hash-entry-num" #define CMD_LINE_OPT_PARSE_PTYPE "parse-ptype" +#define CMD_LINE_OPT_RELAX_RX_MODE "relax-rx-mode" #define CMD_LINE_OPT_PER_PORT_POOL "per-port-pool" #define CMD_LINE_OPT_MODE "mode" #define CMD_LINE_OPT_EVENTQ_SYNC "eventq-sched" @@ -705,6 +707,7 @@ enum { CMD_LINE_OPT_MAX_PKT_LEN_NUM, CMD_LINE_OPT_HASH_ENTRY_NUM_NUM, CMD_LINE_OPT_PARSE_PTYPE_NUM, + CMD_LINE_OPT_RELAX_RX_MODE_NUM, CMD_LINE_OPT_RULE_IPV4_NUM, CMD_LINE_OPT_RULE_IPV6_NUM, CMD_LINE_OPT_ALG_NUM, @@ -728,6 +731,7 @@ static const struct option lgopts[] = { {CMD_LINE_OPT_MAX_PKT_LEN, 1, 0, CMD_LINE_OPT_MAX_PKT_LEN_NUM}, {CMD_LINE_OPT_HASH_ENTRY_NUM, 1, 0, CMD_LINE_OPT_HASH_ENTRY_NUM_NUM}, {CMD_LINE_OPT_PARSE_PTYPE, 0, 0, CMD_LINE_OPT_PARSE_PTYPE_NUM}, + {CMD_LINE_OPT_RELAX_RX_MODE, 0, 0, CMD_LINE_OPT_RELAX_RX_MODE_NUM}, {CMD_LINE_OPT_PER_PORT_POOL, 0, 0, CMD_LINE_OPT_PARSE_PER_PORT_POOL}, {CMD_LINE_OPT_MODE, 1, 0, CMD_LINE_OPT_MODE_NUM}, {CMD_LINE_OPT_EVENTQ_SYNC, 1, 0, CMD_LINE_OPT_EVENTQ_SYNC_NUM}, @@ -853,6 +857,11 @@ parse_args(int argc, char **argv) parse_ptype = 1; break; + case CMD_LINE_OPT_RELAX_RX_MODE_NUM: + printf("Relax rx mode is enabled\n"); + relax_rx_mode = 1; + break; + case CMD_LINE_OPT_PARSE_PER_PORT_POOL: printf("per port buffer pool is enabled\n"); per_port_pool = 1; @@ -1257,8 +1266,16 @@ l3fwd_poll_resource_setup(void) local_port_conf.rx_adv_conf.rss_conf.rss_hf &= dev_info.flow_type_rss_offloads; - if (dev_info.max_rx_queues == 1) + if (dev_info.max_rx_queues == 1) { local_port_conf.rxmode.mq_mode = RTE_ETH_MQ_RX_NONE; + } + + /* relax the rx rss requirement */ + if (relax_rx_mode && !local_port_conf.rx_adv_conf.rss_conf.rss_hf) { + printf("warning: modified the rx mq_mode to RTE_ETH_MQ_RX_NONE base on" + " device capability\n"); + local_port_conf.rxmode.mq_mode = RTE_ETH_MQ_RX_NONE; + } if (local_port_conf.rx_adv_conf.rss_conf.rss_hf != port_conf.rx_adv_conf.rss_conf.rss_hf) { From patchwork Thu Oct 12 16:03:58 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trevor Tao X-Patchwork-Id: 132579 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id B0E4842363; Thu, 12 Oct 2023 18:04:41 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 6869140697; Thu, 12 Oct 2023 18:04:27 +0200 (CEST) Received: from m12.mail.163.com (m12.mail.163.com [220.181.12.217]) by mails.dpdk.org (Postfix) with ESMTP id 20E414028A for ; Thu, 12 Oct 2023 18:04:24 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=From:Subject:Date:Message-Id:MIME-Version; bh=ZESnj +Gk106D1WQ/DhFcuiCIB3S6eS1Mo8LzpyRzZ3M=; b=D6NfZ8Fl9q8X6NcN07m2s XIYHA8stEEKA2cBmH09beuOURJ2l3/RuxX98GVpPtuT30x9Y3K+AiUqsDtP3zXrw GwkU0282crYYF1oZdW/Fj7qaVeIC3Vy9nHHqIUVcC182qZKKbyGbWe4wl3IMVjA8 jJkqoh4MObfQ+cLcilWxe0= Received: from u2204.. (unknown [49.76.95.19]) by zwqz-smtp-mta-g5-2 (Coremail) with SMTP id _____wDnz6n2GChlO5GAAQ--.57701S3; Fri, 13 Oct 2023 00:04:15 +0800 (CST) From: Trevor Tao To: dev@dpdk.org Cc: Trevor Tao Subject: [PATCH v2 2/3] examples/l3fwd: relax the Offload requirement Date: Thu, 12 Oct 2023 16:03:58 +0000 Message-Id: <20231012160359.422076-2-taozj888@163.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231012160359.422076-1-taozj888@163.com> References: <20231012160359.422076-1-taozj888@163.com> MIME-Version: 1.0 X-CM-TRANSID: _____wDnz6n2GChlO5GAAQ--.57701S3 X-Coremail-Antispam: 1Uf129KBjvJXoWxWFy8ZFWxGryfZr4fGr43GFg_yoWrCFyfpa nrKrs2qrn3Zry5XF1fAa1rurnIgw18ur1DCwn5Aw17t39rA34kJFWUtFy5uFWjya4DCrZx ZFWrWrW3KF18A3JanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x0JUTWlDUUUUU= X-Originating-IP: [49.76.95.19] X-CM-SenderInfo: hwdr6yqyyyqiywtou0bp/xtbBogUHx1aEJ0BDbgAAs- 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 Now the port Rx offload mode is set to RTE_ETH_RX_OFFLOAD_CHECKSUM by default, but some hw and/or virtual interface does not support the offload mode presupposed, e.g., some virtio interfaces in the cloud may only partly support RTE_ETH_RX_OFFLOAD_UDP_CKSUM/ RTE_ETH_RX_OFFLOAD_TCP_CKSUM, but not RTE_ETH_RX_OFFLOAD_IPV4_CKSUM, and the error msg here: Ethdev port_id=0 requested Rx offloads 0xe does not match Rx offloads capabilities 0x201d in rte_eth_dev_configure() So to enable the l3fwd running in that environment, the Rx mode requirement can be relaxed to reflect the hardware feature reality here, and the l3fwd can run smoothly then. A warning msg would be provided to user in case it happens here. On the other side, enabling the software cksum check in case missing the hw support. The relax action for rx cksum offload is just enabled when relax_rx_mode is true which is false by default. Signed-off-by: Trevor Tao --- examples/l3fwd/l3fwd.h | 12 ++++++++++-- examples/l3fwd/l3fwd_em.h | 2 +- examples/l3fwd/l3fwd_lpm.h | 2 +- examples/l3fwd/main.c | 14 ++++++++++++++ 4 files changed, 26 insertions(+), 4 deletions(-) diff --git a/examples/l3fwd/l3fwd.h b/examples/l3fwd/l3fwd.h index b55855c932..fd98ad3373 100644 --- a/examples/l3fwd/l3fwd.h +++ b/examples/l3fwd/l3fwd.h @@ -159,7 +159,7 @@ send_single_packet(struct lcore_conf *qconf, #ifdef DO_RFC_1812_CHECKS static inline int -is_valid_ipv4_pkt(struct rte_ipv4_hdr *pkt, uint32_t link_len) +is_valid_ipv4_pkt(struct rte_ipv4_hdr *pkt, uint32_t link_len, uint64_t ol_flags) { /* From http://www.rfc-editor.org/rfc/rfc1812.txt section 5.2.2 */ /* @@ -170,7 +170,15 @@ is_valid_ipv4_pkt(struct rte_ipv4_hdr *pkt, uint32_t link_len) return -1; /* 2. The IP checksum must be correct. */ - /* this is checked in H/W */ + /* if this is not checked in H/W, check it. */ + if ((ol_flags & RTE_ETH_RX_OFFLOAD_IPV4_CKSUM) == 0) { + uint16_t actual_cksum, expected_cksum; + actual_cksum = pkt->hdr_checksum; + pkt->hdr_checksum = 0; + expected_cksum = rte_ipv4_cksum(pkt); + if (actual_cksum != expected_cksum) + return -2; + } /* * 3. The IP version number must be 4. If the version number is not 4 diff --git a/examples/l3fwd/l3fwd_em.h b/examples/l3fwd/l3fwd_em.h index 7d051fc076..1fee2e2e6c 100644 --- a/examples/l3fwd/l3fwd_em.h +++ b/examples/l3fwd/l3fwd_em.h @@ -20,7 +20,7 @@ l3fwd_em_handle_ipv4(struct rte_mbuf *m, uint16_t portid, #ifdef DO_RFC_1812_CHECKS /* Check to make sure the packet is valid (RFC1812) */ - if (is_valid_ipv4_pkt(ipv4_hdr, m->pkt_len) < 0) { + if (is_valid_ipv4_pkt(ipv4_hdr, m->pkt_len, m->ol_flags) < 0) { rte_pktmbuf_free(m); return BAD_PORT; } diff --git a/examples/l3fwd/l3fwd_lpm.h b/examples/l3fwd/l3fwd_lpm.h index c61b969584..55b82a29bb 100644 --- a/examples/l3fwd/l3fwd_lpm.h +++ b/examples/l3fwd/l3fwd_lpm.h @@ -22,7 +22,7 @@ l3fwd_lpm_simple_forward(struct rte_mbuf *m, uint16_t portid, #ifdef DO_RFC_1812_CHECKS /* Check to make sure the packet is valid (RFC1812) */ - if (is_valid_ipv4_pkt(ipv4_hdr, m->pkt_len) < 0) { + if (is_valid_ipv4_pkt(ipv4_hdr, m->pkt_len), m->ol_flags) < 0) { rte_pktmbuf_free(m); return; } diff --git a/examples/l3fwd/main.c b/examples/l3fwd/main.c index 36a2a77756..5f378ed812 100644 --- a/examples/l3fwd/main.c +++ b/examples/l3fwd/main.c @@ -1286,6 +1286,20 @@ l3fwd_poll_resource_setup(void) local_port_conf.rx_adv_conf.rss_conf.rss_hf); } + /* relax the rx offload requirement */ + if ((local_port_conf.rxmode.offloads & dev_info.rx_offload_capa) != + local_port_conf.rxmode.offloads) { + printf("Port %u requested Rx offloads 0x%"PRIx64" does not" + " match Rx offloads capabilities 0x%"PRIx64"\n", + portid, local_port_conf.rxmode.offloads, + dev_info.rx_offload_capa); + if (relax_rx_mode) { + local_port_conf.rxmode.offloads &= dev_info.rx_offload_capa; + printf("warning: modified the rx offload to 0x%"PRIx64" based on device" + " capability\n", local_port_conf.rxmode.offloads); + } + } + ret = rte_eth_dev_configure(portid, nb_rx_queue, (uint16_t)n_tx_queue, &local_port_conf); if (ret < 0) From patchwork Thu Oct 12 16:03:59 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trevor Tao X-Patchwork-Id: 132578 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id AE0DA42363; Thu, 12 Oct 2023 18:04:32 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 4DC9E402E8; Thu, 12 Oct 2023 18:04:26 +0200 (CEST) Received: from m12.mail.163.com (m12.mail.163.com [220.181.12.198]) by mails.dpdk.org (Postfix) with ESMTP id A9DF44029F for ; Thu, 12 Oct 2023 18:04:22 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=From:Subject:Date:Message-Id:MIME-Version; bh=YFDcK QXxBmKfnJIAmCh1OXWaFBjQJ4wwz81aFWcEhqM=; b=lUdFCVcrXlhbL4paDAoSB CfFHbUWI5IKPbcuw2UrRgxPNLlPX+U8UK+4EHoVXQV5XuU2GGyOottHWuy4IprBq 5JsLpPuvEPm8I0uU3o4Es/hP2NGIB30o9XZkaOyQYlMtKP67zrKmUrpg2ZkflcQY EU2J2zJtf3kD/Pb/aFqjbQ= Received: from u2204.. (unknown [49.76.95.19]) by zwqz-smtp-mta-g5-2 (Coremail) with SMTP id _____wDnz6n2GChlO5GAAQ--.57701S4; Fri, 13 Oct 2023 00:04:15 +0800 (CST) From: Trevor Tao To: dev@dpdk.org Cc: Trevor Tao Subject: [PATCH v2 3/3] doc: add a relax rx mode requirement option Date: Thu, 12 Oct 2023 16:03:59 +0000 Message-Id: <20231012160359.422076-3-taozj888@163.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231012160359.422076-1-taozj888@163.com> References: <20231012160359.422076-1-taozj888@163.com> MIME-Version: 1.0 X-CM-TRANSID: _____wDnz6n2GChlO5GAAQ--.57701S4 X-Coremail-Antispam: 1Uf129KBjvJXoWxJrykXFykXrWrXw4xCw15urg_yoW8uw4fpa 1UtrZ3KrZ5Jw1Fgry5X3W8Gr4rAF4vq345WF4kt3y0qa93ury2vrW8KrW2yFWDur13X3Wf Zw4qvryxC3W29rJanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x0pidb1rUUUUU= X-Originating-IP: [49.76.95.19] X-CM-SenderInfo: hwdr6yqyyyqiywtou0bp/1tbiSAMHx1+FiSFn3gAAsA 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 Add an option to enable the RX mode requirement relax in release notes and l3fwd sample guide. Signed-off-by: Trevor Tao --- doc/guides/rel_notes/release_23_11.rst | 2 ++ doc/guides/sample_app_ug/l3_forward.rst | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/doc/guides/rel_notes/release_23_11.rst b/doc/guides/rel_notes/release_23_11.rst index f09ecd50fe..2f9e4a54c8 100644 --- a/doc/guides/rel_notes/release_23_11.rst +++ b/doc/guides/rel_notes/release_23_11.rst @@ -84,6 +84,8 @@ New Features default. The implementation using C11 standard atomic operations is enabled via the ``enable_stdatomic`` build option. +* sample: Added a command option ``--relax-rx-mode`` in l3fwd example + to relax the rx RSS/Offload mode requirement if needed. Removed Items ------------- diff --git a/doc/guides/sample_app_ug/l3_forward.rst b/doc/guides/sample_app_ug/l3_forward.rst index 1cc2c1dd1d..00283f070c 100644 --- a/doc/guides/sample_app_ug/l3_forward.rst +++ b/doc/guides/sample_app_ug/l3_forward.rst @@ -126,6 +126,8 @@ Where, * ``--parse-ptype:`` Optional, set to use software to analyze packet type. Without this option, hardware will check the packet type. +* ``--relax-rx-mode:`` Optional, set to enable rx mode relax when RSS/offload is not fully supported by the hardware. When the IPv4 cksum offload is relaxed, it is calculated by the software instead. Without this option, the RSS and cksum offload will be forced. + * ``--per-port-pool:`` Optional, set to use independent buffer pools per port. Without this option, single buffer pool is used for all ports. * ``--mode:`` Optional, Packet transfer mode for I/O, poll or eventdev. @@ -140,7 +142,7 @@ Where, * ``--event-vector-tmo:`` Optional, Max timeout to form vector in nanoseconds if event vectorization is enabled. -* ``--alg=:`` optional, ACL classify method to use, one of: +* ``--alg=:`` Optional, ACL classify method to use, one of: ``scalar|sse|avx2|neon|altivec|avx512x16|avx512x32`` * ``-E:`` Optional, enable exact match,