mnemosyne_core/
options.rs1use core::sync::atomic::{AtomicBool, AtomicUsize};
7
8pub static MAX_RETAINED_SEGMENTS: AtomicUsize = AtomicUsize::new(default_max_retained_segments());
10
11const fn default_max_retained_segments() -> usize {
12 if cfg!(miri) {
16 0
17 } else {
18 crate::constants::MAX_RETAINED_SEGMENTS_LIMIT
19 }
20}
21
22pub static ENABLE_HUGEPAGE_HINT: AtomicBool = AtomicBool::new(true);
24
25pub static PURGE_CADENCE_MS: AtomicUsize = AtomicUsize::new(0);
27
28#[derive(Clone, Copy, Debug, Eq, PartialEq)]
30pub struct MnemosyneOptions {
31 pub max_retained_segments: usize,
34 pub purge_cadence_ms: usize,
37 pub enable_hugepage_hint: bool,
40}
41
42impl Default for MnemosyneOptions {
43 #[inline]
44 fn default() -> Self {
45 Self {
46 max_retained_segments: default_max_retained_segments(),
47 purge_cadence_ms: 0,
48 enable_hugepage_hint: true,
49 }
50 }
51}
52
53#[inline]
55pub fn get_options() -> MnemosyneOptions {
56 use core::sync::atomic::Ordering;
57 MnemosyneOptions {
58 max_retained_segments: MAX_RETAINED_SEGMENTS.load(Ordering::Acquire),
59 purge_cadence_ms: PURGE_CADENCE_MS.load(Ordering::Acquire),
60 enable_hugepage_hint: ENABLE_HUGEPAGE_HINT.load(Ordering::Acquire),
61 }
62}
63
64#[inline]
66pub fn set_options(options: MnemosyneOptions) {
67 use core::sync::atomic::Ordering;
68 let clamped_retained = core::cmp::min(
69 options.max_retained_segments,
70 crate::constants::MAX_RETAINED_SEGMENTS_LIMIT,
71 );
72 MAX_RETAINED_SEGMENTS.store(clamped_retained, Ordering::Release);
73 PURGE_CADENCE_MS.store(options.purge_cadence_ms, Ordering::Release);
74 ENABLE_HUGEPAGE_HINT.store(options.enable_hugepage_hint, Ordering::Release);
75}