X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvlib%2Fmain.c;h=94218d3d9d892792b05f9382159a79938bfdb5fa;hb=a357a938019c8df2b061cc5bd14cd8a64fac694f;hp=1c6b9ba63292c1f9e65674e70eea3d80de6e35e5;hpb=e5948fb49a6eeaf437323cc1043a350cd33bcd47;p=vpp.git diff --git a/src/vlib/main.c b/src/vlib/main.c index 1c6b9ba6329..94218d3d9d8 100644 --- a/src/vlib/main.c +++ b/src/vlib/main.c @@ -52,8 +52,6 @@ CJ_GLOBAL_LOG_PROTOTYPE; speculative vector enqueues which overflow vector data in next frame. */ #define VLIB_FRAME_SIZE_ALLOC (VLIB_FRAME_SIZE + 4) -u32 wraps; - always_inline u32 vlib_frame_bytes (u32 n_scalar_bytes, u32 n_vector_bytes) { @@ -1006,14 +1004,17 @@ format_buffer_metadata (u8 * s, va_list * args) s = format (s, "flags: %U\n", format_vnet_buffer_flags, b); s = format (s, "current_data: %d, current_length: %d\n", (i32) (b->current_data), (i32) (b->current_length)); - s = format (s, "current_config_index: %d, flow_id: %x, next_buffer: %x\n", - b->current_config_index, b->flow_id, b->next_buffer); - s = format (s, "error: %d, ref_count: %d, buffer_pool_index: %d\n", - (u32) (b->error), (u32) (b->ref_count), - (u32) (b->buffer_pool_index)); - s = format (s, - "trace_handle: 0x%x, len_not_first_buf: %d\n", - b->trace_handle, b->total_length_not_including_first_buffer); + s = format + (s, + "current_config_index/punt_reason: %d, flow_id: %x, next_buffer: %x\n", + b->current_config_index, b->flow_id, b->next_buffer); + s = + format (s, "error: %d, ref_count: %d, buffer_pool_index: %d\n", + (u32) (b->error), (u32) (b->ref_count), + (u32) (b->buffer_pool_index)); + s = + format (s, "trace_handle: 0x%x, len_not_first_buf: %d\n", b->trace_handle, + b->total_length_not_including_first_buffer); return s; } @@ -1025,7 +1026,7 @@ dispatch_pcap_trace (vlib_main_t * vm, { int i; vlib_buffer_t *bufs[VLIB_FRAME_SIZE], **bufp, *b; - pcap_main_t *pm = &vm->dispatch_pcap_main; + pcap_main_t *pm = &vlib_global_main.dispatch_pcap_main; vlib_trace_main_t *tm = &vm->trace_main; u32 capture_size; vlib_node_t *n; @@ -1376,6 +1377,12 @@ dispatch_pending_node (vlib_main_t * vm, uword pending_frame_index, VLIB_NODE_TYPE_INTERNAL, VLIB_NODE_STATE_POLLING, f, last_time_stamp); + /* Internal node vector-rate accounting, for summary stats */ + vm->internal_node_vectors += f->n_vectors; + vm->internal_node_calls++; + vm->internal_node_last_vectors_per_main_loop = + (f->n_vectors > vm->internal_node_last_vectors_per_main_loop) ? + f->n_vectors : vm->internal_node_last_vectors_per_main_loop; f->frame_flags &= ~(VLIB_FRAME_PENDING | VLIB_FRAME_NO_APPEND); @@ -1710,6 +1717,7 @@ vlib_main_or_worker_loop (vlib_main_t * vm, int is_main) vm->cpu_id = clib_get_current_cpu_id (); vm->numa_node = clib_get_current_numa_node (); + os_set_numa_index (vm->numa_node); /* Start all processes. */ if (is_main) @@ -1915,7 +1923,6 @@ vlib_main_or_worker_loop (vlib_main_t * vm, int is_main) } } vlib_increment_main_loop_counter (vm); - /* Record time stamp in case there are no enabled nodes and above calls do not update time stamp. */ cpu_time_now = clib_cpu_time_now (); @@ -2015,8 +2022,6 @@ vlib_main (vlib_main_t * volatile vm, unformat_input_t * input) vm->queue_signal_callback = dummy_queue_signal_callback; - clib_time_init (&vm->clib_time); - /* Turn on event log. */ if (!vm->elog_main.event_ring_size) vm->elog_main.event_ring_size = 128 << 10; @@ -2202,7 +2207,7 @@ vlib_pcap_dispatch_trace_configure (vlib_pcap_dispatch_trace_args_t * a) return -81; /* VNET_API_ERROR_VALUE_EXIST */ /* Change number of packets to capture while capturing */ - if (vm->dispatch_pcap_enable + if (vm->dispatch_pcap_enable && a->enable && (pm->n_packets_to_capture != a->packets_to_capture)) return -8; /* VNET_API_ERROR_INVALID_VALUE_2 */ @@ -2240,12 +2245,16 @@ vlib_pcap_dispatch_trace_configure (vlib_pcap_dispatch_trace_args_t * a) pm->file_name = (char *) a->filename; pm->n_packets_captured = 0; pm->packet_type = PCAP_PACKET_TYPE_vpp; - vm->dispatch_pcap_enable = 1; pm->n_packets_to_capture = a->packets_to_capture; + /* *INDENT-OFF* */ + foreach_vlib_main (({this_vlib_main->dispatch_pcap_enable = 1;})); + /* *INDENT-ON* */ } else { - vm->dispatch_pcap_enable = 0; + /* *INDENT-OFF* */ + foreach_vlib_main (({this_vlib_main->dispatch_pcap_enable = 0;})); + /* *INDENT-ON* */ vec_reset_length (vm->dispatch_buffer_trace_nodes); if (pm->n_packets_captured) { @@ -2254,7 +2263,7 @@ vlib_pcap_dispatch_trace_configure (vlib_pcap_dispatch_trace_args_t * a) vlib_cli_output (vm, "Write %d packets to %s, and stop capture...", pm->n_packets_captured, pm->file_name); error = pcap_write (pm); - if (pm->file_descriptor >= 0) + if (pm->flags & PCAP_MAIN_INIT_DONE) pcap_close (pm); /* Report I/O errors... */ if (error)