X-Git-Url: https://git.proxmox.com/?p=proxmox-backup.git;a=blobdiff_plain;f=pbs-tools%2Fsrc%2Flib.rs;h=939ba7e6b16bba0eb6ea03f31b2bae3e0ebdf4a4;hp=254dd41cef20e6ee982788975e8126316ad8b2d6;hb=d91a0f9fc90aecabc4f359d968f716a14562ce78;hpb=f75292bd8df7e8ff1340e888988461d46e32a5cf diff --git a/pbs-tools/src/lib.rs b/pbs-tools/src/lib.rs index 254dd41c..939ba7e6 100644 --- a/pbs-tools/src/lib.rs +++ b/pbs-tools/src/lib.rs @@ -1,9 +1,29 @@ -pub mod borrow; +pub mod cert; +pub mod crypt_config; pub mod format; -pub mod fs; pub mod json; +pub mod lru_cache; pub mod nom; -pub mod str; +pub mod sha; +pub mod ticket; -mod command; -pub use command::{command_output, command_output_as_string, run_command}; +pub mod async_lru_cache; + +/// Set MMAP_THRESHOLD to a fixed value (128 KiB) +/// +/// This avoids the "dynamic" mmap-treshold logic from glibc's malloc, which seems misguided and +/// effectively avoids using mmap for all allocations smaller than 32 MiB. Which, in combination +/// with the allocation pattern from our/tokio's complex async machinery, resulted in very large +/// RSS sizes due to defragmentation and long-living (smaller) allocation on top of the heap +/// avoiding that the (big) now free'd allocations below couldn't get given back to the OS. This is +/// not an issue with mmap'd memeory chunks, those can be given back at any time. +/// +/// Lowering effective MMAP treshold to 128 KiB allows freeing up memory to the OS better and with +/// lower latency, which reduces the peak *and* average RSS size by an order of magnitude when +/// running backup jobs. We measured a reduction by a factor of 10-20 in experiments and see much +/// less erratic behavior in the overall's runtime RSS size. +pub fn setup_libc_malloc_opts() { + unsafe { + libc::mallopt(libc::M_MMAP_THRESHOLD, 4096*32); + } +}