From 4d119a6f15333e107bd9766112410eaf4ce1a57f Mon Sep 17 00:00:00 2001 From: Klement Sekera Date: Mon, 13 Jul 2020 13:59:33 +0000 Subject: nat: add prefetching to in2out_ed/out2in_ed This saves about 20 clocks/packet in both code paths. Type: improvement Signed-off-by: Klement Sekera Change-Id: Ib559c74bf8168e3ddd764d51b7e5bcd2a557f591 --- src/plugins/nat/in2out_ed.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'src/plugins/nat/in2out_ed.c') diff --git a/src/plugins/nat/in2out_ed.c b/src/plugins/nat/in2out_ed.c index c59c2d4536c..080f37e7c15 100644 --- a/src/plugins/nat/in2out_ed.c +++ b/src/plugins/nat/in2out_ed.c @@ -943,6 +943,19 @@ nat44_ed_in2out_fast_path_node_fn_inline (vlib_main_t * vm, ip_csum_t sum0; b0 = *b; + b++; + + /* Prefetch next iteration. */ + if (PREDICT_TRUE (n_left_from >= 2)) + { + vlib_buffer_t *p2; + + p2 = *b; + + vlib_prefetch_buffer_header (p2, LOAD); + + CLIB_PREFETCH (p2->data, CLIB_CACHE_LINE_BYTES, LOAD); + } if (is_output_feature) { @@ -1158,7 +1171,6 @@ nat44_ed_in2out_fast_path_node_fn_inline (vlib_main_t * vm, n_left_from--; next++; - b++; } vlib_buffer_enqueue_to_next (vm, node, from, (u16 *) nexts, -- cgit 1.2.3-korg