f-stack/dpdk/app/test-pmd/recycle_mbufs.c

59 lines
1.4 KiB
C
Raw Normal View History

2025-01-10 11:50:43 +00:00
/* SPDX-License-Identifier: BSD-3-Clause
* Copyright (c) 2023 Arm Limited.
*/
#include "testpmd.h"
/*
* Forwarding of packets in I/O mode.
* Enable mbufs recycle mode to recycle txq used mbufs
* for rxq mbuf ring. This can bypass mempool path and
* save CPU cycles.
*/
static bool
pkt_burst_recycle_mbufs(struct fwd_stream *fs)
{
struct rte_mbuf *pkts_burst[MAX_PKT_BURST];
uint16_t nb_rx;
/* Recycle used mbufs from the txq, and move these mbufs into
* the rxq mbuf ring.
*/
rte_eth_recycle_mbufs(fs->rx_port, fs->rx_queue,
fs->tx_port, fs->tx_queue, &(fs->recycle_rxq_info));
/*
* Receive a burst of packets and forward them.
*/
nb_rx = common_fwd_stream_receive(fs, pkts_burst, nb_pkt_per_burst);
if (unlikely(nb_rx == 0))
return false;
common_fwd_stream_transmit(fs, pkts_burst, nb_rx);
return true;
}
static void
recycle_mbufs_stream_init(struct fwd_stream *fs)
{
int rc;
/* Retrieve information about given ports's Rx queue
* for recycling mbufs.
*/
rc = rte_eth_recycle_rx_queue_info_get(fs->rx_port,
fs->rx_queue, &(fs->recycle_rxq_info));
if (rc != 0)
TESTPMD_LOG(WARNING,
"Failed to get rx queue mbufs recycle info\n");
common_fwd_stream_init(fs);
}
struct fwd_engine recycle_mbufs_engine = {
.fwd_mode_name = "recycle_mbufs",
.stream_init = recycle_mbufs_stream_init,
.packet_fwd = pkt_burst_recycle_mbufs,
};