Add packet tracing hint
This avoids checking the buffer flags bit if tracing is not enabled. Change-Id: I32e1a90b5fd10318254c611344488bc2a441c71e Signed-off-by: Todd Foggoa (tfoggoa) <tfoggoa@cisco.com>
This commit is contained in:

committed by
Gerrit Code Review

parent
060c6fc0b5
commit
d56a6f59e9
@ -121,6 +121,8 @@ clear_trace_buffer (void)
|
|||||||
tm = &this_vlib_main->trace_main;
|
tm = &this_vlib_main->trace_main;
|
||||||
mainheap = clib_mem_set_heap (this_vlib_main->heap_base);
|
mainheap = clib_mem_set_heap (this_vlib_main->heap_base);
|
||||||
|
|
||||||
|
tm->trace_active_hint = 0;
|
||||||
|
|
||||||
for (i = 0; i < vec_len (tm->trace_buffer_pool); i++)
|
for (i = 0; i < vec_len (tm->trace_buffer_pool); i++)
|
||||||
if (! pool_is_free_index (tm->trace_buffer_pool, i))
|
if (! pool_is_free_index (tm->trace_buffer_pool, i))
|
||||||
vec_free (tm->trace_buffer_pool[i]);
|
vec_free (tm->trace_buffer_pool[i]);
|
||||||
@ -369,6 +371,8 @@ cli_add_trace_buffer (vlib_main_t * vm,
|
|||||||
void *oldheap;
|
void *oldheap;
|
||||||
tm = &this_vlib_main->trace_main;
|
tm = &this_vlib_main->trace_main;
|
||||||
|
|
||||||
|
tm->trace_active_hint = 1;
|
||||||
|
|
||||||
oldheap = clib_mem_set_heap (this_vlib_main->heap_base);
|
oldheap = clib_mem_set_heap (this_vlib_main->heap_base);
|
||||||
|
|
||||||
vec_validate (tm->nodes, node_index);
|
vec_validate (tm->nodes, node_index);
|
||||||
|
@ -76,6 +76,9 @@ typedef struct {
|
|||||||
#define FILTER_FLAG_EXCLUDE 2
|
#define FILTER_FLAG_EXCLUDE 2
|
||||||
u32 filter_count;
|
u32 filter_count;
|
||||||
|
|
||||||
|
/* set on trace add, cleared on clear trace */
|
||||||
|
u32 trace_active_hint;
|
||||||
|
|
||||||
/* Per node trace counts. */
|
/* Per node trace counts. */
|
||||||
vlib_trace_node_t * nodes;
|
vlib_trace_node_t * nodes;
|
||||||
} vlib_trace_main_t;
|
} vlib_trace_main_t;
|
||||||
|
@ -154,6 +154,8 @@ handoff_dispatch_node_fn (vlib_main_t * vm,
|
|||||||
next0 = vnet_buffer(b0)->io_handoff.next_index;
|
next0 = vnet_buffer(b0)->io_handoff.next_index;
|
||||||
next1 = vnet_buffer(b1)->io_handoff.next_index;
|
next1 = vnet_buffer(b1)->io_handoff.next_index;
|
||||||
|
|
||||||
|
if (PREDICT_FALSE(vm->trace_main.trace_active_hint))
|
||||||
|
{
|
||||||
if (PREDICT_FALSE(b0->flags & VLIB_BUFFER_IS_TRACED))
|
if (PREDICT_FALSE(b0->flags & VLIB_BUFFER_IS_TRACED))
|
||||||
{
|
{
|
||||||
vlib_trace_buffer (vm, node, next0, b0, /* follow_chain */ 0);
|
vlib_trace_buffer (vm, node, next0, b0, /* follow_chain */ 0);
|
||||||
@ -174,6 +176,7 @@ handoff_dispatch_node_fn (vlib_main_t * vm,
|
|||||||
t->next_index = next1;
|
t->next_index = next1;
|
||||||
t->buffer_index = bi1;
|
t->buffer_index = bi1;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* verify speculative enqueues, maybe switch current next frame */
|
/* verify speculative enqueues, maybe switch current next frame */
|
||||||
vlib_validate_buffer_enqueue_x2 (vm, node, next_index,
|
vlib_validate_buffer_enqueue_x2 (vm, node, next_index,
|
||||||
@ -200,6 +203,8 @@ handoff_dispatch_node_fn (vlib_main_t * vm,
|
|||||||
|
|
||||||
next0 = vnet_buffer(b0)->io_handoff.next_index;
|
next0 = vnet_buffer(b0)->io_handoff.next_index;
|
||||||
|
|
||||||
|
if (PREDICT_FALSE(vm->trace_main.trace_active_hint))
|
||||||
|
{
|
||||||
if (PREDICT_FALSE(b0->flags & VLIB_BUFFER_IS_TRACED))
|
if (PREDICT_FALSE(b0->flags & VLIB_BUFFER_IS_TRACED))
|
||||||
{
|
{
|
||||||
vlib_trace_buffer (vm, node, next0, b0, /* follow_chain */ 0);
|
vlib_trace_buffer (vm, node, next0, b0, /* follow_chain */ 0);
|
||||||
@ -210,6 +215,7 @@ handoff_dispatch_node_fn (vlib_main_t * vm,
|
|||||||
t->next_index = next0;
|
t->next_index = next0;
|
||||||
t->buffer_index = bi0;
|
t->buffer_index = bi0;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* verify speculative enqueue, maybe switch current next frame */
|
/* verify speculative enqueue, maybe switch current next frame */
|
||||||
vlib_validate_buffer_enqueue_x1 (vm, node, next_index,
|
vlib_validate_buffer_enqueue_x1 (vm, node, next_index,
|
||||||
|
Reference in New Issue
Block a user