aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/dpdk/device/init.c
diff options
context:
space:
mode:
authorDamjan Marion <damarion@cisco.com>2017-03-06 21:51:00 +0100
committerJohn Lo <loj@cisco.com>2017-03-08 19:29:29 +0000
commit25f635852aee76255f7210c43d43668a80fdccce (patch)
treeb85ae2321eaafa672e7df3c47dae7dd465890191 /src/plugins/dpdk/device/init.c
parent239d3fec80a5351f4d5f0cdeaec7f781a4e6ad32 (diff)
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 <damarion@cisco.com>
Diffstat (limited to 'src/plugins/dpdk/device/init.c')
-rwxr-xr-xsrc/plugins/dpdk/device/init.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/plugins/dpdk/device/init.c b/src/plugins/dpdk/device/init.c
index 85ecde25..110d7457 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];