session: improve fifo segment allocation 80/34580/2
authorFilip Tehlar <ftehlar@cisco.com>
Wed, 24 Nov 2021 10:30:59 +0000 (10:30 +0000)
committerFilip Tehlar <ftehlar@cisco.com>
Wed, 24 Nov 2021 19:48:52 +0000 (19:48 +0000)
This patch ensures that fifo segment has at least the size that was
requested during allocation.

Type: improvement

Signed-off-by: Filip Tehlar <ftehlar@cisco.com>
Change-Id: Iea8a885ac290183e25e5c8f9163bba226c5efa15

src/svm/fifo_segment.c
src/svm/fifo_segment.h
src/vnet/session/segment_manager.c

index 2ff272e..48d019c 100644 (file)
@@ -295,7 +295,7 @@ fss_fl_chunk_bytes_sub (fifo_segment_slice_t * fss, uword size)
 int
 fifo_segment_init (fifo_segment_t * fs)
 {
-  u32 align = 8, offset = 2 * 4096, slices_sz, i;
+  u32 align = 8, offset = FIFO_SEGMENT_ALLOC_OVERHEAD, slices_sz, i;
   uword max_fifo, seg_start, seg_sz;
   fifo_segment_header_t *fsh;
   ssvm_shared_header_t *sh;
index de4622f..440f1bb 100644 (file)
@@ -20,6 +20,8 @@
 #include <svm/message_queue.h>
 #include <svm/svm_fifo.h>
 
+#define FIFO_SEGMENT_ALLOC_OVERHEAD (2 * clib_mem_get_page_size ())
+
 typedef enum
 {
   FIFO_SEGMENT_FTYPE_NONE = -1,
index e04f626..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)