X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvlib%2Fmain.h;h=9e7538e9f00dce2e6413e17c7c5a867e87719fcb;hb=refs%2Fchanges%2F05%2F16005%2F2;hp=2eec930e9b6bc0379447bfb325192ab28bf7eb69;hpb=88c062119b5e94ef19e02f007e38ee119b02218f;p=vpp.git diff --git a/src/vlib/main.h b/src/vlib/main.h index 2eec930e9b6..9e7538e9f00 100644 --- a/src/vlib/main.h +++ b/src/vlib/main.h @@ -46,6 +46,8 @@ #include #include #include +#include +#include #include @@ -58,6 +60,7 @@ typedef struct vlib_main_t { + CLIB_CACHE_LINE_ALIGN_MARK (cacheline0); /* Instruction level timing state. */ clib_time_t clib_time; @@ -80,6 +83,11 @@ typedef struct vlib_main_t u32 vector_counts_per_main_loop[2]; u32 node_counts_per_main_loop[2]; + /* Main loop hw / sw performance counters */ + u64 (*vlib_node_runtime_perf_counter_cb) (struct vlib_main_t *); + int perf_counter_id; + int perf_counter_fd; + /* Every so often we switch to the next counter. */ #define VLIB_LOG2_MAIN_LOOPS_PER_STATS_UPDATE 7 @@ -99,29 +107,20 @@ typedef struct vlib_main_t /* Name for e.g. syslog. */ char *name; - /* Start and size of CLIB heap. */ + /* Start of the heap. */ void *heap_base; - uword heap_size; - - vlib_buffer_main_t *buffer_main; - /* Allocate/free buffer memory for DMA transfers, descriptor rings, etc. - buffer memory is guaranteed to be cache-aligned. */ + /* Truncated version, to create frame indices */ + void *heap_aligned_base; - clib_error_t *(*os_physmem_region_alloc) (struct vlib_main_t * vm, - char *name, u32 size, - u8 numa_node, u32 flags, - vlib_physmem_region_index_t * - idx); + /* Size of the heap */ + uword heap_size; - void (*os_physmem_region_free) (struct vlib_main_t * vm, - vlib_physmem_region_index_t idx); + /* Pool of buffer free lists. */ + vlib_buffer_free_list_t *buffer_free_list_pool; - void *(*os_physmem_alloc_aligned) (struct vlib_main_t * vm, - vlib_physmem_region_index_t idx, - uword n_bytes, uword alignment); - void (*os_physmem_free) (struct vlib_main_t * vm, - vlib_physmem_region_index_t idx, void *x); + /* physical memory main structure. */ + vlib_physmem_main_t physmem_main; /* Node graph main structure. */ vlib_node_main_t node_main; @@ -132,6 +131,10 @@ typedef struct vlib_main_t /* Packet trace buffer. */ vlib_trace_main_t trace_main; + /* Pcap dispatch trace main */ + pcap_main_t dispatch_pcap_main; + uword dispatch_pcap_enable; + /* Error handling. */ vlib_error_main_t error_main; @@ -141,9 +144,6 @@ typedef struct vlib_main_t struct vlib_node_runtime_t * node, vlib_frame_t * frame); - /* Multicast distribution. Set to zero for MC disabled. */ - mc_main_t *mc_main; - /* Stream index to use for distribution when MC is enabled. */ u32 mc_stream_index; @@ -152,6 +152,10 @@ typedef struct vlib_main_t /* Event logger. */ elog_main_t elog_main; + /* Event logger trace flags */ + int elog_trace_api_messages; + int elog_trace_cli_commands; + /* Node call and return event types. */ elog_event_type_t *node_call_elog_event_types; elog_event_type_t *node_return_elog_event_types; @@ -170,8 +174,6 @@ typedef struct vlib_main_t /* to compare with node runtime */ u32 thread_index; - void **mbuf_alloc_list; - /* List of init functions to call, setup by constructors */ _vlib_init_function_list_elt_t *init_function_registrations; _vlib_init_function_list_elt_t *worker_init_function_registrations; @@ -179,7 +181,6 @@ typedef struct vlib_main_t _vlib_init_function_list_elt_t *main_loop_exit_function_registrations; _vlib_init_function_list_elt_t *api_init_function_registrations; vlib_config_function_runtime_t *config_function_registrations; - mc_serialize_msg_t *mc_msg_registrations; /* mc_main is a pointer... */ /* control-plane API queue signal pending, length indication */ volatile u32 queue_signal_pending; @@ -187,6 +188,9 @@ typedef struct vlib_main_t void (*queue_signal_callback) (struct vlib_main_t *); u8 **argv; + /* Top of (worker) dispatch loop callback */ + volatile void (*worker_thread_main_loop_callback) (struct vlib_main_t *); + /* debugging */ volatile int parked_at_barrier; @@ -208,8 +212,10 @@ typedef struct vlib_main_t /* Earliest barrier can be closed again */ f64 barrier_no_close_before; - /* Vector of pending RPC requests */ + /* RPC requests, main thread only */ uword *pending_rpc_requests; + uword *processing_rpc_requests; + clib_spinlock_t pending_rpc_lock; } vlib_main_t;