X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvpp%2Fvnet%2Fmain.c;h=e0c7b0dbf584bcd39957cf6b2c399edbf89bcd0b;hb=3459ece6da90627b161e2128b5926f1e58e7db65;hp=7c7dd9870e9f8ff82ab8cbd8ef9f374497710301;hpb=a690fdbfe179e0ea65818c03b52535bf9210efd0;p=vpp.git diff --git a/src/vpp/vnet/main.c b/src/vpp/vnet/main.c index 7c7dd9870e9..e0c7b0dbf58 100644 --- a/src/vpp/vnet/main.c +++ b/src/vpp/vnet/main.c @@ -24,7 +24,8 @@ #include #include #include -#include +#include +#include /* To get the last static message id */ #include /* @@ -73,7 +74,9 @@ vpp_find_plugin_path () static void vpe_main_init (vlib_main_t * vm) { +#if VPP_API_TEST_BUILTIN > 0 void vat_plugin_hash_create (void); +#endif if (CLIB_DEBUG > 0) vlib_unix_cli_set_prompt ("DBGvpp# "); @@ -86,7 +89,9 @@ vpe_main_init (vlib_main_t * vm) /* * Create the binary api plugin hashes before loading plugins */ +#if VPP_API_TEST_BUILTIN > 0 vat_plugin_hash_create (); +#endif if (!vlib_plugin_path) vpp_find_plugin_path (); @@ -101,11 +106,14 @@ int main (int argc, char *argv[]) { int i; - vlib_main_t *vm = &vlib_global_main; void vl_msg_api_set_first_available_msg_id (u16); uword main_heap_size = (1ULL << 30); u8 *sizep; u32 size; + clib_mem_page_sz_t main_heap_log2_page_sz = CLIB_MEM_PAGE_SZ_DEFAULT; + clib_mem_page_sz_t default_log2_hugepage_sz = CLIB_MEM_PAGE_SZ_UNKNOWN; + unformat_input_t input, sub_input; + u8 *s = 0, *v = 0; int main_core = 1; cpu_set_t cpuset; void *main_heap; @@ -263,31 +271,76 @@ main (int argc, char *argv[]) } } } - defaulted: + /* temporary heap */ + clib_mem_init (0, 1 << 20); + unformat_init_command_line (&input, (char **) argv); + + while (unformat_check_input (&input) != UNFORMAT_END_OF_INPUT) + { + if (unformat (&input, "memory %v", &v)) + { + unformat_init_vector (&sub_input, v); + v = 0; + while (unformat_check_input (&sub_input) != UNFORMAT_END_OF_INPUT) + { + if (unformat (&sub_input, "main-heap-size %U", + unformat_memory_size, &main_heap_size)) + ; + else if (unformat (&sub_input, "main-heap-page-size %U", + unformat_log2_page_size, + &main_heap_log2_page_sz)) + ; + else if (unformat (&sub_input, "default-hugepage-size %U", + unformat_log2_page_size, + &default_log2_hugepage_sz)) + ; + else + { + fformat (stderr, "unknown 'memory' config input '%U'\n", + format_unformat_error, &sub_input); + exit (1); + } + + } + unformat_free (&sub_input); + } + else if (!unformat (&input, "%s %v", &s, &v)) + break; + + vec_reset_length (s); + vec_reset_length (v); + } + vec_free (s); + vec_free (v); + + unformat_free (&input); + /* set process affinity for main thread */ CPU_ZERO (&cpuset); CPU_SET (main_core, &cpuset); pthread_setaffinity_np (pthread_self (), sizeof (cpu_set_t), &cpuset); /* Set up the plugin message ID allocator right now... */ - vl_msg_api_set_first_available_msg_id (VL_MSG_FIRST_AVAILABLE); + vl_msg_api_set_first_available_msg_id (VL_MSG_MEMCLNT_LAST + 1); - /* Allocate main heap */ - if ((main_heap = clib_mem_init_thread_safe (0, main_heap_size))) - { - vlib_worker_thread_t tmp; + /* destroy temporary heap and create main one */ + clib_mem_destroy (); + if ((main_heap = clib_mem_init_with_page_size (main_heap_size, + main_heap_log2_page_sz))) + { /* Figure out which numa runs the main thread */ - vlib_get_thread_core_numa (&tmp, main_core); - __os_numa_index = tmp.numa_id; + __os_numa_index = clib_get_current_numa_node (); + + if (default_log2_hugepage_sz != CLIB_MEM_PAGE_SZ_UNKNOWN) + clib_mem_set_log2_default_hugepage_size (default_log2_hugepage_sz); /* and use the main heap as that numa's numa heap */ clib_mem_set_per_numa_heap (main_heap); - - vm->init_functions_called = hash_create (0, /* value bytes */ 0); - vpe_main_init (vm); + vlib_main_init (); + vpe_main_init (vlib_get_first_main ()); return vlib_unix_main (argc, argv); } else @@ -301,27 +354,23 @@ defaulted: } static clib_error_t * -heapsize_config (vlib_main_t * vm, unformat_input_t * input) +memory_config (vlib_main_t * vm, unformat_input_t * input) { - u32 junk; + return 0; +} - while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT) - { - if (unformat (input, "%dm", &junk) - || unformat (input, "%dM", &junk) - || unformat (input, "%dg", &junk) || unformat (input, "%dG", &junk)) - return 0; - else - return clib_error_return (0, "unknown input '%U'", - format_unformat_error, input); - } +VLIB_CONFIG_FUNCTION (memory_config, "memory"); + +static clib_error_t * +heapsize_config (vlib_main_t * vm, unformat_input_t * input) +{ return 0; } VLIB_CONFIG_FUNCTION (heapsize_config, "heapsize"); static clib_error_t * -dummy_path_config (vlib_main_t * vm, unformat_input_t * input) +placeholder_path_config (vlib_main_t * vm, unformat_input_t * input) { u8 *junk; @@ -342,7 +391,7 @@ dummy_path_config (vlib_main_t * vm, unformat_input_t * input) static clib_error_t * plugin_path_config (vlib_main_t * vm, unformat_input_t * input) { - return dummy_path_config (vm, input); + return placeholder_path_config (vm, input); } VLIB_CONFIG_FUNCTION (plugin_path_config, "plugin_path"); @@ -350,19 +399,19 @@ VLIB_CONFIG_FUNCTION (plugin_path_config, "plugin_path"); static clib_error_t * test_plugin_path_config (vlib_main_t * vm, unformat_input_t * input) { - return dummy_path_config (vm, input); + return placeholder_path_config (vm, input); } VLIB_CONFIG_FUNCTION (test_plugin_path_config, "test_plugin_path"); void vl_msg_api_post_mortem_dump (void); -void elog_post_mortem_dump (void); +void vlib_post_mortem_dump (void); void os_panic (void) { vl_msg_api_post_mortem_dump (); - elog_post_mortem_dump (); + vlib_post_mortem_dump (); abort (); } @@ -385,7 +434,7 @@ os_exit (int code) recursion_block = 1; vl_msg_api_post_mortem_dump (); - elog_post_mortem_dump (); + vlib_post_mortem_dump (); vhost_user_unmap_all (); abort (); } @@ -428,34 +477,12 @@ vlib_app_num_thread_stacks_needed (void) #include -typedef struct -{ - u8 *name; - u64 actual_virt_size; - u64 configured_virt_size; -} name_sort_t; - -static int -name_sort_cmp (void *a1, void *a2) -{ - name_sort_t *n1 = a1; - name_sort_t *n2 = a2; - - return strcmp ((char *) n1->name, (char *) n2->name); -} - static clib_error_t * show_bihash_command_fn (vlib_main_t * vm, unformat_input_t * input, vlib_cli_command_t * cmd) { int i; clib_bihash_8_8_t *h; - u64 total_actual_virt_size = 0; - u64 total_configured_virt_size = 0; - u64 actual_virt_size; - u64 configured_virt_size; - name_sort_t *names = 0; - name_sort_t *this; int verbose = 0; if (unformat (input, "verbose")) @@ -464,37 +491,9 @@ show_bihash_command_fn (vlib_main_t * vm, for (i = 0; i < vec_len (clib_all_bihashes); i++) { h = (clib_bihash_8_8_t *) clib_all_bihashes[i]; - if (alloc_arena (h) || verbose) - { - vec_add2 (names, this, 1); - this->name = format (0, "%s%c", h->name, 0); - configured_virt_size = h->memory_size; - actual_virt_size = alloc_arena (h) ? h->memory_size : 0ULL; - this->actual_virt_size = actual_virt_size; - this->configured_virt_size = configured_virt_size; - total_actual_virt_size += actual_virt_size; - total_configured_virt_size += configured_virt_size; - } + vlib_cli_output (vm, "\n%U", h->fmt_fn, h, verbose); } - vec_sort_with_function (names, name_sort_cmp); - - vlib_cli_output (vm, "%-30s %8s %s", "Name", "Actual", "Configured"); - - for (i = 0; i < vec_len (names); i++) - { - vlib_cli_output (vm, "%-30s %8U %U", names[i].name, - format_memory_size, - names[i].actual_virt_size, - format_memory_size, names[i].configured_virt_size); - vec_free (names[i].name); - } - - vec_free (names); - - vlib_cli_output (vm, "%-30s %8U %U", "Total", - format_memory_size, total_actual_virt_size, - format_memory_size, total_configured_virt_size); return 0; } @@ -512,7 +511,7 @@ VLIB_CLI_COMMAND (show_bihash_command, static) = const char * __asan_default_options (void) { - return "unmap_shadow_on_exit=1:disable_coredump=0:abort_on_error=1"; + return VPP_SANITIZE_ADDR_OPTIONS; } #endif /* CLIB_SANITIZE_ADDR */