From 067cd6229a47ea3ba8b59a2a04090e80afb5bd2c Mon Sep 17 00:00:00 2001 From: Damjan Marion Date: Wed, 11 Jul 2018 12:47:43 +0200 Subject: avoid using thread local storage for thread index It is cheaper to get thread index from vlib_main_t if available... Change-Id: I4582e160d06d9d7fccdc54271912f0635da79b50 Signed-off-by: Damjan Marion --- src/vnet/ip/ip4_forward.c | 4 ++-- src/vnet/ip/ip4_forward.h | 2 +- src/vnet/ip/ip4_input.c | 25 +++++++++++++------------ src/vnet/ip/ip6_forward.c | 4 ++-- src/vnet/ip/ip6_forward.h | 2 +- src/vnet/ip/ip6_input.c | 2 +- src/vnet/ip/ping.c | 2 +- 7 files changed, 21 insertions(+), 20 deletions(-) (limited to 'src/vnet/ip') diff --git a/src/vnet/ip/ip4_forward.c b/src/vnet/ip/ip4_forward.c index d556f0a9310..fd8559d9986 100644 --- a/src/vnet/ip/ip4_forward.c +++ b/src/vnet/ip/ip4_forward.c @@ -121,7 +121,7 @@ ip4_load_balance (vlib_main_t * vm, vlib_combined_counter_main_t *cm = &load_balance_main.lbm_via_counters; u32 n_left_from, n_left_to_next, *from, *to_next; ip_lookup_next_t next; - u32 thread_index = vlib_get_thread_index (); + u32 thread_index = vm->thread_index; from = vlib_frame_vector_args (frame); n_left_from = frame->n_vectors; @@ -2082,7 +2082,7 @@ ip4_rewrite_inline (vlib_main_t * vm, n_left_from = frame->n_vectors; next_index = node->cached_next_index; - u32 thread_index = vlib_get_thread_index (); + u32 thread_index = vm->thread_index; while (n_left_from > 0) { diff --git a/src/vnet/ip/ip4_forward.h b/src/vnet/ip/ip4_forward.h index 553a0536c6c..b1294fdf2c3 100644 --- a/src/vnet/ip/ip4_forward.h +++ b/src/vnet/ip/ip4_forward.h @@ -60,7 +60,7 @@ ip4_lookup_inline (vlib_main_t * vm, vlib_combined_counter_main_t *cm = &load_balance_main.lbm_to_counters; u32 n_left_from, n_left_to_next, *from, *to_next; ip_lookup_next_t next; - u32 thread_index = vlib_get_thread_index (); + u32 thread_index = vm->thread_index; from = vlib_frame_vector_args (frame); n_left_from = frame->n_vectors; diff --git a/src/vnet/ip/ip4_input.c b/src/vnet/ip/ip4_input.c index 1ecd43b7139..15c2ebf5609 100644 --- a/src/vnet/ip/ip4_input.c +++ b/src/vnet/ip/ip4_input.c @@ -90,7 +90,8 @@ ip4_input_set_next (u32 sw_if_index, vlib_buffer_t * b, int arc_enabled) } static_always_inline void -ip4_input_check_sw_if_index (vlib_simple_counter_main_t * cm, u32 sw_if_index, +ip4_input_check_sw_if_index (vlib_main_t * vm, + vlib_simple_counter_main_t * cm, u32 sw_if_index, u32 * last_sw_if_index, u32 * cnt, int *arc_enabled) { @@ -103,7 +104,7 @@ ip4_input_check_sw_if_index (vlib_simple_counter_main_t * cm, u32 sw_if_index, return; } - thread_index = vlib_get_thread_index (); + thread_index = vm->thread_index; if (*cnt) vlib_increment_simple_counter (cm, thread_index, *last_sw_if_index, *cnt); *cnt = 1; @@ -125,7 +126,7 @@ ip4_input_inline (vlib_main_t * vm, { vnet_main_t *vnm = vnet_get_main (); u32 n_left_from, *from; - u32 thread_index = vlib_get_thread_index (); + u32 thread_index = vm->thread_index; vlib_node_runtime_t *error_node = vlib_node_get_runtime (vm, ip4_input_node.index); vlib_simple_counter_main_t *cm; @@ -206,14 +207,14 @@ ip4_input_inline (vlib_main_t * vm, } else { - ip4_input_check_sw_if_index (cm, sw_if_index[0], &last_sw_if_index, - &cnt, &arc_enabled); - ip4_input_check_sw_if_index (cm, sw_if_index[1], &last_sw_if_index, - &cnt, &arc_enabled); - ip4_input_check_sw_if_index (cm, sw_if_index[2], &last_sw_if_index, - &cnt, &arc_enabled); - ip4_input_check_sw_if_index (cm, sw_if_index[3], &last_sw_if_index, - &cnt, &arc_enabled); + ip4_input_check_sw_if_index (vm, cm, sw_if_index[0], + &last_sw_if_index, &cnt, &arc_enabled); + ip4_input_check_sw_if_index (vm, cm, sw_if_index[1], + &last_sw_if_index, &cnt, &arc_enabled); + ip4_input_check_sw_if_index (vm, cm, sw_if_index[2], + &last_sw_if_index, &cnt, &arc_enabled); + ip4_input_check_sw_if_index (vm, cm, sw_if_index[3], + &last_sw_if_index, &cnt, &arc_enabled); next[0] = ip4_input_set_next (sw_if_index[0], b[0], 1); next[1] = ip4_input_set_next (sw_if_index[1], b[1], 1); @@ -238,7 +239,7 @@ ip4_input_inline (vlib_main_t * vm, u32 next0; vnet_buffer (b[0])->ip.adj_index[VLIB_RX] = ~0; sw_if_index[0] = vnet_buffer (b[0])->sw_if_index[VLIB_RX]; - ip4_input_check_sw_if_index (cm, sw_if_index[0], &last_sw_if_index, + ip4_input_check_sw_if_index (vm, cm, sw_if_index[0], &last_sw_if_index, &cnt, &arc_enabled); next0 = ip4_input_set_next (sw_if_index[0], b[0], arc_enabled); ip[0] = vlib_buffer_get_current (b[0]); diff --git a/src/vnet/ip/ip6_forward.c b/src/vnet/ip/ip6_forward.c index 343d348df0c..41f5b151a09 100644 --- a/src/vnet/ip/ip6_forward.c +++ b/src/vnet/ip/ip6_forward.c @@ -529,7 +529,7 @@ ip6_load_balance (vlib_main_t * vm, vlib_combined_counter_main_t *cm = &load_balance_main.lbm_via_counters; u32 n_left_from, n_left_to_next, *from, *to_next; ip_lookup_next_t next; - u32 thread_index = vlib_get_thread_index (); + u32 thread_index = vm->thread_index; ip6_main_t *im = &ip6_main; from = vlib_frame_vector_args (frame); @@ -1594,7 +1594,7 @@ ip6_rewrite_inline (vlib_main_t * vm, n_left_from = frame->n_vectors; next_index = node->cached_next_index; - u32 thread_index = vlib_get_thread_index (); + u32 thread_index = vm->thread_index; while (n_left_from > 0) { diff --git a/src/vnet/ip/ip6_forward.h b/src/vnet/ip/ip6_forward.h index fcdcabd1e00..44744c0c77b 100644 --- a/src/vnet/ip/ip6_forward.h +++ b/src/vnet/ip/ip6_forward.h @@ -59,7 +59,7 @@ ip6_lookup_inline (vlib_main_t * vm, vlib_combined_counter_main_t *cm = &load_balance_main.lbm_to_counters; u32 n_left_from, n_left_to_next, *from, *to_next; ip_lookup_next_t next; - u32 thread_index = vlib_get_thread_index (); + u32 thread_index = vm->thread_index; from = vlib_frame_vector_args (frame); n_left_from = frame->n_vectors; diff --git a/src/vnet/ip/ip6_input.c b/src/vnet/ip/ip6_input.c index 3b38d347e6e..6a7669db297 100644 --- a/src/vnet/ip/ip6_input.c +++ b/src/vnet/ip/ip6_input.c @@ -73,7 +73,7 @@ ip6_input (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) vlib_node_runtime_t *error_node = vlib_node_get_runtime (vm, ip6_input_node.index); vlib_simple_counter_main_t *cm; - u32 thread_index = vlib_get_thread_index (); + u32 thread_index = vm->thread_index; from = vlib_frame_vector_args (frame); n_left_from = frame->n_vectors; diff --git a/src/vnet/ip/ping.c b/src/vnet/ip/ping.c index a929a0cdf00..096b2ebfbda 100755 --- a/src/vnet/ip/ping.c +++ b/src/vnet/ip/ping.c @@ -577,7 +577,7 @@ run_ping_ip46_address (vlib_main_t * vm, u32 table_id, ip4_address_t * pa4, pool_get (pm->ping_runs, pr); ping_run_index = pr - pm->ping_runs; pr->cli_process_id = curr_proc; - pr->cli_thread_index = vlib_get_thread_index (); + pr->cli_thread_index = vm->thread_index; pr->icmp_id = icmp_id; hash_set (pm->ping_run_by_icmp_id, icmp_id, ping_run_index); for (i = 1; i <= ping_repeat; i++) -- cgit 1.2.3-korg