[dpdk-dev] [PATCH v3 6/8] app/testpmd: add common fwd wrapper
Jerin Jacob
jerinjacobk at gmail.com
Fri Sep 17 13:24:07 CEST 2021
On Fri, Sep 17, 2021 at 1:33 PM Xueming Li <xuemingl at nvidia.com> wrote:
>
> From: Xiaoyu Min <jackmin at nvidia.com>
>
> Added common forwarding wrapper function for all fwd engines
> which do the following in common:
>
> - record core cycles
> - call rte_eth_rx_burst(...,nb_pkt_per_burst)
> - update received packets
> - handle received mbufs with callback function
>
> For better performance, the function is defined as macro.
>
> Signed-off-by: Xiaoyu Min <jackmin at nvidia.com>
> Signed-off-by: Xueming Li <xuemingl at nvidia.com>
> ---
> app/test-pmd/5tswap.c | 25 +++++--------------------
> app/test-pmd/csumonly.c | 25 ++++++-------------------
> app/test-pmd/flowgen.c | 20 +++++---------------
> app/test-pmd/icmpecho.c | 30 ++++++++----------------------
> app/test-pmd/iofwd.c | 24 +++++-------------------
> app/test-pmd/macfwd.c | 24 +++++-------------------
> app/test-pmd/macswap.c | 23 +++++------------------
> app/test-pmd/rxonly.c | 32 ++++++++------------------------
> app/test-pmd/testpmd.h | 19 +++++++++++++++++++
> 9 files changed, 66 insertions(+), 156 deletions(-)
>
> diff --git a/app/test-pmd/5tswap.c b/app/test-pmd/5tswap.c
> index e8cef9623b..8fe940294f 100644
> --- a/app/test-pmd/5tswap.c
> +++ b/app/test-pmd/5tswap.c
> @@ -82,18 +82,16 @@ swap_udp(struct rte_udp_hdr *udp_hdr)
> * Parses each layer and swaps it. When the next layer doesn't match it stops.
> */
> +PKT_BURST_FWD(_5tuple_swap_stream);
Please make _5tuple_swap_stream aka "cb" as inline function to make sure
compiler doesn't generate yet another function pointer.
> struct fwd_engine mac_swap_engine = {
> .fwd_mode_name = "macswap",
> .port_fwd_begin = NULL,
> .port_fwd_end = NULL,
> - .packet_fwd = pkt_burst_mac_swap,
See below
> + .packet_fwd = pkt_burst_fwd,
>
> +#define PKT_BURST_FWD(cb) \
Probably it can pass prefix too like PKT_BURST_FWD(cb, prefix)
to make a unique function and call PKT_BURST_FWD(_5tuple_swap_stream,
mac_swap) for better readability
and avoid diff above section.
> +static void \
> +pkt_burst_fwd(struct fwd_stream *fs)
pkt_burst_fwd##prefix(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; \
> + fs->rx_packets += nb_rx; \
> + cb(fs, nb_rx, pkts_burst); \
> + get_end_cycles(fs, start_tsc); \
> +}
> +
> /*
> * Work-around of a compilation error with ICC on invocations of the
> * rte_be_to_cpu_16() function.
> --
> 2.33.0
>
More information about the dev
mailing list