session: improve fifo segment allocation
[vpp.git] / src / vnet / session / segment_manager.c
index f711270..a55f7d3 100644 (file)
@@ -119,6 +119,12 @@ segment_manager_add_segment_inline (segment_manager_t *sm, uword segment_size,
    * Allocate ssvm segment
    */
   segment_size = segment_size ? segment_size : props->add_segment_size;
+  /* add overhead to ensure the result segment size is at least
+   * of that requested */
+  segment_size +=
+    sizeof (fifo_segment_header_t) +
+    vlib_thread_main.n_vlib_mains * sizeof (fifo_segment_slice_t) +
+    FIFO_SEGMENT_ALLOC_OVERHEAD;
   segment_size = round_pow2 (segment_size, clib_mem_get_page_size ());
 
   if (props->segment_type != SSVM_SEGMENT_PRIVATE)
@@ -158,11 +164,11 @@ segment_manager_add_segment_inline (segment_manager_t *sm, uword segment_size,
   /*
    * Set watermarks in segment
    */
-  fs->h->high_watermark = sm->high_watermark;
-  fs->h->low_watermark = sm->low_watermark;
+  fs->high_watermark = sm->high_watermark;
+  fs->low_watermark = sm->low_watermark;
+  fs->flags = flags;
+  fs->flags &= ~FIFO_SEGMENT_F_MEM_LIMIT;
   fs->h->pct_first_alloc = props->pct_first_alloc;
-  fs->h->flags = flags;
-  fs->h->flags &= ~FIFO_SEGMENT_F_MEM_LIMIT;
 
   if (notify_app)
     {
@@ -1072,10 +1078,11 @@ segment_manager_format_sessions (segment_manager_t * sm, int verbose)
   if (!sm)
     {
       if (verbose)
-       vlib_cli_output (vm, "%-40s%-20s%-15s%-10s", "Connection", "App",
-                        "API Client", "SegManager");
+       vlib_cli_output (vm, "%-" SESSION_CLI_ID_LEN "s%-20s%-15s%-10s",
+                        "Connection", "App", "API Client", "SegManager");
       else
-       vlib_cli_output (vm, "%-40s%-20s", "Connection", "App");
+       vlib_cli_output (vm, "%-" SESSION_CLI_ID_LEN "s%-20s", "Connection",
+                        "App");
       return;
     }
 
@@ -1101,11 +1108,11 @@ segment_manager_format_sessions (segment_manager_t * sm, int verbose)
            str = format (0, "%U", format_session, session, verbose);
 
            if (verbose)
-             s = format (s, "%-40v%-20v%-15u%-10u", str, app_name,
-                         app_wrk->api_client_index,
+             s = format (s, "%-" SESSION_CLI_ID_LEN "v%-20v%-15u%-10u", str,
+                         app_name, app_wrk->api_client_index,
                          app_wrk->connects_seg_manager);
            else
-             s = format (s, "%-40v%-20v", str, app_name);
+             s = format (s, "%-" SESSION_CLI_ID_LEN "v%-20v", str, app_name);
 
            vlib_cli_output (vm, "%v", s);
            vec_reset_length (s);