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 A3C5842B3E; Fri, 19 May 2023 02:23:33 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 3350040A82; Fri, 19 May 2023 02:23:33 +0200 (CEST) Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) by mails.dpdk.org (Postfix) with ESMTP id E84E4406B5 for ; Fri, 19 May 2023 02:23:31 +0200 (CEST) Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-1ae4ecfa7c3so16512595ad.3 for ; Thu, 18 May 2023 17:23:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1684455811; x=1687047811; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=3PD6qAD6y4nvbyZR9VAVQKqjdRHg4li5P12h4jXL1Q0=; b=iSHIAxpqfJsLDNiiqGRM6/NPWkZv1/AvyowdkmpnNcJxx+2eWDPpyhqCgTygZ9DZ2T uAdsZ+vjo3yCR9MH4KSYan4w/ZT9yr844buCgLjk4wevz8OskgVUT6y7D02qnXzwspSe KV3LBrLsnyDJLrKTmiSpAJ+RBujtKyk5L7rMBLd24TEUBP2vsX592iEiXwIfHqeuDDXt 3EjrStosiYBXxxlGdvg7xHO3KZqLmVgl+B9vjL67uRGTuGb9ptAjd/GJqEYxX4tOeSb7 uYQdK60UeiMbtg1JD0X5Nb9I9dHR7uch0rrKwYbBonUQ2DhRSh76bHo8r9LaIJvZ0zSU MzZg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684455811; x=1687047811; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=3PD6qAD6y4nvbyZR9VAVQKqjdRHg4li5P12h4jXL1Q0=; b=Hin3j0IpxE8JJI1PXD85ITjyzpFPM3kxUBhVicDkiUU94J3rpx8+szbBwjfuP0qcyJ DfpgJMWH9EpwrzPtO6tn5VQ0YKxZfEoWvKnPjmoN87U290YKGSxHfffeALTRRmfO9nfV KqQzjF8gMUGlNGH0Z/FGrlhMUqwHUdCJUBG6cATXXBUx5LvPrTPWXFw3rjmeUJD2RgkB za1+1SzD4137Kxrn4z3wrDK27KcYGas6M81rct6Lnbyzb+p+VzY39sIYegjaVc2dBFyT 75zUhnYRQdipRtyAq2lLJQKY00f3LIw1k46ID4+4a5Q5mk3N1jsJcsppzGqr9k0mj/5m bfAQ== X-Gm-Message-State: AC+VfDxYX8dX25WOZ3jWlk55POBJMb2YXOriIO9t6fONnd94rytBkKV1 a/YYNbiAPrCXacojtN/C92Lxw/uALDNQVA== X-Google-Smtp-Source: ACHHUZ6xGurTjNPa0J7osaFqPhWZqdlRf11PaEN+/ntt2MbK2xvjZD2YONv+/Sr21Slej0h8I4BouzG+FKxg9Q== X-Received: from joshwash.sea.corp.google.com ([2620:15c:100:202:902f:95c4:e6c2:b245]) (user=joshwash job=sendgmr) by 2002:a17:902:f08a:b0:1ac:82e8:4917 with SMTP id p10-20020a170902f08a00b001ac82e84917mr179425pla.13.1684455811041; Thu, 18 May 2023 17:23:31 -0700 (PDT) Date: Thu, 18 May 2023 17:22:49 -0700 In-Reply-To: <20230421232022.342081-1-joshwash@google.com> Mime-Version: 1.0 References: <20230421232022.342081-1-joshwash@google.com> X-Mailer: git-send-email 2.40.1.698.g37aff9b760-goog Message-ID: <20230519002249.2525777-1-joshwash@google.com> Subject: [PATCH v6] app/testpmd: txonly multiflow port change support From: Joshua Washington To: Aman Singh , Yuying Zhang Cc: dev@dpdk.org, Ferruh Yigit , Joshua Washington , Rushil Gupta Content-Type: text/plain; charset="UTF-8" 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 Google cloud routes traffic using IP addresses without the support of MAC addresses, so changing source IP address for txonly-multi-flow can have negative performance implications for net/gve when using testpmd. This patch updates txonly multiflow mode to modify source ports instead of source IP addresses. The change can be tested with the following command: dpdk-testpmd -- --forward-mode=txonly --txonly-multi-flow \ --tx-ip=, Signed-off-by: Joshua Washington Reviewed-by: Rushil Gupta --- app/test-pmd/txonly.c | 38 ++++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/app/test-pmd/txonly.c b/app/test-pmd/txonly.c index b3d6873104..c2b88764be 100644 --- a/app/test-pmd/txonly.c +++ b/app/test-pmd/txonly.c @@ -56,7 +56,7 @@ uint32_t tx_ip_dst_addr = (198U << 24) | (18 << 16) | (0 << 8) | 2; #define IP_DEFTTL 64 /* from RFC 1340. */ static struct rte_ipv4_hdr pkt_ip_hdr; /**< IP header of transmitted packets. */ -RTE_DEFINE_PER_LCORE(uint8_t, _ip_var); /**< IP address variation */ +RTE_DEFINE_PER_LCORE(uint8_t, _src_port_var); /**< Source port variation */ static struct rte_udp_hdr pkt_udp_hdr; /**< UDP header of tx packets. */ static uint64_t timestamp_mask; /**< Timestamp dynamic flag mask */ @@ -230,28 +230,34 @@ pkt_burst_prepare(struct rte_mbuf *pkt, struct rte_mempool *mbp, copy_buf_to_pkt(eth_hdr, sizeof(*eth_hdr), pkt, 0); copy_buf_to_pkt(&pkt_ip_hdr, sizeof(pkt_ip_hdr), pkt, sizeof(struct rte_ether_hdr)); + copy_buf_to_pkt(&pkt_udp_hdr, sizeof(pkt_udp_hdr), pkt, + sizeof(struct rte_ether_hdr) + + sizeof(struct rte_ipv4_hdr)); if (txonly_multi_flow) { - uint8_t ip_var = RTE_PER_LCORE(_ip_var); - struct rte_ipv4_hdr *ip_hdr; - uint32_t addr; + uint16_t src_var = RTE_PER_LCORE(_src_port_var); + struct rte_udp_hdr *udp_hdr; + uint16_t src_port; - ip_hdr = rte_pktmbuf_mtod_offset(pkt, - struct rte_ipv4_hdr *, - sizeof(struct rte_ether_hdr)); + udp_hdr = rte_pktmbuf_mtod_offset(pkt, + struct rte_udp_hdr *, + sizeof(struct rte_ether_hdr) + + sizeof(struct rte_ipv4_hdr)); /* - * Generate multiple flows by varying IP src addr. This - * enables packets are well distributed by RSS in + * Generate multiple flows by varying UDP source port. + * This enables packets are well distributed by RSS in * receiver side if any and txonly mode can be a decent * packet generator for developer's quick performance * regression test. + * + * Only ports in the range 49152 (0xC000) and 65535 (0xFFFF) + * will be used, with the least significant byte representing + * the lcore ID. As such, the most significant byte will cycle + * through 0xC0 and 0xFF. */ - addr = (tx_ip_dst_addr | (ip_var++ << 8)) + rte_lcore_id(); - ip_hdr->src_addr = rte_cpu_to_be_32(addr); - RTE_PER_LCORE(_ip_var) = ip_var; + src_port = ((src_var++ | 0xC0) << 8) + rte_lcore_id(); + udp_hdr->src_port = rte_cpu_to_be_16(src_port); + RTE_PER_LCORE(_src_port_var) = src_var; } - copy_buf_to_pkt(&pkt_udp_hdr, sizeof(pkt_udp_hdr), pkt, - sizeof(struct rte_ether_hdr) + - sizeof(struct rte_ipv4_hdr)); if (unlikely(tx_pkt_split == TX_PKT_SPLIT_RND) || txonly_multi_flow) update_pkt_header(pkt, pkt_len); @@ -393,7 +399,7 @@ pkt_burst_transmit(struct fwd_stream *fs) nb_tx = common_fwd_stream_transmit(fs, pkts_burst, nb_pkt); if (txonly_multi_flow) - RTE_PER_LCORE(_ip_var) -= nb_pkt - nb_tx; + RTE_PER_LCORE(_src_port_var) -= nb_pkt - nb_tx; if (unlikely(nb_tx < nb_pkt)) { if (verbose_level > 0 && fs->fwd_dropped == 0) -- 2.40.1.698.g37aff9b760-goog