gc-0.1: Poor Richard's Memory Manager
Copyright(C) 2015-2021 Edward Kmett
LicenseBSD-style (see the file LICENSE)
MaintainerEdward Kmett <ekmett@gmail.com>
Stabilityexperimental
PortabilityGHC
Safe HaskellSafe
LanguageHaskell2010

System.Mem.Manager

Description

This module supplies a variant of the selfish form of "Poor Richard's Memory Manager" by Hertz, Kane, Keudel, Bai, Ding, Gu and Bard, adapted to run in Haskell in user-space.

Due to the fact that Haskell returns memory to the operating system and doesn't really tell me about it, this follows their 'GenMS+Selfish' (without RSS) scheme.

Usage:

main = do
  _ <- selfishManager
  ...

Now, the background thread that was spawned by selfishManager will watch for signs that the host operating system is starting to cause the current process to page out to disk and respond with more aggressive garbage collection.

This empowers your code to try to avoid the inevitable death spiral that follows when GC has to happen with paged out data.

Synopsis

Memory Manager

selfishManager :: IO (ThreadId, IO Int) Source #

Run a background thread that checks for signs of memory pressure from the Host OS and kickstarts a garbage collection as needed. Returns the thread for the selfish gc manager and an IO action that can be run to count the cumulative number of managed collections

Statistics and Utilities

hardPageFaults :: IO CSize Source #

Return the total number of "hard page-faults" since the program started. These are page-faults which required us to go out to disk.