From patchwork Tue Jan 24 10:47:37 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Marchand X-Patchwork-Id: 122468 X-Patchwork-Delegate: ferruh.yigit@amd.com 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 38FF042476; Tue, 24 Jan 2023 11:48:01 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 218EF4282D; Tue, 24 Jan 2023 11:47:59 +0100 (CET) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mails.dpdk.org (Postfix) with ESMTP id 43CF9427EE for ; Tue, 24 Jan 2023 11:47:58 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1674557277; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=72q59qd/CyMnZvWpIFPcc+zu+6RRVf5JktENFxz6A/g=; b=bPp5TND97DRO9xxNz8WUZZL5sNS+8FTrre12mZXmFnRapbAJYRFFSCtZhdHT5V+nl16tSp MqrA2dR/V4XznPGV89R2HT3p/x1IEXfxZxW/yrl9gKcLDx1VjvHm1unHe03GbNtvIoZvQe hEEEdBTjO3gAWhef6eDjF+bzpwIqM2A= Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-358-XDVO9V5nOnCV5dIUkiqoBQ-1; Tue, 24 Jan 2023 05:47:54 -0500 X-MC-Unique: XDVO9V5nOnCV5dIUkiqoBQ-1 Received: from smtp.corp.redhat.com (int-mx09.intmail.prod.int.rdu2.redhat.com [10.11.54.9]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 0D5891C0518B; Tue, 24 Jan 2023 10:47:54 +0000 (UTC) Received: from dmarchan.redhat.com (ovpn-192-67.brq.redhat.com [10.40.192.67]) by smtp.corp.redhat.com (Postfix) with ESMTP id B5901492C3C; Tue, 24 Jan 2023 10:47:52 +0000 (UTC) From: David Marchand To: dev@dpdk.org Cc: Ferruh Yigit , Aman Singh , Yuying Zhang , Robin Jarry Subject: [PATCH 1/6] app/testpmd: factorize core cycles record Date: Tue, 24 Jan 2023 11:47:37 +0100 Message-Id: <20230124104742.1265439-2-david.marchand@redhat.com> In-Reply-To: <20230124104742.1265439-1-david.marchand@redhat.com> References: <20230124104742.1265439-1-david.marchand@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.9 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com 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 Rather than have each forward engines deal with core cycles recording, move this to testpmd common code. fwd engines just need to report that they did some busy work. Signed-off-by: David Marchand Reviewed-by: Ferruh Yigit --- app/test-pmd/5tswap.c | 11 ++++------- app/test-pmd/csumonly.c | 10 +++------- app/test-pmd/flowgen.c | 7 ++----- app/test-pmd/icmpecho.c | 9 +++------ app/test-pmd/ieee1588fwd.c | 17 +++++++++-------- app/test-pmd/iofwd.c | 9 +++------ app/test-pmd/macfwd.c | 9 +++------ app/test-pmd/macswap.c | 10 ++++------ app/test-pmd/noisy_vnf.c | 26 +++++++++++++++----------- app/test-pmd/rxonly.c | 9 +++------ app/test-pmd/shared_rxq_fwd.c | 9 ++++----- app/test-pmd/testpmd.c | 12 +++++++++--- app/test-pmd/testpmd.h | 2 +- app/test-pmd/txonly.c | 9 +++------ 14 files changed, 66 insertions(+), 83 deletions(-) diff --git a/app/test-pmd/5tswap.c b/app/test-pmd/5tswap.c index f041a5e1d5..e665643a65 100644 --- a/app/test-pmd/5tswap.c +++ b/app/test-pmd/5tswap.c @@ -81,7 +81,7 @@ swap_udp(struct rte_udp_hdr *udp_hdr) * 2,3,4. Swaps source and destination for MAC, IPv4/IPv6, UDP/TCP. * Parses each layer and swaps it. When the next layer doesn't match it stops. */ -static void +static bool pkt_burst_5tuple_swap(struct fwd_stream *fs) { struct rte_mbuf *pkts_burst[MAX_PKT_BURST]; @@ -105,10 +105,6 @@ pkt_burst_5tuple_swap(struct fwd_stream *fs) uint8_t *byte; } h; - uint64_t start_tsc = 0; - - get_start_cycles(&start_tsc); - /* * Receive a burst of packets and forward them. */ @@ -116,7 +112,7 @@ pkt_burst_5tuple_swap(struct fwd_stream *fs) nb_pkt_per_burst); inc_rx_burst_stats(fs, nb_rx); if (unlikely(nb_rx == 0)) - return; + return false; fs->rx_packets += nb_rx; txp = &ports[fs->tx_port]; @@ -182,7 +178,8 @@ pkt_burst_5tuple_swap(struct fwd_stream *fs) rte_pktmbuf_free(pkts_burst[nb_tx]); } while (++nb_tx < nb_rx); } - get_end_cycles(fs, start_tsc); + + return true; } static void diff --git a/app/test-pmd/csumonly.c b/app/test-pmd/csumonly.c index 1c24598515..dc64754a05 100644 --- a/app/test-pmd/csumonly.c +++ b/app/test-pmd/csumonly.c @@ -828,7 +828,7 @@ pkts_ip_csum_recalc(struct rte_mbuf **pkts_burst, const uint16_t nb_pkts, uint64 * IP, UDP, TCP and SCTP flags always concern the inner layer. The * OUTER_IP is only useful for tunnel packets. */ -static void +static bool pkt_burst_checksum_forward(struct fwd_stream *fs) { struct rte_mbuf *pkts_burst[MAX_PKT_BURST]; @@ -859,16 +859,12 @@ pkt_burst_checksum_forward(struct fwd_stream *fs) uint32_t rx_bad_outer_ip_csum; struct testpmd_offload_info info; - uint64_t start_tsc = 0; - - get_start_cycles(&start_tsc); - /* receive a burst of packet */ nb_rx = rte_eth_rx_burst(fs->rx_port, fs->rx_queue, pkts_burst, nb_pkt_per_burst); inc_rx_burst_stats(fs, nb_rx); if (unlikely(nb_rx == 0)) - return; + return false; fs->rx_packets += nb_rx; rx_bad_ip_csum = 0; @@ -1201,7 +1197,7 @@ pkt_burst_checksum_forward(struct fwd_stream *fs) } while (++nb_tx < nb_rx); } - get_end_cycles(fs, start_tsc); + return true; } static void diff --git a/app/test-pmd/flowgen.c b/app/test-pmd/flowgen.c index fd6abc0f41..f26fd830f1 100644 --- a/app/test-pmd/flowgen.c +++ b/app/test-pmd/flowgen.c @@ -58,7 +58,7 @@ RTE_DEFINE_PER_LCORE(int, _next_flow); * terminate receive traffic. Received traffic is simply discarded, but we * still do so in order to maintain traffic statistics. */ -static void +static bool pkt_burst_flow_gen(struct fwd_stream *fs) { unsigned pkt_size = tx_pkt_length - 4; /* Adjust FCS */ @@ -78,11 +78,8 @@ pkt_burst_flow_gen(struct fwd_stream *fs) uint16_t i; uint32_t retry; uint64_t tx_offloads; - uint64_t start_tsc = 0; int next_flow = RTE_PER_LCORE(_next_flow); - get_start_cycles(&start_tsc); - /* Receive a burst of packets and discard them. */ nb_rx = rte_eth_rx_burst(fs->rx_port, fs->rx_queue, pkts_burst, nb_pkt_per_burst); @@ -196,7 +193,7 @@ pkt_burst_flow_gen(struct fwd_stream *fs) RTE_PER_LCORE(_next_flow) = next_flow; - get_end_cycles(fs, start_tsc); + return true; } static int diff --git a/app/test-pmd/icmpecho.c b/app/test-pmd/icmpecho.c index 066f2a3ab7..cd984d1ffb 100644 --- a/app/test-pmd/icmpecho.c +++ b/app/test-pmd/icmpecho.c @@ -269,7 +269,7 @@ ipv4_hdr_cksum(struct rte_ipv4_hdr *ip_h) * Receive a burst of packets, lookup for ICMP echo requests, and, if any, * send back ICMP echo replies. */ -static void +static bool reply_to_icmp_echo_rqsts(struct fwd_stream *fs) { struct rte_mbuf *pkts_burst[MAX_PKT_BURST]; @@ -292,9 +292,6 @@ reply_to_icmp_echo_rqsts(struct fwd_stream *fs) uint32_t cksum; uint8_t i; int l2_len; - uint64_t start_tsc = 0; - - get_start_cycles(&start_tsc); /* * First, receive a burst of packets. @@ -303,7 +300,7 @@ reply_to_icmp_echo_rqsts(struct fwd_stream *fs) nb_pkt_per_burst); inc_rx_burst_stats(fs, nb_rx); if (unlikely(nb_rx == 0)) - return; + return false; fs->rx_packets += nb_rx; nb_replies = 0; @@ -509,7 +506,7 @@ reply_to_icmp_echo_rqsts(struct fwd_stream *fs) } } - get_end_cycles(fs, start_tsc); + return true; } static void diff --git a/app/test-pmd/ieee1588fwd.c b/app/test-pmd/ieee1588fwd.c index fc4e2d014c..dab582cbf7 100644 --- a/app/test-pmd/ieee1588fwd.c +++ b/app/test-pmd/ieee1588fwd.c @@ -89,7 +89,7 @@ port_ieee1588_tx_timestamp_check(portid_t pi) (wait_us == 1) ? "" : "s"); } -static void +static bool ieee1588_packet_fwd(struct fwd_stream *fs) { struct rte_mbuf *mb; @@ -103,7 +103,7 @@ ieee1588_packet_fwd(struct fwd_stream *fs) * Receive 1 packet at a time. */ if (rte_eth_rx_burst(fs->rx_port, fs->rx_queue, &mb, 1) == 0) - return; + return false; fs->rx_packets += 1; @@ -126,14 +126,14 @@ ieee1588_packet_fwd(struct fwd_stream *fs) (unsigned) mb->pkt_len); } rte_pktmbuf_free(mb); - return; + return false; } if (eth_type != RTE_ETHER_TYPE_1588) { printf("Port %u Received NON PTP packet incorrectly" " detected by hardware\n", fs->rx_port); rte_pktmbuf_free(mb); - return; + return false; } /* @@ -147,14 +147,14 @@ ieee1588_packet_fwd(struct fwd_stream *fs) " protocol version 0x%x (should be 0x02)\n", fs->rx_port, ptp_hdr->version); rte_pktmbuf_free(mb); - return; + return false; } if (ptp_hdr->msg_id != PTP_SYNC_MESSAGE) { printf("Port %u Received PTP V2 Ethernet frame with unexpected" " message ID 0x%x (expected 0x0 - PTP_SYNC_MESSAGE)\n", fs->rx_port, ptp_hdr->msg_id); rte_pktmbuf_free(mb); - return; + return false; } printf("Port %u IEEE1588 PTP V2 SYNC Message filtered by hardware\n", fs->rx_port); @@ -168,7 +168,7 @@ ieee1588_packet_fwd(struct fwd_stream *fs) " by hardware\n", fs->rx_port); rte_pktmbuf_free(mb); - return; + return false; } /* For i40e we need the timesync register index. It is ignored for the @@ -189,13 +189,14 @@ ieee1588_packet_fwd(struct fwd_stream *fs) printf("Port %u sent PTP packet dropped\n", fs->rx_port); fs->fwd_dropped += 1; rte_pktmbuf_free(mb); - return; + return false; } /* * Check the TX timestamp. */ port_ieee1588_tx_timestamp_check(fs->rx_port); + return true; } static int diff --git a/app/test-pmd/iofwd.c b/app/test-pmd/iofwd.c index 8fafdec548..8218bd6b4b 100644 --- a/app/test-pmd/iofwd.c +++ b/app/test-pmd/iofwd.c @@ -41,16 +41,13 @@ * This is the fastest possible forwarding operation, as it does not access * to packets data. */ -static void +static bool pkt_burst_io_forward(struct fwd_stream *fs) { struct rte_mbuf *pkts_burst[MAX_PKT_BURST]; uint16_t nb_rx; uint16_t nb_tx; uint32_t retry; - uint64_t start_tsc = 0; - - get_start_cycles(&start_tsc); /* * Receive a burst of packets and forward them. @@ -59,7 +56,7 @@ pkt_burst_io_forward(struct fwd_stream *fs) pkts_burst, nb_pkt_per_burst); inc_rx_burst_stats(fs, nb_rx); if (unlikely(nb_rx == 0)) - return; + return false; fs->rx_packets += nb_rx; nb_tx = rte_eth_tx_burst(fs->tx_port, fs->tx_queue, @@ -84,7 +81,7 @@ pkt_burst_io_forward(struct fwd_stream *fs) } while (++nb_tx < nb_rx); } - get_end_cycles(fs, start_tsc); + return true; } static void diff --git a/app/test-pmd/macfwd.c b/app/test-pmd/macfwd.c index beb220fbb4..c1b116e559 100644 --- a/app/test-pmd/macfwd.c +++ b/app/test-pmd/macfwd.c @@ -41,7 +41,7 @@ * Change the source and the destination Ethernet addressed of packets * before forwarding them. */ -static void +static bool pkt_burst_mac_forward(struct fwd_stream *fs) { struct rte_mbuf *pkts_burst[MAX_PKT_BURST]; @@ -54,9 +54,6 @@ pkt_burst_mac_forward(struct fwd_stream *fs) uint16_t i; uint64_t ol_flags = 0; uint64_t tx_offloads; - uint64_t start_tsc = 0; - - get_start_cycles(&start_tsc); /* * Receive a burst of packets and forward them. @@ -65,7 +62,7 @@ pkt_burst_mac_forward(struct fwd_stream *fs) nb_pkt_per_burst); inc_rx_burst_stats(fs, nb_rx); if (unlikely(nb_rx == 0)) - return; + return false; fs->rx_packets += nb_rx; txp = &ports[fs->tx_port]; @@ -115,7 +112,7 @@ pkt_burst_mac_forward(struct fwd_stream *fs) } while (++nb_tx < nb_rx); } - get_end_cycles(fs, start_tsc); + return true; } static void diff --git a/app/test-pmd/macswap.c b/app/test-pmd/macswap.c index 4f8deb3382..361341e075 100644 --- a/app/test-pmd/macswap.c +++ b/app/test-pmd/macswap.c @@ -47,7 +47,7 @@ * MAC swap forwarding mode: Swap the source and the destination Ethernet * addresses of packets before forwarding them. */ -static void +static bool pkt_burst_mac_swap(struct fwd_stream *fs) { struct rte_mbuf *pkts_burst[MAX_PKT_BURST]; @@ -55,9 +55,6 @@ pkt_burst_mac_swap(struct fwd_stream *fs) uint16_t nb_rx; uint16_t nb_tx; uint32_t retry; - uint64_t start_tsc = 0; - - get_start_cycles(&start_tsc); /* * Receive a burst of packets and forward them. @@ -66,7 +63,7 @@ pkt_burst_mac_swap(struct fwd_stream *fs) nb_pkt_per_burst); inc_rx_burst_stats(fs, nb_rx); if (unlikely(nb_rx == 0)) - return; + return false; fs->rx_packets += nb_rx; txp = &ports[fs->tx_port]; @@ -93,7 +90,8 @@ pkt_burst_mac_swap(struct fwd_stream *fs) rte_pktmbuf_free(pkts_burst[nb_tx]); } while (++nb_tx < nb_rx); } - get_end_cycles(fs, start_tsc); + + return true; } static void diff --git a/app/test-pmd/noisy_vnf.c b/app/test-pmd/noisy_vnf.c index c65ec6f06a..e2fecafeac 100644 --- a/app/test-pmd/noisy_vnf.c +++ b/app/test-pmd/noisy_vnf.c @@ -137,7 +137,7 @@ drop_pkts(struct rte_mbuf **pkts, uint16_t nb_rx, uint16_t nb_tx) * out of the FIFO * 4. Cases 2 and 3 combined */ -static void +static bool pkt_burst_noisy_vnf(struct fwd_stream *fs) { const uint64_t freq_khz = rte_get_timer_hz() / 1000; @@ -169,7 +169,8 @@ pkt_burst_noisy_vnf(struct fwd_stream *fs) inc_tx_burst_stats(fs, nb_tx); fs->tx_packets += nb_tx; fs->fwd_dropped += drop_pkts(pkts_burst, nb_rx, nb_tx); - return; + + return true; } fifo_free = rte_ring_free_count(ncf->f); @@ -198,15 +199,16 @@ pkt_burst_noisy_vnf(struct fwd_stream *fs) sim_memory_lookups(ncf, nb_enqd); flush: - if (ncf->do_flush) { - if (!ncf->prev_time) - now = ncf->prev_time = rte_get_timer_cycles(); - else - now = rte_get_timer_cycles(); - delta_ms = (now - ncf->prev_time) / freq_khz; - needs_flush = delta_ms >= noisy_tx_sw_buf_flush_time && - noisy_tx_sw_buf_flush_time > 0 && !nb_tx; - } + if (!ncf->do_flush) + return nb_rx != 0; + + if (!ncf->prev_time) + now = ncf->prev_time = rte_get_timer_cycles(); + else + now = rte_get_timer_cycles(); + delta_ms = (now - ncf->prev_time) / freq_khz; + needs_flush = delta_ms >= noisy_tx_sw_buf_flush_time && + noisy_tx_sw_buf_flush_time > 0 && !nb_tx; while (needs_flush && !rte_ring_empty(ncf->f)) { unsigned int sent; nb_deqd = rte_ring_dequeue_burst(ncf->f, (void **)tmp_pkts, @@ -219,6 +221,8 @@ pkt_burst_noisy_vnf(struct fwd_stream *fs) fs->fwd_dropped += drop_pkts(tmp_pkts, nb_deqd, sent); ncf->prev_time = rte_get_timer_cycles(); } + + return nb_tx != 0; } #define NOISY_STRSIZE 256 diff --git a/app/test-pmd/rxonly.c b/app/test-pmd/rxonly.c index d528d4f34e..375be990bd 100644 --- a/app/test-pmd/rxonly.c +++ b/app/test-pmd/rxonly.c @@ -41,15 +41,12 @@ /* * Received a burst of packets. */ -static void +static bool pkt_burst_receive(struct fwd_stream *fs) { struct rte_mbuf *pkts_burst[MAX_PKT_BURST]; uint16_t nb_rx; uint16_t i; - uint64_t start_tsc = 0; - - get_start_cycles(&start_tsc); /* * Receive a burst of packets. @@ -58,13 +55,13 @@ pkt_burst_receive(struct fwd_stream *fs) nb_pkt_per_burst); inc_rx_burst_stats(fs, nb_rx); if (unlikely(nb_rx == 0)) - return; + return false; fs->rx_packets += nb_rx; for (i = 0; i < nb_rx; i++) rte_pktmbuf_free(pkts_burst[i]); - get_end_cycles(fs, start_tsc); + return true; } static void diff --git a/app/test-pmd/shared_rxq_fwd.c b/app/test-pmd/shared_rxq_fwd.c index 2e9047804b..4b3a87a3ba 100644 --- a/app/test-pmd/shared_rxq_fwd.c +++ b/app/test-pmd/shared_rxq_fwd.c @@ -90,21 +90,20 @@ forward_shared_rxq(struct fwd_stream *fs, uint16_t nb_rx, &pkts_burst[nb_rx - nb_sub_burst]); } -static void +static bool shared_rxq_fwd(struct fwd_stream *fs) { struct rte_mbuf *pkts_burst[nb_pkt_per_burst]; uint16_t nb_rx; - uint64_t start_tsc = 0; - get_start_cycles(&start_tsc); nb_rx = rte_eth_rx_burst(fs->rx_port, fs->rx_queue, pkts_burst, nb_pkt_per_burst); inc_rx_burst_stats(fs, nb_rx); if (unlikely(nb_rx == 0)) - return; + return false; forward_shared_rxq(fs, nb_rx, pkts_burst); - get_end_cycles(fs, start_tsc); + + return true; } static void diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index 134d79a555..9afc107975 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -2263,9 +2263,15 @@ run_pkt_fwd_on_lcore(struct fwd_lcore *fc, packet_fwd_t pkt_fwd) fsm = &fwd_streams[fc->stream_idx]; nb_fs = fc->stream_nb; do { - for (sm_id = 0; sm_id < nb_fs; sm_id++) - if (!fsm[sm_id]->disabled) - (*pkt_fwd)(fsm[sm_id]); + for (sm_id = 0; sm_id < nb_fs; sm_id++) { + uint64_t start_tsc = 0; + + if (fsm[sm_id]->disabled) + continue; + get_start_cycles(&start_tsc); + if (likely((*pkt_fwd)(fsm[sm_id]))) + get_end_cycles(fsm[sm_id], start_tsc); + } #ifdef RTE_LIB_BITRATESTATS if (bitrate_enabled != 0 && bitrate_lcore_id == rte_lcore_id()) { diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index 7d24d25970..5c46844195 100644 --- a/app/test-pmd/testpmd.h +++ b/app/test-pmd/testpmd.h @@ -380,7 +380,7 @@ struct fwd_lcore { typedef int (*port_fwd_begin_t)(portid_t pi); typedef void (*port_fwd_end_t)(portid_t pi); typedef void (*stream_init_t)(struct fwd_stream *fs); -typedef void (*packet_fwd_t)(struct fwd_stream *fs); +typedef bool (*packet_fwd_t)(struct fwd_stream *fs); struct fwd_engine { const char *fwd_mode_name; /**< Forwarding mode name. */ diff --git a/app/test-pmd/txonly.c b/app/test-pmd/txonly.c index 021624952d..23e51a1bec 100644 --- a/app/test-pmd/txonly.c +++ b/app/test-pmd/txonly.c @@ -323,7 +323,7 @@ pkt_burst_prepare(struct rte_mbuf *pkt, struct rte_mempool *mbp, /* * Transmit a burst of multi-segments packets. */ -static void +static bool pkt_burst_transmit(struct fwd_stream *fs) { struct rte_mbuf *pkts_burst[MAX_PKT_BURST]; @@ -337,9 +337,6 @@ pkt_burst_transmit(struct fwd_stream *fs) uint32_t retry; uint64_t ol_flags = 0; uint64_t tx_offloads; - uint64_t start_tsc = 0; - - get_start_cycles(&start_tsc); mbp = current_fwd_lcore()->mbp; txp = &ports[fs->tx_port]; @@ -392,7 +389,7 @@ pkt_burst_transmit(struct fwd_stream *fs) } if (nb_pkt == 0) - return; + return false; nb_tx = rte_eth_tx_burst(fs->tx_port, fs->tx_queue, pkts_burst, nb_pkt); @@ -426,7 +423,7 @@ pkt_burst_transmit(struct fwd_stream *fs) } while (++nb_tx < nb_pkt); } - get_end_cycles(fs, start_tsc); + return true; } static int From patchwork Tue Jan 24 10:47:38 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Marchand X-Patchwork-Id: 122469 X-Patchwork-Delegate: ferruh.yigit@amd.com 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 9245542476; Tue, 24 Jan 2023 11:48:25 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 82212427EE; Tue, 24 Jan 2023 11:48:25 +0100 (CET) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mails.dpdk.org (Postfix) with ESMTP id 99AC740A89 for ; Tue, 24 Jan 2023 11:48:24 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1674557304; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=BKXUzbcKip1p8FUap9hkY9z42XPVTCux2L0w/m79Zts=; b=V6GPR56kSXk6kMqLPVi52//HcI0ETzwigrtw1xyBv6o0j8oQRqFmc3KvXPiJ66EaeTz51k 3+4owfif4tehurjbzpWJW4ArhykzICdlFWYjzMLzbImFxZRtOJlibSpChm//r3+SvEbfWZ I4bqzL6VP4HtxRtHHihttplCxpCZyUM= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-641-Cv09LqOLOiWN3K4OEO7ExA-1; Tue, 24 Jan 2023 05:48:21 -0500 X-MC-Unique: Cv09LqOLOiWN3K4OEO7ExA-1 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 966DB85CBE0; Tue, 24 Jan 2023 10:48:20 +0000 (UTC) Received: from dmarchan.redhat.com (ovpn-192-67.brq.redhat.com [10.40.192.67]) by smtp.corp.redhat.com (Postfix) with ESMTP id 07B2D2026D4B; Tue, 24 Jan 2023 10:48:18 +0000 (UTC) From: David Marchand To: dev@dpdk.org Cc: Ferruh Yigit , Aman Singh , Yuying Zhang , Robin Jarry , stable@dpdk.org, Tomasz Kulasek , Konstantin Ananyev Subject: [PATCH 2/6] app/testpmd: don't send unprepared packets Date: Tue, 24 Jan 2023 11:47:38 +0100 Message-Id: <20230124104742.1265439-3-david.marchand@redhat.com> In-Reply-To: <20230124104742.1265439-1-david.marchand@redhat.com> References: <20230124104742.1265439-1-david.marchand@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.4 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com 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 "unprepared" packets could get to the wire in the retry loop. Split packets freeing in two stages: one for preparation failure, and one for transmission failure. Adjust dropped counter update accordingly. Fixes: 6b520d54ebfe ("app/testpmd: use Tx preparation in checksum engine") Cc: stable@dpdk.org Signed-off-by: David Marchand Reviewed-by: Ferruh Yigit --- app/test-pmd/csumonly.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/app/test-pmd/csumonly.c b/app/test-pmd/csumonly.c index dc64754a05..700c79f122 100644 --- a/app/test-pmd/csumonly.c +++ b/app/test-pmd/csumonly.c @@ -1164,10 +1164,13 @@ pkt_burst_checksum_forward(struct fwd_stream *fs) nb_prep = rte_eth_tx_prepare(fs->tx_port, fs->tx_queue, tx_pkts_burst, nb_rx); - if (nb_prep != nb_rx) + if (nb_prep != nb_rx) { fprintf(stderr, "Preparing packet burst to transmit failed: %s\n", rte_strerror(rte_errno)); + fs->fwd_dropped += (nb_rx - nb_prep); + rte_pktmbuf_free_bulk(&tx_pkts_burst[nb_prep], nb_rx - nb_prep); + } nb_tx = rte_eth_tx_burst(fs->tx_port, fs->tx_queue, tx_pkts_burst, nb_prep); @@ -1175,12 +1178,12 @@ pkt_burst_checksum_forward(struct fwd_stream *fs) /* * Retry if necessary */ - if (unlikely(nb_tx < nb_rx) && fs->retry_enabled) { + if (unlikely(nb_tx < nb_prep) && fs->retry_enabled) { retry = 0; - while (nb_tx < nb_rx && retry++ < burst_tx_retry_num) { + while (nb_tx < nb_prep && retry++ < burst_tx_retry_num) { rte_delay_us(burst_tx_delay_time); nb_tx += rte_eth_tx_burst(fs->tx_port, fs->tx_queue, - &tx_pkts_burst[nb_tx], nb_rx - nb_tx); + &tx_pkts_burst[nb_tx], nb_prep - nb_tx); } } fs->tx_packets += nb_tx; @@ -1190,11 +1193,11 @@ pkt_burst_checksum_forward(struct fwd_stream *fs) fs->rx_bad_outer_ip_csum += rx_bad_outer_ip_csum; inc_tx_burst_stats(fs, nb_tx); - if (unlikely(nb_tx < nb_rx)) { - fs->fwd_dropped += (nb_rx - nb_tx); + if (unlikely(nb_tx < nb_prep)) { + fs->fwd_dropped += (nb_prep - nb_tx); do { rte_pktmbuf_free(tx_pkts_burst[nb_tx]); - } while (++nb_tx < nb_rx); + } while (++nb_tx < nb_prep); } return true; From patchwork Tue Jan 24 10:47:39 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Marchand X-Patchwork-Id: 122470 X-Patchwork-Delegate: ferruh.yigit@amd.com 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 5AFCB42476; Tue, 24 Jan 2023 11:48:30 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 922D342D3A; Tue, 24 Jan 2023 11:48:28 +0100 (CET) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mails.dpdk.org (Postfix) with ESMTP id AF58642BB1 for ; Tue, 24 Jan 2023 11:48:27 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1674557307; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=kGhVsI2fdFUDwVl8m3ieqaWO0F3pA33zhPn7K/E7vB8=; b=CRggF6h4sMp89tWytFr/XTG0+7qAmGFpuYOSvMuAsbSQJdP2aUaVB+zTJuTgRw93edYyYu hW8lIU7Uo70ZpxdH13lxgld+RK/lxpKtP1WAj9FIQVlqVmhstt8KMeSQd4BjE1r8f5zJqE u4Q14S86XmWO89eQbewa5J9KC4Eu8a4= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-615-uWd8xbxzN6SqnAnsOTatWQ-1; Tue, 24 Jan 2023 05:48:24 -0500 X-MC-Unique: uWd8xbxzN6SqnAnsOTatWQ-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id BD68C183B3C1; Tue, 24 Jan 2023 10:48:23 +0000 (UTC) Received: from dmarchan.redhat.com (ovpn-192-67.brq.redhat.com [10.40.192.67]) by smtp.corp.redhat.com (Postfix) with ESMTP id 9BCF753A0; Tue, 24 Jan 2023 10:48:22 +0000 (UTC) From: David Marchand To: dev@dpdk.org Cc: Ferruh Yigit , Aman Singh , Yuying Zhang , Robin Jarry Subject: [PATCH 3/6] app/testpmd: bulk free mbufs Date: Tue, 24 Jan 2023 11:47:39 +0100 Message-Id: <20230124104742.1265439-4-david.marchand@redhat.com> In-Reply-To: <20230124104742.1265439-1-david.marchand@redhat.com> References: <20230124104742.1265439-1-david.marchand@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.5 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com 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 Use the bulk free helper. Signed-off-by: David Marchand Reviewed-by: Ferruh Yigit --- app/test-pmd/5tswap.c | 4 +--- app/test-pmd/csumonly.c | 4 +--- app/test-pmd/flowgen.c | 8 ++------ app/test-pmd/icmpecho.c | 4 +--- app/test-pmd/iofwd.c | 4 +--- app/test-pmd/macfwd.c | 4 +--- app/test-pmd/macswap.c | 4 +--- app/test-pmd/noisy_vnf.c | 7 ++----- app/test-pmd/rxonly.c | 4 +--- app/test-pmd/shared_rxq_fwd.c | 3 +-- app/test-pmd/testpmd.c | 4 +--- app/test-pmd/txonly.c | 4 +--- 12 files changed, 14 insertions(+), 40 deletions(-) diff --git a/app/test-pmd/5tswap.c b/app/test-pmd/5tswap.c index e665643a65..0a3a897e7b 100644 --- a/app/test-pmd/5tswap.c +++ b/app/test-pmd/5tswap.c @@ -174,9 +174,7 @@ pkt_burst_5tuple_swap(struct fwd_stream *fs) inc_tx_burst_stats(fs, nb_tx); if (unlikely(nb_tx < nb_rx)) { fs->fwd_dropped += (nb_rx - nb_tx); - do { - rte_pktmbuf_free(pkts_burst[nb_tx]); - } while (++nb_tx < nb_rx); + rte_pktmbuf_free_bulk(&pkts_burst[nb_tx], nb_rx - nb_tx); } return true; diff --git a/app/test-pmd/csumonly.c b/app/test-pmd/csumonly.c index 700c79f122..07850501f4 100644 --- a/app/test-pmd/csumonly.c +++ b/app/test-pmd/csumonly.c @@ -1195,9 +1195,7 @@ pkt_burst_checksum_forward(struct fwd_stream *fs) inc_tx_burst_stats(fs, nb_tx); if (unlikely(nb_tx < nb_prep)) { fs->fwd_dropped += (nb_prep - nb_tx); - do { - rte_pktmbuf_free(tx_pkts_burst[nb_tx]); - } while (++nb_tx < nb_prep); + rte_pktmbuf_free_bulk(&tx_pkts_burst[nb_tx], nb_prep - nb_tx); } return true; diff --git a/app/test-pmd/flowgen.c b/app/test-pmd/flowgen.c index f26fd830f1..b3bd4f7c65 100644 --- a/app/test-pmd/flowgen.c +++ b/app/test-pmd/flowgen.c @@ -75,7 +75,6 @@ pkt_burst_flow_gen(struct fwd_stream *fs) uint16_t nb_dropped; uint16_t nb_pkt; uint16_t nb_clones = nb_pkt_flowgen_clones; - uint16_t i; uint32_t retry; uint64_t tx_offloads; int next_flow = RTE_PER_LCORE(_next_flow); @@ -86,8 +85,7 @@ pkt_burst_flow_gen(struct fwd_stream *fs) inc_rx_burst_stats(fs, nb_rx); fs->rx_packets += nb_rx; - for (i = 0; i < nb_rx; i++) - rte_pktmbuf_free(pkts_burst[i]); + rte_pktmbuf_free_bulk(pkts_burst, nb_rx); mbp = current_fwd_lcore()->mbp; vlan_tci = ports[fs->tx_port].tx_vlan_id; @@ -186,9 +184,7 @@ pkt_burst_flow_gen(struct fwd_stream *fs) next_flow += nb_flows_flowgen; fs->fwd_dropped += nb_dropped; - do { - rte_pktmbuf_free(pkts_burst[nb_tx]); - } while (++nb_tx < nb_pkt); + rte_pktmbuf_free_bulk(&pkts_burst[nb_tx], nb_pkt - nb_tx); } RTE_PER_LCORE(_next_flow) = next_flow; diff --git a/app/test-pmd/icmpecho.c b/app/test-pmd/icmpecho.c index cd984d1ffb..5ef1116141 100644 --- a/app/test-pmd/icmpecho.c +++ b/app/test-pmd/icmpecho.c @@ -500,9 +500,7 @@ reply_to_icmp_echo_rqsts(struct fwd_stream *fs) inc_tx_burst_stats(fs, nb_tx); if (unlikely(nb_tx < nb_replies)) { fs->fwd_dropped += (nb_replies - nb_tx); - do { - rte_pktmbuf_free(pkts_burst[nb_tx]); - } while (++nb_tx < nb_replies); + rte_pktmbuf_free_bulk(&pkts_burst[nb_tx], nb_replies - nb_tx); } } diff --git a/app/test-pmd/iofwd.c b/app/test-pmd/iofwd.c index 8218bd6b4b..9d0af5f667 100644 --- a/app/test-pmd/iofwd.c +++ b/app/test-pmd/iofwd.c @@ -76,9 +76,7 @@ pkt_burst_io_forward(struct fwd_stream *fs) inc_tx_burst_stats(fs, nb_tx); if (unlikely(nb_tx < nb_rx)) { fs->fwd_dropped += (nb_rx - nb_tx); - do { - rte_pktmbuf_free(pkts_burst[nb_tx]); - } while (++nb_tx < nb_rx); + rte_pktmbuf_free_bulk(&pkts_burst[nb_tx], nb_rx - nb_tx); } return true; diff --git a/app/test-pmd/macfwd.c b/app/test-pmd/macfwd.c index c1b116e559..3a840247c7 100644 --- a/app/test-pmd/macfwd.c +++ b/app/test-pmd/macfwd.c @@ -107,9 +107,7 @@ pkt_burst_mac_forward(struct fwd_stream *fs) inc_tx_burst_stats(fs, nb_tx); if (unlikely(nb_tx < nb_rx)) { fs->fwd_dropped += (nb_rx - nb_tx); - do { - rte_pktmbuf_free(pkts_burst[nb_tx]); - } while (++nb_tx < nb_rx); + rte_pktmbuf_free_bulk(&pkts_burst[nb_tx], nb_rx - nb_tx); } return true; diff --git a/app/test-pmd/macswap.c b/app/test-pmd/macswap.c index 361341e075..14b3eefffd 100644 --- a/app/test-pmd/macswap.c +++ b/app/test-pmd/macswap.c @@ -86,9 +86,7 @@ pkt_burst_mac_swap(struct fwd_stream *fs) inc_tx_burst_stats(fs, nb_tx); if (unlikely(nb_tx < nb_rx)) { fs->fwd_dropped += (nb_rx - nb_tx); - do { - rte_pktmbuf_free(pkts_burst[nb_tx]); - } while (++nb_tx < nb_rx); + rte_pktmbuf_free_bulk(&pkts_burst[nb_tx], nb_rx - nb_tx); } return true; diff --git a/app/test-pmd/noisy_vnf.c b/app/test-pmd/noisy_vnf.c index e2fecafeac..ecea51b603 100644 --- a/app/test-pmd/noisy_vnf.c +++ b/app/test-pmd/noisy_vnf.c @@ -111,11 +111,8 @@ do_retry(uint16_t nb_rx, uint16_t nb_tx, struct rte_mbuf **pkts, static uint32_t drop_pkts(struct rte_mbuf **pkts, uint16_t nb_rx, uint16_t nb_tx) { - if (nb_tx < nb_rx) { - do { - rte_pktmbuf_free(pkts[nb_tx]); - } while (++nb_tx < nb_rx); - } + if (nb_tx < nb_rx) + rte_pktmbuf_free_bulk(&pkts[nb_tx], nb_rx - nb_tx); return nb_rx - nb_tx; } diff --git a/app/test-pmd/rxonly.c b/app/test-pmd/rxonly.c index 375be990bd..ad4597cf9a 100644 --- a/app/test-pmd/rxonly.c +++ b/app/test-pmd/rxonly.c @@ -46,7 +46,6 @@ pkt_burst_receive(struct fwd_stream *fs) { struct rte_mbuf *pkts_burst[MAX_PKT_BURST]; uint16_t nb_rx; - uint16_t i; /* * Receive a burst of packets. @@ -58,8 +57,7 @@ pkt_burst_receive(struct fwd_stream *fs) return false; fs->rx_packets += nb_rx; - for (i = 0; i < nb_rx; i++) - rte_pktmbuf_free(pkts_burst[i]); + rte_pktmbuf_free_bulk(pkts_burst, nb_rx); return true; } diff --git a/app/test-pmd/shared_rxq_fwd.c b/app/test-pmd/shared_rxq_fwd.c index 4b3a87a3ba..4902ec407e 100644 --- a/app/test-pmd/shared_rxq_fwd.c +++ b/app/test-pmd/shared_rxq_fwd.c @@ -53,8 +53,7 @@ forward_sub_burst(struct fwd_stream *src_fs, uint16_t port, uint16_t nb_rx, } else { /* Source stream not found, drop all packets. */ src_fs->fwd_dropped += nb_rx; - while (nb_rx > 0) - rte_pktmbuf_free(pkts[--nb_rx]); + rte_pktmbuf_free_bulk(pkts, nb_rx); } } diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index 9afc107975..dab67bce5c 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -2196,7 +2196,6 @@ flush_fwd_rx_queues(void) portid_t port_id; queueid_t rxq; uint16_t nb_rx; - uint16_t i; uint8_t j; uint64_t prev_tsc = 0, diff_tsc, cur_tsc, timer_tsc = 0; uint64_t timer_period; @@ -2229,8 +2228,7 @@ flush_fwd_rx_queues(void) do { nb_rx = rte_eth_rx_burst(port_id, rxq, pkts_burst, MAX_PKT_BURST); - for (i = 0; i < nb_rx; i++) - rte_pktmbuf_free(pkts_burst[i]); + rte_pktmbuf_free_bulk(pkts_burst, nb_rx); cur_tsc = rte_rdtsc(); diff_tsc = cur_tsc - prev_tsc; diff --git a/app/test-pmd/txonly.c b/app/test-pmd/txonly.c index 23e51a1bec..63ad5e69bf 100644 --- a/app/test-pmd/txonly.c +++ b/app/test-pmd/txonly.c @@ -418,9 +418,7 @@ pkt_burst_transmit(struct fwd_stream *fs) (unsigned) nb_pkt, (unsigned) nb_tx, (unsigned) (nb_pkt - nb_tx)); fs->fwd_dropped += (nb_pkt - nb_tx); - do { - rte_pktmbuf_free(pkts_burst[nb_tx]); - } while (++nb_tx < nb_pkt); + rte_pktmbuf_free_bulk(&pkts_burst[nb_tx], nb_pkt - nb_tx); } return true; From patchwork Tue Jan 24 10:47:40 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Marchand X-Patchwork-Id: 122471 X-Patchwork-Delegate: ferruh.yigit@amd.com 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 F196942476; Tue, 24 Jan 2023 11:48:39 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id CFC2942D44; Tue, 24 Jan 2023 11:48:32 +0100 (CET) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mails.dpdk.org (Postfix) with ESMTP id 35D9242D32 for ; Tue, 24 Jan 2023 11:48:31 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1674557310; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=wSmUZypOd3anPFIAsN8KOdBaoQMgl3WnLOC8c0MA+cM=; b=DY+MrkRqtv7y/rkIdJfWyYDsIxp5A9NvisGWPiTP1qgmpISBwK0m9IqKUmye0mTf7eOEwg KjfJR5y02nKkBrumTHC7fq5+Rg8En9zvjW2v9479TzUKiHiX9SQoGJod3IPG919PQihshl HkZgkNTM8AB12qXrOWh1J2m00Zrkkv4= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-99-k-_T3KffNyOvyRMDW9RBIg-1; Tue, 24 Jan 2023 05:48:27 -0500 X-MC-Unique: k-_T3KffNyOvyRMDW9RBIg-1 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 42CD385A588; Tue, 24 Jan 2023 10:48:27 +0000 (UTC) Received: from dmarchan.redhat.com (ovpn-192-67.brq.redhat.com [10.40.192.67]) by smtp.corp.redhat.com (Postfix) with ESMTP id EF5781121330; Tue, 24 Jan 2023 10:48:25 +0000 (UTC) From: David Marchand To: dev@dpdk.org Cc: Ferruh Yigit , Aman Singh , Yuying Zhang , Robin Jarry Subject: [PATCH 4/6] app/testpmd: factorize fwd engine init Date: Tue, 24 Jan 2023 11:47:40 +0100 Message-Id: <20230124104742.1265439-5-david.marchand@redhat.com> In-Reply-To: <20230124104742.1265439-1-david.marchand@redhat.com> References: <20230124104742.1265439-1-david.marchand@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.3 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com 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 Reduce code duplication by introducing a helper that takes care of initialising the fs object. While at it, remove unneeded initialisation of fwd_engine empty fields. Signed-off-by: David Marchand Reviewed-by: Ferruh Yigit --- app/test-pmd/5tswap.c | 16 +--------------- app/test-pmd/csumonly.c | 16 +--------------- app/test-pmd/flowgen.c | 15 +-------------- app/test-pmd/icmpecho.c | 16 +--------------- app/test-pmd/ieee1588fwd.c | 14 +------------- app/test-pmd/iofwd.c | 16 +--------------- app/test-pmd/macfwd.c | 16 +--------------- app/test-pmd/macswap.c | 16 +--------------- app/test-pmd/noisy_vnf.c | 14 +------------- app/test-pmd/shared_rxq_fwd.c | 2 -- app/test-pmd/testpmd.c | 10 ++++++++++ app/test-pmd/testpmd.h | 2 ++ app/test-pmd/txonly.c | 1 - 13 files changed, 21 insertions(+), 133 deletions(-) diff --git a/app/test-pmd/5tswap.c b/app/test-pmd/5tswap.c index 0a3a897e7b..7b5f58f4d4 100644 --- a/app/test-pmd/5tswap.c +++ b/app/test-pmd/5tswap.c @@ -180,22 +180,8 @@ pkt_burst_5tuple_swap(struct fwd_stream *fs) return true; } -static void -stream_init_5tuple_swap(struct fwd_stream *fs) -{ - bool rx_stopped, tx_stopped; - - rx_stopped = ports[fs->rx_port].rxq[fs->rx_queue].state == - RTE_ETH_QUEUE_STATE_STOPPED; - tx_stopped = ports[fs->tx_port].txq[fs->tx_queue].state == - RTE_ETH_QUEUE_STATE_STOPPED; - fs->disabled = rx_stopped || tx_stopped; -} - struct fwd_engine five_tuple_swap_fwd_engine = { .fwd_mode_name = "5tswap", - .port_fwd_begin = NULL, - .port_fwd_end = NULL, - .stream_init = stream_init_5tuple_swap, + .stream_init = common_fwd_stream_init, .packet_fwd = pkt_burst_5tuple_swap, }; diff --git a/app/test-pmd/csumonly.c b/app/test-pmd/csumonly.c index 07850501f4..f72e2d74c7 100644 --- a/app/test-pmd/csumonly.c +++ b/app/test-pmd/csumonly.c @@ -1201,22 +1201,8 @@ pkt_burst_checksum_forward(struct fwd_stream *fs) return true; } -static void -stream_init_checksum_forward(struct fwd_stream *fs) -{ - bool rx_stopped, tx_stopped; - - rx_stopped = ports[fs->rx_port].rxq[fs->rx_queue].state == - RTE_ETH_QUEUE_STATE_STOPPED; - tx_stopped = ports[fs->tx_port].txq[fs->tx_queue].state == - RTE_ETH_QUEUE_STATE_STOPPED; - fs->disabled = rx_stopped || tx_stopped; -} - struct fwd_engine csum_fwd_engine = { .fwd_mode_name = "csum", - .port_fwd_begin = NULL, - .port_fwd_end = NULL, - .stream_init = stream_init_checksum_forward, + .stream_init = common_fwd_stream_init, .packet_fwd = pkt_burst_checksum_forward, }; diff --git a/app/test-pmd/flowgen.c b/app/test-pmd/flowgen.c index b3bd4f7c65..6f42019353 100644 --- a/app/test-pmd/flowgen.c +++ b/app/test-pmd/flowgen.c @@ -199,22 +199,9 @@ flowgen_begin(portid_t pi) return 0; } -static void -flowgen_stream_init(struct fwd_stream *fs) -{ - bool rx_stopped, tx_stopped; - - rx_stopped = ports[fs->rx_port].rxq[fs->rx_queue].state == - RTE_ETH_QUEUE_STATE_STOPPED; - tx_stopped = ports[fs->tx_port].txq[fs->tx_queue].state == - RTE_ETH_QUEUE_STATE_STOPPED; - fs->disabled = rx_stopped || tx_stopped; -} - struct fwd_engine flow_gen_engine = { .fwd_mode_name = "flowgen", .port_fwd_begin = flowgen_begin, - .port_fwd_end = NULL, - .stream_init = flowgen_stream_init, + .stream_init = common_fwd_stream_init, .packet_fwd = pkt_burst_flow_gen, }; diff --git a/app/test-pmd/icmpecho.c b/app/test-pmd/icmpecho.c index 5ef1116141..eba8b99f1e 100644 --- a/app/test-pmd/icmpecho.c +++ b/app/test-pmd/icmpecho.c @@ -507,22 +507,8 @@ reply_to_icmp_echo_rqsts(struct fwd_stream *fs) return true; } -static void -icmpecho_stream_init(struct fwd_stream *fs) -{ - bool rx_stopped, tx_stopped; - - rx_stopped = ports[fs->rx_port].rxq[fs->rx_queue].state == - RTE_ETH_QUEUE_STATE_STOPPED; - tx_stopped = ports[fs->tx_port].txq[fs->tx_queue].state == - RTE_ETH_QUEUE_STATE_STOPPED; - fs->disabled = rx_stopped || tx_stopped; -} - struct fwd_engine icmp_echo_engine = { .fwd_mode_name = "icmpecho", - .port_fwd_begin = NULL, - .port_fwd_end = NULL, - .stream_init = icmpecho_stream_init, + .stream_init = common_fwd_stream_init, .packet_fwd = reply_to_icmp_echo_rqsts, }; diff --git a/app/test-pmd/ieee1588fwd.c b/app/test-pmd/ieee1588fwd.c index dab582cbf7..db7009c678 100644 --- a/app/test-pmd/ieee1588fwd.c +++ b/app/test-pmd/ieee1588fwd.c @@ -212,22 +212,10 @@ port_ieee1588_fwd_end(portid_t pi) rte_eth_timesync_disable(pi); } -static void -port_ieee1588_stream_init(struct fwd_stream *fs) -{ - bool rx_stopped, tx_stopped; - - rx_stopped = ports[fs->rx_port].rxq[fs->rx_queue].state == - RTE_ETH_QUEUE_STATE_STOPPED; - tx_stopped = ports[fs->tx_port].txq[fs->tx_queue].state == - RTE_ETH_QUEUE_STATE_STOPPED; - fs->disabled = rx_stopped || tx_stopped; -} - struct fwd_engine ieee1588_fwd_engine = { .fwd_mode_name = "ieee1588", .port_fwd_begin = port_ieee1588_fwd_begin, .port_fwd_end = port_ieee1588_fwd_end, - .stream_init = port_ieee1588_stream_init, + .stream_init = common_fwd_stream_init, .packet_fwd = ieee1588_packet_fwd, }; diff --git a/app/test-pmd/iofwd.c b/app/test-pmd/iofwd.c index 9d0af5f667..12be06fa79 100644 --- a/app/test-pmd/iofwd.c +++ b/app/test-pmd/iofwd.c @@ -82,22 +82,8 @@ pkt_burst_io_forward(struct fwd_stream *fs) return true; } -static void -stream_init_forward(struct fwd_stream *fs) -{ - bool rx_stopped, tx_stopped; - - rx_stopped = ports[fs->rx_port].rxq[fs->rx_queue].state == - RTE_ETH_QUEUE_STATE_STOPPED; - tx_stopped = ports[fs->tx_port].txq[fs->tx_queue].state == - RTE_ETH_QUEUE_STATE_STOPPED; - fs->disabled = rx_stopped || tx_stopped; -} - struct fwd_engine io_fwd_engine = { .fwd_mode_name = "io", - .port_fwd_begin = NULL, - .port_fwd_end = NULL, - .stream_init = stream_init_forward, + .stream_init = common_fwd_stream_init, .packet_fwd = pkt_burst_io_forward, }; diff --git a/app/test-pmd/macfwd.c b/app/test-pmd/macfwd.c index 3a840247c7..953d9ea089 100644 --- a/app/test-pmd/macfwd.c +++ b/app/test-pmd/macfwd.c @@ -113,22 +113,8 @@ pkt_burst_mac_forward(struct fwd_stream *fs) return true; } -static void -stream_init_mac_forward(struct fwd_stream *fs) -{ - bool rx_stopped, tx_stopped; - - rx_stopped = ports[fs->rx_port].rxq[fs->rx_queue].state == - RTE_ETH_QUEUE_STATE_STOPPED; - tx_stopped = ports[fs->tx_port].txq[fs->tx_queue].state == - RTE_ETH_QUEUE_STATE_STOPPED; - fs->disabled = rx_stopped || tx_stopped; -} - struct fwd_engine mac_fwd_engine = { .fwd_mode_name = "mac", - .port_fwd_begin = NULL, - .port_fwd_end = NULL, - .stream_init = stream_init_mac_forward, + .stream_init = common_fwd_stream_init, .packet_fwd = pkt_burst_mac_forward, }; diff --git a/app/test-pmd/macswap.c b/app/test-pmd/macswap.c index 14b3eefffd..062542dc53 100644 --- a/app/test-pmd/macswap.c +++ b/app/test-pmd/macswap.c @@ -92,22 +92,8 @@ pkt_burst_mac_swap(struct fwd_stream *fs) return true; } -static void -stream_init_mac_swap(struct fwd_stream *fs) -{ - bool rx_stopped, tx_stopped; - - rx_stopped = ports[fs->rx_port].rxq[fs->rx_queue].state == - RTE_ETH_QUEUE_STATE_STOPPED; - tx_stopped = ports[fs->tx_port].txq[fs->tx_queue].state == - RTE_ETH_QUEUE_STATE_STOPPED; - fs->disabled = rx_stopped || tx_stopped; -} - struct fwd_engine mac_swap_engine = { .fwd_mode_name = "macswap", - .port_fwd_begin = NULL, - .port_fwd_end = NULL, - .stream_init = stream_init_mac_swap, + .stream_init = common_fwd_stream_init, .packet_fwd = pkt_burst_mac_swap, }; diff --git a/app/test-pmd/noisy_vnf.c b/app/test-pmd/noisy_vnf.c index ecea51b603..be35023444 100644 --- a/app/test-pmd/noisy_vnf.c +++ b/app/test-pmd/noisy_vnf.c @@ -279,22 +279,10 @@ noisy_fwd_begin(portid_t pi) return 0; } -static void -stream_init_noisy_vnf(struct fwd_stream *fs) -{ - bool rx_stopped, tx_stopped; - - rx_stopped = ports[fs->rx_port].rxq[fs->rx_queue].state == - RTE_ETH_QUEUE_STATE_STOPPED; - tx_stopped = ports[fs->tx_port].txq[fs->tx_queue].state == - RTE_ETH_QUEUE_STATE_STOPPED; - fs->disabled = rx_stopped || tx_stopped; -} - struct fwd_engine noisy_vnf_engine = { .fwd_mode_name = "noisy", .port_fwd_begin = noisy_fwd_begin, .port_fwd_end = noisy_fwd_end, - .stream_init = stream_init_noisy_vnf, + .stream_init = common_fwd_stream_init, .packet_fwd = pkt_burst_noisy_vnf, }; diff --git a/app/test-pmd/shared_rxq_fwd.c b/app/test-pmd/shared_rxq_fwd.c index 4902ec407e..67e5494735 100644 --- a/app/test-pmd/shared_rxq_fwd.c +++ b/app/test-pmd/shared_rxq_fwd.c @@ -114,8 +114,6 @@ shared_rxq_stream_init(struct fwd_stream *fs) struct fwd_engine shared_rxq_engine = { .fwd_mode_name = "shared_rxq", - .port_fwd_begin = NULL, - .port_fwd_end = NULL, .stream_init = shared_rxq_stream_init, .packet_fwd = shared_rxq_fwd, }; diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index dab67bce5c..d363adbbca 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -2343,6 +2343,16 @@ launch_packet_forwarding(lcore_function_t *pkt_fwd_on_lcore) } } +void +common_fwd_stream_init(struct fwd_stream *fs) +{ + bool rx_stopped, tx_stopped; + + rx_stopped = (ports[fs->rx_port].rxq[fs->rx_queue].state == RTE_ETH_QUEUE_STATE_STOPPED); + tx_stopped = (ports[fs->tx_port].txq[fs->tx_queue].state == RTE_ETH_QUEUE_STATE_STOPPED); + fs->disabled = rx_stopped || tx_stopped; +} + /* * Launch packet forwarding configuration. */ diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index 5c46844195..5d1a5cde7d 100644 --- a/app/test-pmd/testpmd.h +++ b/app/test-pmd/testpmd.h @@ -390,6 +390,8 @@ struct fwd_engine { packet_fwd_t packet_fwd; /**< Mandatory. */ }; +void common_fwd_stream_init(struct fwd_stream *fs); + #define FLEX_ITEM_MAX_SAMPLES_NUM 16 #define FLEX_ITEM_MAX_LINKS_NUM 16 #define FLEX_MAX_FLOW_PATTERN_LENGTH 64 diff --git a/app/test-pmd/txonly.c b/app/test-pmd/txonly.c index 63ad5e69bf..b80ab6f5df 100644 --- a/app/test-pmd/txonly.c +++ b/app/test-pmd/txonly.c @@ -508,7 +508,6 @@ tx_only_stream_init(struct fwd_stream *fs) struct fwd_engine tx_only_engine = { .fwd_mode_name = "txonly", .port_fwd_begin = tx_only_begin, - .port_fwd_end = NULL, .stream_init = tx_only_stream_init, .packet_fwd = pkt_burst_transmit, }; From patchwork Tue Jan 24 10:47:41 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Marchand X-Patchwork-Id: 122472 X-Patchwork-Delegate: ferruh.yigit@amd.com 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 6A00742476; Tue, 24 Jan 2023 11:48:47 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id AD98842D48; Tue, 24 Jan 2023 11:48:34 +0100 (CET) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mails.dpdk.org (Postfix) with ESMTP id DEBC142D47 for ; Tue, 24 Jan 2023 11:48:32 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1674557312; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=M4QJnlAgz9bPPZs4/akwcerhuZaHNlyrn2rs6MMLOmU=; b=bs0tB5fWMcrRLBea8gbsA7RZ8OdGFPMFD5WKtK7CGVoAH+mCEFZkLsmeC8t47O3cnJUd/x vyAWbduP7KL0LJdaXsxn3iH2FXZb1XxtxNyki/7lzfnI7lE9KGFrMkSFpZnXwk5ja39sqm kkh4Ex/7Kbk6RgxZgmkqv1eNowZDjQI= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-217-ZlpH0SrQMH22b3gQNArjeQ-1; Tue, 24 Jan 2023 05:48:30 -0500 X-MC-Unique: ZlpH0SrQMH22b3gQNArjeQ-1 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 6F68985A588; Tue, 24 Jan 2023 10:48:30 +0000 (UTC) Received: from dmarchan.redhat.com (ovpn-192-67.brq.redhat.com [10.40.192.67]) by smtp.corp.redhat.com (Postfix) with ESMTP id 4BBD340444C5; Tue, 24 Jan 2023 10:48:29 +0000 (UTC) From: David Marchand To: dev@dpdk.org Cc: Ferruh Yigit , Aman Singh , Yuying Zhang , Robin Jarry Subject: [PATCH 5/6] app/testpmd: factorize fwd engine Rx Date: Tue, 24 Jan 2023 11:47:41 +0100 Message-Id: <20230124104742.1265439-6-david.marchand@redhat.com> In-Reply-To: <20230124104742.1265439-1-david.marchand@redhat.com> References: <20230124104742.1265439-1-david.marchand@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.1 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com 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 Reduce code duplication by introducing a helper that takes care of receiving packets and incrementing rx counter. Signed-off-by: David Marchand Reviewed-by: Ferruh Yigit --- app/test-pmd/5tswap.c | 5 +---- app/test-pmd/csumonly.c | 5 +---- app/test-pmd/flowgen.c | 5 +---- app/test-pmd/icmpecho.c | 5 +---- app/test-pmd/ieee1588fwd.c | 4 +--- app/test-pmd/iofwd.c | 5 +---- app/test-pmd/macfwd.c | 5 +---- app/test-pmd/macswap.c | 5 +---- app/test-pmd/noisy_vnf.c | 5 +---- app/test-pmd/rxonly.c | 5 +---- app/test-pmd/testpmd.h | 12 ++++++++++++ 11 files changed, 22 insertions(+), 39 deletions(-) diff --git a/app/test-pmd/5tswap.c b/app/test-pmd/5tswap.c index 7b5f58f4d4..27da867d7f 100644 --- a/app/test-pmd/5tswap.c +++ b/app/test-pmd/5tswap.c @@ -108,13 +108,10 @@ pkt_burst_5tuple_swap(struct fwd_stream *fs) /* * Receive a burst of packets and forward them. */ - nb_rx = rte_eth_rx_burst(fs->rx_port, fs->rx_queue, pkts_burst, - nb_pkt_per_burst); - inc_rx_burst_stats(fs, nb_rx); + nb_rx = common_fwd_stream_receive(fs, pkts_burst, nb_pkt_per_burst); if (unlikely(nb_rx == 0)) return false; - fs->rx_packets += nb_rx; txp = &ports[fs->tx_port]; ol_flags = ol_flags_init(txp->dev_conf.txmode.offloads); vlan_qinq_set(pkts_burst, nb_rx, ol_flags, diff --git a/app/test-pmd/csumonly.c b/app/test-pmd/csumonly.c index f72e2d74c7..d758ae0ac6 100644 --- a/app/test-pmd/csumonly.c +++ b/app/test-pmd/csumonly.c @@ -860,13 +860,10 @@ pkt_burst_checksum_forward(struct fwd_stream *fs) struct testpmd_offload_info info; /* receive a burst of packet */ - nb_rx = rte_eth_rx_burst(fs->rx_port, fs->rx_queue, pkts_burst, - nb_pkt_per_burst); - inc_rx_burst_stats(fs, nb_rx); + nb_rx = common_fwd_stream_receive(fs, pkts_burst, nb_pkt_per_burst); if (unlikely(nb_rx == 0)) return false; - fs->rx_packets += nb_rx; rx_bad_ip_csum = 0; rx_bad_l4_csum = 0; rx_bad_outer_l4_csum = 0; diff --git a/app/test-pmd/flowgen.c b/app/test-pmd/flowgen.c index 6f42019353..3705cc60c5 100644 --- a/app/test-pmd/flowgen.c +++ b/app/test-pmd/flowgen.c @@ -80,10 +80,7 @@ pkt_burst_flow_gen(struct fwd_stream *fs) int next_flow = RTE_PER_LCORE(_next_flow); /* Receive a burst of packets and discard them. */ - nb_rx = rte_eth_rx_burst(fs->rx_port, fs->rx_queue, pkts_burst, - nb_pkt_per_burst); - inc_rx_burst_stats(fs, nb_rx); - fs->rx_packets += nb_rx; + nb_rx = common_fwd_stream_receive(fs, pkts_burst, nb_pkt_per_burst); rte_pktmbuf_free_bulk(pkts_burst, nb_rx); diff --git a/app/test-pmd/icmpecho.c b/app/test-pmd/icmpecho.c index eba8b99f1e..48f8fe0bf1 100644 --- a/app/test-pmd/icmpecho.c +++ b/app/test-pmd/icmpecho.c @@ -296,13 +296,10 @@ reply_to_icmp_echo_rqsts(struct fwd_stream *fs) /* * First, receive a burst of packets. */ - nb_rx = rte_eth_rx_burst(fs->rx_port, fs->rx_queue, pkts_burst, - nb_pkt_per_burst); - inc_rx_burst_stats(fs, nb_rx); + nb_rx = common_fwd_stream_receive(fs, pkts_burst, nb_pkt_per_burst); if (unlikely(nb_rx == 0)) return false; - fs->rx_packets += nb_rx; nb_replies = 0; for (i = 0; i < nb_rx; i++) { if (likely(i < nb_rx - 1)) diff --git a/app/test-pmd/ieee1588fwd.c b/app/test-pmd/ieee1588fwd.c index db7009c678..e8bfd7d940 100644 --- a/app/test-pmd/ieee1588fwd.c +++ b/app/test-pmd/ieee1588fwd.c @@ -102,11 +102,9 @@ ieee1588_packet_fwd(struct fwd_stream *fs) /* * Receive 1 packet at a time. */ - if (rte_eth_rx_burst(fs->rx_port, fs->rx_queue, &mb, 1) == 0) + if (common_fwd_stream_receive(fs, &mb, 1) == 0) return false; - fs->rx_packets += 1; - /* * Check that the received packet is a PTP packet that was detected * by the hardware. diff --git a/app/test-pmd/iofwd.c b/app/test-pmd/iofwd.c index 12be06fa79..69b583cb5b 100644 --- a/app/test-pmd/iofwd.c +++ b/app/test-pmd/iofwd.c @@ -52,12 +52,9 @@ pkt_burst_io_forward(struct fwd_stream *fs) /* * Receive a burst of packets and forward them. */ - nb_rx = rte_eth_rx_burst(fs->rx_port, fs->rx_queue, - pkts_burst, nb_pkt_per_burst); - inc_rx_burst_stats(fs, nb_rx); + nb_rx = common_fwd_stream_receive(fs, pkts_burst, nb_pkt_per_burst); if (unlikely(nb_rx == 0)) return false; - fs->rx_packets += nb_rx; nb_tx = rte_eth_tx_burst(fs->tx_port, fs->tx_queue, pkts_burst, nb_rx); diff --git a/app/test-pmd/macfwd.c b/app/test-pmd/macfwd.c index 953d9ea089..a72f5ccb75 100644 --- a/app/test-pmd/macfwd.c +++ b/app/test-pmd/macfwd.c @@ -58,13 +58,10 @@ pkt_burst_mac_forward(struct fwd_stream *fs) /* * Receive a burst of packets and forward them. */ - nb_rx = rte_eth_rx_burst(fs->rx_port, fs->rx_queue, pkts_burst, - nb_pkt_per_burst); - inc_rx_burst_stats(fs, nb_rx); + nb_rx = common_fwd_stream_receive(fs, pkts_burst, nb_pkt_per_burst); if (unlikely(nb_rx == 0)) return false; - fs->rx_packets += nb_rx; txp = &ports[fs->tx_port]; tx_offloads = txp->dev_conf.txmode.offloads; if (tx_offloads & RTE_ETH_TX_OFFLOAD_VLAN_INSERT) diff --git a/app/test-pmd/macswap.c b/app/test-pmd/macswap.c index 062542dc53..ab37123404 100644 --- a/app/test-pmd/macswap.c +++ b/app/test-pmd/macswap.c @@ -59,13 +59,10 @@ pkt_burst_mac_swap(struct fwd_stream *fs) /* * Receive a burst of packets and forward them. */ - nb_rx = rte_eth_rx_burst(fs->rx_port, fs->rx_queue, pkts_burst, - nb_pkt_per_burst); - inc_rx_burst_stats(fs, nb_rx); + nb_rx = common_fwd_stream_receive(fs, pkts_burst, nb_pkt_per_burst); if (unlikely(nb_rx == 0)) return false; - fs->rx_packets += nb_rx; txp = &ports[fs->tx_port]; do_macswap(pkts_burst, nb_rx, txp); diff --git a/app/test-pmd/noisy_vnf.c b/app/test-pmd/noisy_vnf.c index be35023444..937d5a1d7d 100644 --- a/app/test-pmd/noisy_vnf.c +++ b/app/test-pmd/noisy_vnf.c @@ -150,12 +150,9 @@ pkt_burst_noisy_vnf(struct fwd_stream *fs) bool needs_flush = false; uint64_t now; - nb_rx = rte_eth_rx_burst(fs->rx_port, fs->rx_queue, - pkts_burst, nb_pkt_per_burst); - inc_rx_burst_stats(fs, nb_rx); + nb_rx = common_fwd_stream_receive(fs, pkts_burst, nb_pkt_per_burst); if (unlikely(nb_rx == 0)) goto flush; - fs->rx_packets += nb_rx; if (!ncf->do_buffering) { sim_memory_lookups(ncf, nb_rx); diff --git a/app/test-pmd/rxonly.c b/app/test-pmd/rxonly.c index ad4597cf9a..de3ddcf9a5 100644 --- a/app/test-pmd/rxonly.c +++ b/app/test-pmd/rxonly.c @@ -50,13 +50,10 @@ pkt_burst_receive(struct fwd_stream *fs) /* * Receive a burst of packets. */ - nb_rx = rte_eth_rx_burst(fs->rx_port, fs->rx_queue, pkts_burst, - nb_pkt_per_burst); - inc_rx_burst_stats(fs, nb_rx); + nb_rx = common_fwd_stream_receive(fs, pkts_burst, nb_pkt_per_burst); if (unlikely(nb_rx == 0)) return false; - fs->rx_packets += nb_rx; rte_pktmbuf_free_bulk(pkts_burst, nb_rx); return true; diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index 5d1a5cde7d..e6b28b4748 100644 --- a/app/test-pmd/testpmd.h +++ b/app/test-pmd/testpmd.h @@ -857,6 +857,18 @@ inc_tx_burst_stats(struct fwd_stream *fs, uint16_t nb_tx) if (record_burst_stats) fs->tx_burst_stats.pkt_burst_spread[nb_tx]++; } +static inline uint16_t +common_fwd_stream_receive(struct fwd_stream *fs, struct rte_mbuf **burst, + unsigned int count) +{ + uint16_t nb_rx; + + nb_rx = rte_eth_rx_burst(fs->rx_port, fs->rx_queue, burst, count); + inc_rx_burst_stats(fs, nb_rx); + if (likely(nb_rx != 0)) + fs->rx_packets += nb_rx; + return nb_rx; +} /* Prototypes */ unsigned int parse_item_list(const char *str, const char *item_name, From patchwork Tue Jan 24 10:47:42 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Marchand X-Patchwork-Id: 122473 X-Patchwork-Delegate: ferruh.yigit@amd.com 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 AE97142476; Tue, 24 Jan 2023 11:48:54 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id DA66A42D4D; Tue, 24 Jan 2023 11:48:39 +0100 (CET) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mails.dpdk.org (Postfix) with ESMTP id CFA7042D55 for ; Tue, 24 Jan 2023 11:48:37 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1674557317; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=wW32GA7ppK+fKIq9hxHU6b/eikAHA/QwlVRNQQ77A/c=; b=D8oiOQLVCZouj5+Gs9a8ICvceSjSdCjaG01MGQe115JYZDMLPtWAfuGS/VFDUiwEArXVk/ sFEG2OI3TxQmBYWshVGWLdILmPLpJ1cYLchqMrLaS+ketVRoB2N4f+FMBjeHaXkrG8gREV HmUZ/MbFKf1nF53T4uFxezBm9bUlgcw= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-373-TKl_9kYDNdSzNseHlOiD6Q-1; Tue, 24 Jan 2023 05:48:34 -0500 X-MC-Unique: TKl_9kYDNdSzNseHlOiD6Q-1 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id EDCBF811E6E; Tue, 24 Jan 2023 10:48:33 +0000 (UTC) Received: from dmarchan.redhat.com (ovpn-192-67.brq.redhat.com [10.40.192.67]) by smtp.corp.redhat.com (Postfix) with ESMTP id A14512166B26; Tue, 24 Jan 2023 10:48:32 +0000 (UTC) From: David Marchand To: dev@dpdk.org Cc: Ferruh Yigit , Aman Singh , Yuying Zhang , Robin Jarry Subject: [PATCH 6/6] app/testpmd: factorize fwd engine Tx Date: Tue, 24 Jan 2023 11:47:42 +0100 Message-Id: <20230124104742.1265439-7-david.marchand@redhat.com> In-Reply-To: <20230124104742.1265439-1-david.marchand@redhat.com> References: <20230124104742.1265439-1-david.marchand@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.6 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com 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 Reduce code duplication by introducing a helper that takes care of transmitting, retrying if enabled and incrementing tx counter. Signed-off-by: David Marchand --- app/test-pmd/5tswap.c | 22 +------------ app/test-pmd/csumonly.c | 23 +------------- app/test-pmd/flowgen.c | 22 +------------ app/test-pmd/icmpecho.c | 28 ++--------------- app/test-pmd/iofwd.c | 22 +------------ app/test-pmd/macfwd.c | 21 +------------ app/test-pmd/macswap.c | 27 ++-------------- app/test-pmd/noisy_vnf.c | 67 +++++++--------------------------------- app/test-pmd/testpmd.h | 30 ++++++++++++++++++ app/test-pmd/txonly.c | 33 +++++--------------- 10 files changed, 58 insertions(+), 237 deletions(-) diff --git a/app/test-pmd/5tswap.c b/app/test-pmd/5tswap.c index 27da867d7f..ff8c2dcde5 100644 --- a/app/test-pmd/5tswap.c +++ b/app/test-pmd/5tswap.c @@ -91,9 +91,6 @@ pkt_burst_5tuple_swap(struct fwd_stream *fs) uint64_t ol_flags; uint16_t proto; uint16_t nb_rx; - uint16_t nb_tx; - uint32_t retry; - int i; union { struct rte_ether_hdr *eth; @@ -155,24 +152,7 @@ pkt_burst_5tuple_swap(struct fwd_stream *fs) } mbuf_field_set(mb, ol_flags); } - nb_tx = rte_eth_tx_burst(fs->tx_port, fs->tx_queue, pkts_burst, nb_rx); - /* - * Retry if necessary - */ - if (unlikely(nb_tx < nb_rx) && fs->retry_enabled) { - retry = 0; - while (nb_tx < nb_rx && retry++ < burst_tx_retry_num) { - rte_delay_us(burst_tx_delay_time); - nb_tx += rte_eth_tx_burst(fs->tx_port, fs->tx_queue, - &pkts_burst[nb_tx], nb_rx - nb_tx); - } - } - fs->tx_packets += nb_tx; - inc_tx_burst_stats(fs, nb_tx); - if (unlikely(nb_tx < nb_rx)) { - fs->fwd_dropped += (nb_rx - nb_tx); - rte_pktmbuf_free_bulk(&pkts_burst[nb_tx], nb_rx - nb_tx); - } + common_fwd_stream_transmit(fs, pkts_burst, nb_rx); return true; } diff --git a/app/test-pmd/csumonly.c b/app/test-pmd/csumonly.c index d758ae0ac6..fc85c22a77 100644 --- a/app/test-pmd/csumonly.c +++ b/app/test-pmd/csumonly.c @@ -847,12 +847,10 @@ pkt_burst_checksum_forward(struct fwd_stream *fs) uint8_t gro_enable; #endif uint16_t nb_rx; - uint16_t nb_tx; uint16_t nb_prep; uint16_t i; uint64_t rx_ol_flags, tx_ol_flags; uint64_t tx_offloads; - uint32_t retry; uint32_t rx_bad_ip_csum; uint32_t rx_bad_l4_csum; uint32_t rx_bad_outer_l4_csum; @@ -1169,32 +1167,13 @@ pkt_burst_checksum_forward(struct fwd_stream *fs) rte_pktmbuf_free_bulk(&tx_pkts_burst[nb_prep], nb_rx - nb_prep); } - nb_tx = rte_eth_tx_burst(fs->tx_port, fs->tx_queue, tx_pkts_burst, - nb_prep); + common_fwd_stream_transmit(fs, tx_pkts_burst, nb_prep); - /* - * Retry if necessary - */ - if (unlikely(nb_tx < nb_prep) && fs->retry_enabled) { - retry = 0; - while (nb_tx < nb_prep && retry++ < burst_tx_retry_num) { - rte_delay_us(burst_tx_delay_time); - nb_tx += rte_eth_tx_burst(fs->tx_port, fs->tx_queue, - &tx_pkts_burst[nb_tx], nb_prep - nb_tx); - } - } - fs->tx_packets += nb_tx; fs->rx_bad_ip_csum += rx_bad_ip_csum; fs->rx_bad_l4_csum += rx_bad_l4_csum; fs->rx_bad_outer_l4_csum += rx_bad_outer_l4_csum; fs->rx_bad_outer_ip_csum += rx_bad_outer_ip_csum; - inc_tx_burst_stats(fs, nb_tx); - if (unlikely(nb_tx < nb_prep)) { - fs->fwd_dropped += (nb_prep - nb_tx); - rte_pktmbuf_free_bulk(&tx_pkts_burst[nb_tx], nb_prep - nb_tx); - } - return true; } diff --git a/app/test-pmd/flowgen.c b/app/test-pmd/flowgen.c index 3705cc60c5..5a0d096309 100644 --- a/app/test-pmd/flowgen.c +++ b/app/test-pmd/flowgen.c @@ -71,11 +71,9 @@ pkt_burst_flow_gen(struct fwd_stream *fs) uint16_t vlan_tci, vlan_tci_outer; uint64_t ol_flags = 0; uint16_t nb_rx; - uint16_t nb_tx; uint16_t nb_dropped; uint16_t nb_pkt; uint16_t nb_clones = nb_pkt_flowgen_clones; - uint32_t retry; uint64_t tx_offloads; int next_flow = RTE_PER_LCORE(_next_flow); @@ -158,30 +156,12 @@ pkt_burst_flow_gen(struct fwd_stream *fs) next_flow = 0; } - nb_tx = rte_eth_tx_burst(fs->tx_port, fs->tx_queue, pkts_burst, nb_pkt); - /* - * Retry if necessary - */ - if (unlikely(nb_tx < nb_pkt) && fs->retry_enabled) { - retry = 0; - while (nb_tx < nb_pkt && retry++ < burst_tx_retry_num) { - rte_delay_us(burst_tx_delay_time); - nb_tx += rte_eth_tx_burst(fs->tx_port, fs->tx_queue, - &pkts_burst[nb_tx], nb_pkt - nb_tx); - } - } - fs->tx_packets += nb_tx; - - inc_tx_burst_stats(fs, nb_tx); - nb_dropped = nb_pkt - nb_tx; + nb_dropped = common_fwd_stream_transmit(fs, pkts_burst, nb_pkt); if (unlikely(nb_dropped > 0)) { /* Back out the flow counter. */ next_flow -= nb_dropped; while (next_flow < 0) next_flow += nb_flows_flowgen; - - fs->fwd_dropped += nb_dropped; - rte_pktmbuf_free_bulk(&pkts_burst[nb_tx], nb_pkt - nb_tx); } RTE_PER_LCORE(_next_flow) = next_flow; diff --git a/app/test-pmd/icmpecho.c b/app/test-pmd/icmpecho.c index 48f8fe0bf1..68524484e3 100644 --- a/app/test-pmd/icmpecho.c +++ b/app/test-pmd/icmpecho.c @@ -280,10 +280,8 @@ reply_to_icmp_echo_rqsts(struct fwd_stream *fs) struct rte_ipv4_hdr *ip_h; struct rte_icmp_hdr *icmp_h; struct rte_ether_addr eth_addr; - uint32_t retry; uint32_t ip_addr; uint16_t nb_rx; - uint16_t nb_tx; uint16_t nb_replies; uint16_t eth_type; uint16_t vlan_id; @@ -476,30 +474,8 @@ reply_to_icmp_echo_rqsts(struct fwd_stream *fs) } /* Send back ICMP echo replies, if any. */ - if (nb_replies > 0) { - nb_tx = rte_eth_tx_burst(fs->tx_port, fs->tx_queue, pkts_burst, - nb_replies); - /* - * Retry if necessary - */ - if (unlikely(nb_tx < nb_replies) && fs->retry_enabled) { - retry = 0; - while (nb_tx < nb_replies && - retry++ < burst_tx_retry_num) { - rte_delay_us(burst_tx_delay_time); - nb_tx += rte_eth_tx_burst(fs->tx_port, - fs->tx_queue, - &pkts_burst[nb_tx], - nb_replies - nb_tx); - } - } - fs->tx_packets += nb_tx; - inc_tx_burst_stats(fs, nb_tx); - if (unlikely(nb_tx < nb_replies)) { - fs->fwd_dropped += (nb_replies - nb_tx); - rte_pktmbuf_free_bulk(&pkts_burst[nb_tx], nb_replies - nb_tx); - } - } + if (nb_replies > 0) + common_fwd_stream_transmit(fs, pkts_burst, nb_replies); return true; } diff --git a/app/test-pmd/iofwd.c b/app/test-pmd/iofwd.c index 69b583cb5b..ba06fae4a6 100644 --- a/app/test-pmd/iofwd.c +++ b/app/test-pmd/iofwd.c @@ -46,8 +46,6 @@ pkt_burst_io_forward(struct fwd_stream *fs) { struct rte_mbuf *pkts_burst[MAX_PKT_BURST]; uint16_t nb_rx; - uint16_t nb_tx; - uint32_t retry; /* * Receive a burst of packets and forward them. @@ -56,25 +54,7 @@ pkt_burst_io_forward(struct fwd_stream *fs) if (unlikely(nb_rx == 0)) return false; - nb_tx = rte_eth_tx_burst(fs->tx_port, fs->tx_queue, - pkts_burst, nb_rx); - /* - * Retry if necessary - */ - if (unlikely(nb_tx < nb_rx) && fs->retry_enabled) { - retry = 0; - while (nb_tx < nb_rx && retry++ < burst_tx_retry_num) { - rte_delay_us(burst_tx_delay_time); - nb_tx += rte_eth_tx_burst(fs->tx_port, fs->tx_queue, - &pkts_burst[nb_tx], nb_rx - nb_tx); - } - } - fs->tx_packets += nb_tx; - inc_tx_burst_stats(fs, nb_tx); - if (unlikely(nb_tx < nb_rx)) { - fs->fwd_dropped += (nb_rx - nb_tx); - rte_pktmbuf_free_bulk(&pkts_burst[nb_tx], nb_rx - nb_tx); - } + common_fwd_stream_transmit(fs, pkts_burst, nb_rx); return true; } diff --git a/app/test-pmd/macfwd.c b/app/test-pmd/macfwd.c index a72f5ccb75..7316d73315 100644 --- a/app/test-pmd/macfwd.c +++ b/app/test-pmd/macfwd.c @@ -48,9 +48,7 @@ pkt_burst_mac_forward(struct fwd_stream *fs) struct rte_port *txp; struct rte_mbuf *mb; struct rte_ether_hdr *eth_hdr; - uint32_t retry; uint16_t nb_rx; - uint16_t nb_tx; uint16_t i; uint64_t ol_flags = 0; uint64_t tx_offloads; @@ -87,25 +85,8 @@ pkt_burst_mac_forward(struct fwd_stream *fs) mb->vlan_tci = txp->tx_vlan_id; mb->vlan_tci_outer = txp->tx_vlan_id_outer; } - nb_tx = rte_eth_tx_burst(fs->tx_port, fs->tx_queue, pkts_burst, nb_rx); - /* - * Retry if necessary - */ - if (unlikely(nb_tx < nb_rx) && fs->retry_enabled) { - retry = 0; - while (nb_tx < nb_rx && retry++ < burst_tx_retry_num) { - rte_delay_us(burst_tx_delay_time); - nb_tx += rte_eth_tx_burst(fs->tx_port, fs->tx_queue, - &pkts_burst[nb_tx], nb_rx - nb_tx); - } - } - fs->tx_packets += nb_tx; - inc_tx_burst_stats(fs, nb_tx); - if (unlikely(nb_tx < nb_rx)) { - fs->fwd_dropped += (nb_rx - nb_tx); - rte_pktmbuf_free_bulk(&pkts_burst[nb_tx], nb_rx - nb_tx); - } + common_fwd_stream_transmit(fs, pkts_burst, nb_rx); return true; } diff --git a/app/test-pmd/macswap.c b/app/test-pmd/macswap.c index ab37123404..57f77003fe 100644 --- a/app/test-pmd/macswap.c +++ b/app/test-pmd/macswap.c @@ -51,10 +51,7 @@ static bool pkt_burst_mac_swap(struct fwd_stream *fs) { struct rte_mbuf *pkts_burst[MAX_PKT_BURST]; - struct rte_port *txp; uint16_t nb_rx; - uint16_t nb_tx; - uint32_t retry; /* * Receive a burst of packets and forward them. @@ -63,28 +60,8 @@ pkt_burst_mac_swap(struct fwd_stream *fs) if (unlikely(nb_rx == 0)) return false; - txp = &ports[fs->tx_port]; - - do_macswap(pkts_burst, nb_rx, txp); - - nb_tx = rte_eth_tx_burst(fs->tx_port, fs->tx_queue, pkts_burst, nb_rx); - /* - * Retry if necessary - */ - if (unlikely(nb_tx < nb_rx) && fs->retry_enabled) { - retry = 0; - while (nb_tx < nb_rx && retry++ < burst_tx_retry_num) { - rte_delay_us(burst_tx_delay_time); - nb_tx += rte_eth_tx_burst(fs->tx_port, fs->tx_queue, - &pkts_burst[nb_tx], nb_rx - nb_tx); - } - } - fs->tx_packets += nb_tx; - inc_tx_burst_stats(fs, nb_tx); - if (unlikely(nb_tx < nb_rx)) { - fs->fwd_dropped += (nb_rx - nb_tx); - rte_pktmbuf_free_bulk(&pkts_burst[nb_tx], nb_rx - nb_tx); - } + do_macswap(pkts_burst, nb_rx, &ports[fs->tx_port]); + common_fwd_stream_transmit(fs, pkts_burst, nb_rx); return true; } diff --git a/app/test-pmd/noisy_vnf.c b/app/test-pmd/noisy_vnf.c index 937d5a1d7d..3875590132 100644 --- a/app/test-pmd/noisy_vnf.c +++ b/app/test-pmd/noisy_vnf.c @@ -93,30 +93,6 @@ sim_memory_lookups(struct noisy_config *ncf, uint16_t nb_pkts) } } -static uint16_t -do_retry(uint16_t nb_rx, uint16_t nb_tx, struct rte_mbuf **pkts, - struct fwd_stream *fs) -{ - uint32_t retry = 0; - - while (nb_tx < nb_rx && retry++ < burst_tx_retry_num) { - rte_delay_us(burst_tx_delay_time); - nb_tx += rte_eth_tx_burst(fs->tx_port, fs->tx_queue, - &pkts[nb_tx], nb_rx - nb_tx); - } - - return nb_tx; -} - -static uint32_t -drop_pkts(struct rte_mbuf **pkts, uint16_t nb_rx, uint16_t nb_tx) -{ - if (nb_tx < nb_rx) - rte_pktmbuf_free_bulk(&pkts[nb_tx], nb_rx - nb_tx); - - return nb_rx - nb_tx; -} - /* * Forwarding of packets in noisy VNF mode. Forward packets but perform * memory operations first as specified on cmdline. @@ -156,38 +132,23 @@ pkt_burst_noisy_vnf(struct fwd_stream *fs) if (!ncf->do_buffering) { sim_memory_lookups(ncf, nb_rx); - nb_tx = rte_eth_tx_burst(fs->tx_port, fs->tx_queue, - pkts_burst, nb_rx); - if (unlikely(nb_tx < nb_rx) && fs->retry_enabled) - nb_tx += do_retry(nb_rx, nb_tx, pkts_burst, fs); - inc_tx_burst_stats(fs, nb_tx); - fs->tx_packets += nb_tx; - fs->fwd_dropped += drop_pkts(pkts_burst, nb_rx, nb_tx); + nb_tx = common_fwd_stream_transmit(fs, pkts_burst, nb_rx); return true; } fifo_free = rte_ring_free_count(ncf->f); if (fifo_free >= nb_rx) { - nb_enqd = rte_ring_enqueue_burst(ncf->f, - (void **) pkts_burst, nb_rx, NULL); - if (nb_enqd < nb_rx) - fs->fwd_dropped += drop_pkts(pkts_burst, - nb_rx, nb_enqd); - } else { - nb_deqd = rte_ring_dequeue_burst(ncf->f, - (void **) tmp_pkts, nb_rx, NULL); - nb_enqd = rte_ring_enqueue_burst(ncf->f, - (void **) pkts_burst, nb_deqd, NULL); - if (nb_deqd > 0) { - nb_tx = rte_eth_tx_burst(fs->tx_port, - fs->tx_queue, tmp_pkts, - nb_deqd); - if (unlikely(nb_tx < nb_rx) && fs->retry_enabled) - nb_tx += do_retry(nb_rx, nb_tx, tmp_pkts, fs); - inc_tx_burst_stats(fs, nb_tx); - fs->fwd_dropped += drop_pkts(tmp_pkts, nb_deqd, nb_tx); + nb_enqd = rte_ring_enqueue_burst(ncf->f, (void **) pkts_burst, nb_rx, NULL); + if (nb_enqd < nb_rx) { + fs->fwd_dropped += nb_rx - nb_enqd; + rte_pktmbuf_free_bulk(&pkts_burst[nb_enqd], nb_rx - nb_enqd); } + } else { + nb_deqd = rte_ring_dequeue_burst(ncf->f, (void **) tmp_pkts, nb_rx, NULL); + nb_enqd = rte_ring_enqueue_burst(ncf->f, (void **) pkts_burst, nb_deqd, NULL); + if (nb_deqd > 0) + nb_tx = common_fwd_stream_transmit(fs, tmp_pkts, nb_deqd); } sim_memory_lookups(ncf, nb_enqd); @@ -204,15 +165,9 @@ pkt_burst_noisy_vnf(struct fwd_stream *fs) needs_flush = delta_ms >= noisy_tx_sw_buf_flush_time && noisy_tx_sw_buf_flush_time > 0 && !nb_tx; while (needs_flush && !rte_ring_empty(ncf->f)) { - unsigned int sent; nb_deqd = rte_ring_dequeue_burst(ncf->f, (void **)tmp_pkts, MAX_PKT_BURST, NULL); - sent = rte_eth_tx_burst(fs->tx_port, fs->tx_queue, - tmp_pkts, nb_deqd); - if (unlikely(sent < nb_deqd) && fs->retry_enabled) - nb_tx += do_retry(nb_rx, nb_tx, tmp_pkts, fs); - inc_tx_burst_stats(fs, nb_tx); - fs->fwd_dropped += drop_pkts(tmp_pkts, nb_deqd, sent); + nb_tx = common_fwd_stream_transmit(fs, tmp_pkts, nb_deqd); ncf->prev_time = rte_get_timer_cycles(); } diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index e6b28b4748..71ff70f55b 100644 --- a/app/test-pmd/testpmd.h +++ b/app/test-pmd/testpmd.h @@ -870,6 +870,36 @@ common_fwd_stream_receive(struct fwd_stream *fs, struct rte_mbuf **burst, return nb_rx; } +/* Returns count of dropped packets. */ +static inline uint16_t +common_fwd_stream_transmit(struct fwd_stream *fs, struct rte_mbuf **burst, + unsigned int count) +{ + uint16_t nb_tx; + uint32_t retry; + + nb_tx = rte_eth_tx_burst(fs->tx_port, fs->tx_queue, burst, count); + /* + * Retry if necessary + */ + if (unlikely(nb_tx < count) && fs->retry_enabled) { + retry = 0; + while (nb_tx < count && retry++ < burst_tx_retry_num) { + rte_delay_us(burst_tx_delay_time); + nb_tx += rte_eth_tx_burst(fs->tx_port, fs->tx_queue, + &burst[nb_tx], count - nb_tx); + } + } + fs->tx_packets += nb_tx; + inc_tx_burst_stats(fs, nb_tx); + if (unlikely(nb_tx < count)) { + fs->fwd_dropped += (count - nb_tx); + rte_pktmbuf_free_bulk(&burst[nb_tx], count - nb_tx); + } + + return count - nb_tx; +} + /* Prototypes */ unsigned int parse_item_list(const char *str, const char *item_name, unsigned int max_items, diff --git a/app/test-pmd/txonly.c b/app/test-pmd/txonly.c index b80ab6f5df..7144b3d5eb 100644 --- a/app/test-pmd/txonly.c +++ b/app/test-pmd/txonly.c @@ -331,10 +331,9 @@ pkt_burst_transmit(struct fwd_stream *fs) struct rte_mbuf *pkt; struct rte_mempool *mbp; struct rte_ether_hdr eth_hdr; - uint16_t nb_tx; + uint16_t nb_dropped; uint16_t nb_pkt; uint16_t vlan_tci, vlan_tci_outer; - uint32_t retry; uint64_t ol_flags = 0; uint64_t tx_offloads; @@ -391,34 +390,18 @@ pkt_burst_transmit(struct fwd_stream *fs) if (nb_pkt == 0) return false; - nb_tx = rte_eth_tx_burst(fs->tx_port, fs->tx_queue, pkts_burst, nb_pkt); - - /* - * Retry if necessary - */ - if (unlikely(nb_tx < nb_pkt) && fs->retry_enabled) { - retry = 0; - while (nb_tx < nb_pkt && retry++ < burst_tx_retry_num) { - rte_delay_us(burst_tx_delay_time); - nb_tx += rte_eth_tx_burst(fs->tx_port, fs->tx_queue, - &pkts_burst[nb_tx], nb_pkt - nb_tx); - } - } - fs->tx_packets += nb_tx; + nb_dropped = 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(_ip_var) -= nb_dropped; - inc_tx_burst_stats(fs, nb_tx); - if (unlikely(nb_tx < nb_pkt)) { + if (unlikely(nb_dropped > 0)) { if (verbose_level > 0 && fs->fwd_dropped == 0) printf("port %d tx_queue %d - drop " - "(nb_pkt:%u - nb_tx:%u)=%u packets\n", - fs->tx_port, fs->tx_queue, - (unsigned) nb_pkt, (unsigned) nb_tx, - (unsigned) (nb_pkt - nb_tx)); - fs->fwd_dropped += (nb_pkt - nb_tx); - rte_pktmbuf_free_bulk(&pkts_burst[nb_tx], nb_pkt - nb_tx); + "(nb_pkt:%"PRIu16" - nb_tx:%"PRIu16")=" + "%"PRIu16" packets\n", + fs->tx_port, fs->tx_queue, nb_pkt, + nb_pkt - nb_dropped, nb_dropped); } return true;