From 25f635852aee76255f7210c43d43668a80fdccce Mon Sep 17 00:00:00 2001 From: Damjan Marion Date: Mon, 6 Mar 2017 21:51:00 +0100 Subject: dpdk: dpdk-input optimizations and fixes - fix issue caused by assumption that ethertype starts at 0 - intoduce buffer templates to speed-up vlib_buffer_t metadata initialization - avoid check for multiseg buffers inside loop if multiseg is disabled - interleave prefetches to reduce load on L1 cache Change-Id: I3b76e6d3e1e15ed28f01625edb7fbe9f38112e03 Signed-off-by: Damjan Marion --- src/plugins/dpdk/device/init.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'src/plugins/dpdk/device/init.c') diff --git a/src/plugins/dpdk/device/init.c b/src/plugins/dpdk/device/init.c index 85ecde25a23..110d74571b5 100755 --- a/src/plugins/dpdk/device/init.c +++ b/src/plugins/dpdk/device/init.c @@ -572,6 +572,21 @@ dpdk_lib_init (dpdk_main_t * dm) dm->buffer_flags_template &= ~(IP_BUFFER_L4_CHECKSUM_CORRECT | IP_BUFFER_L4_CHECKSUM_COMPUTED); + /* vlib_buffer_t template */ + vec_validate_aligned (dm->buffer_templates, tm->n_vlib_mains - 1, + CLIB_CACHE_LINE_BYTES); + for (i = 0; i < tm->n_vlib_mains; i++) + { + vlib_buffer_free_list_t *fl; + vlib_buffer_t *bt = vec_elt_at_index (dm->buffer_templates, i); + fl = vlib_buffer_get_free_list (vm, + VLIB_BUFFER_DEFAULT_FREE_LIST_INDEX); + vlib_buffer_init_for_free_list (bt, fl); + bt->flags = dm->buffer_flags_template; + bt->current_data = -RTE_PKTMBUF_HEADROOM; + vnet_buffer (bt)->sw_if_index[VLIB_TX] = (u32) ~ 0; + } + for (i = 0; i < nports; i++) { u8 addr[6]; -- cgit 1.2.3-korg