From 0c552959dc425c5f00499d6a587d16275a6399db Mon Sep 17 00:00:00 2001 From: Michal Mazur Date: Mon, 11 Sep 2017 16:20:21 +0200 Subject: Optimize Rx and Tx paths 1) Handle multiple ODP packets at once in receive loop 2) Wait to collect as many RX buffers as possible in single vector 3) Add prefetch of received and transmitted buffers 4) Disable parser, classifier and synchronization of RX queues Synchronization of Tx queues can also be disabled if 2 ports used. Change-Id: I65ed49ef2b60278022712e10a83f6ca24360694e Signed-off-by: Michal Mazur --- src/plugins/odp/device.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src/plugins/odp/device.c') diff --git a/src/plugins/odp/device.c b/src/plugins/odp/device.c index e904f65c..3e111061 100755 --- a/src/plugins/odp/device.c +++ b/src/plugins/odp/device.c @@ -31,6 +31,16 @@ static char *odp_packet_tx_func_error_strings[] = { #undef _ }; +static_always_inline void +odp_prefetch_buffer_by_index (vlib_main_t * vm, u32 bi) +{ + vlib_buffer_t *b; + odp_packet_t pkt; + b = vlib_get_buffer (vm, bi); + pkt = odp_packet_from_vlib_buffer (b); + CLIB_PREFETCH (pkt, CLIB_CACHE_LINE_BYTES, LOAD); + CLIB_PREFETCH (b, CLIB_CACHE_LINE_BYTES, LOAD); +} static u8 * format_odp_packet_device_name (u8 * s, va_list * args) -- cgit 1.2.3-korg