props->add_segment = 1;
}
if (opts[APP_OPTIONS_FLAGS] & APP_OPTIONS_FLAGS_USE_HUGE_PAGE)
- props->huge_page = 1;
+ props->use_huge_page = 1;
if (opts[APP_OPTIONS_RX_FIFO_SIZE])
props->rx_fifo_size = opts[APP_OPTIONS_RX_FIFO_SIZE];
if (opts[APP_OPTIONS_TX_FIFO_SIZE])
if (opts[APP_OPTIONS_FLAGS] & APP_OPTIONS_FLAGS_EVT_COLLECTOR)
app->cb_fns.app_evt_callback = app_evt_collector_get_cb_fn ();
+ if (opts[APP_OPTIONS_FLAGS] & APP_OPTIONS_FLAGS_NO_DUMP_SEGMENTS)
+ props->no_dump_segments = 1;
/* Add app to lookup by api_client_index table */
if (!application_is_builtin (app))
_ (MEMFD_FOR_BUILTIN, "Use memfd for builtin app segs") \
_ (USE_HUGE_PAGE, "Use huge page for FIFO") \
_ (GET_ORIGINAL_DST, "Get original dst enabled") \
- _ (EVT_COLLECTOR, "App requests event collector")
+ _ (EVT_COLLECTOR, "App requests event collector") \
+ _ (NO_DUMP_SEGMENTS, "Do not dump segments in core dumps")
typedef enum _app_options
{
#include <vnet/session/segment_manager.h>
#include <vnet/session/session.h>
#include <vnet/session/application.h>
+#include <sys/mman.h>
typedef struct segment_manager_main_
{
u32 default_max_fifo_size; /**< default max fifo size */
u8 default_high_watermark; /**< default high watermark % */
u8 default_low_watermark; /**< default low watermark % */
+ u8 no_dump_segments; /**< don't dump segs in core files */
} segment_manager_main_t;
static segment_manager_main_t sm_main;
vlib_thread_main.n_vlib_mains * sizeof (fifo_segment_slice_t) +
FIFO_SEGMENT_ALLOC_OVERHEAD;
- if (props->huge_page)
+ if (props->use_huge_page)
{
uword hugepage_size = clib_mem_get_default_hugepage_size ();
segment_size = round_pow2 (segment_size, hugepage_size);
goto done;
}
+ if (props->no_dump_segments || smm->no_dump_segments)
+ {
+ if (madvise (fs->ssvm.sh, fs->ssvm.ssvm_size, MADV_DONTDUMP) != 0)
+ clib_warning ("madvise MADV_DONTDUMP failed for seg %s", seg_name);
+ }
+
/*
* Initialize fifo segment
*/
* Init segment vm address allocator
*/
void
-segment_manager_main_init (void)
+segment_manager_main_init (u8 no_dump_segments)
{
segment_manager_main_t *sm = &sm_main;
sm->default_max_fifo_size = 4 << 20;
sm->default_high_watermark = 80;
sm->default_low_watermark = 50;
+ sm->no_dump_segments = no_dump_segments;
}
static u8 *
uword add_segment_size; /**< additional segment size */
u8 add_segment:1; /**< can add new segments flag */
u8 use_mq_eventfd:1; /**< use eventfds for mqs flag */
- u8 reserved:6; /**< reserved flags */
+ u8 use_huge_page : 1; /**< use hugepage */
+ u8 no_dump_segments : 1; /**< don't dump segs in core files */
+ u8 reserved : 4; /**< reserved flags */
u8 n_slices; /**< number of fs slices/threads */
ssvm_segment_type_t segment_type; /**< seg type: if set to SSVM_N_TYPES,
private segments are used */
u8 high_watermark; /**< memory usage high watermark % */
u8 low_watermark; /**< memory usage low watermark % */
u8 pct_first_alloc; /**< pct of fifo size to alloc */
- u8 huge_page; /**< use hugepage */
u32 max_segments; /**< max number of segments, 0 for unlimited */
} segment_manager_props_t;
session_state_t *states);
void segment_manager_format_sessions (segment_manager_t * sm, int verbose);
-void segment_manager_main_init (void);
+void segment_manager_main_init (u8 no_dump_segments);
segment_manager_props_t *segment_manager_props_init (segment_manager_props_t *
sm);
session_vpp_wrk_mqs_alloc (smm);
/* Initialize segment manager properties */
- segment_manager_main_init ();
+ segment_manager_main_init (smm->no_dump_segments);
/* Preallocate sessions */
if (smm->preallocated_sessions)
smm->original_dst_lookup = vlib_get_plugin_symbol (
"nat_plugin.so", "nat44_original_dst_lookup");
}
+ else if (unformat (input, "no-dump-segments"))
+ smm->no_dump_segments = 1;
/*
* Deprecated but maintained for compatibility
*/
/** Preallocate session config parameter */
u32 preallocated_sessions;
- u16 msg_id_base;
-
/** Query nat44-ed session to get original dst ip4 & dst port. */
nat44_original_dst_lookup_fn original_dst_lookup;
+
+ /** Do not dump segments in core file */
+ u8 no_dump_segments;
+
+ u16 msg_id_base;
+
session_stats_segs_indicies_t stats_seg_idx;
} session_main_t;