Copyright | (C) 2015-2021 Edward Kmett |
---|---|
License | BSD-style (see the file LICENSE) |
Maintainer | Edward Kmett <ekmett@gmail.com> |
Stability | experimental |
Portability | GHC |
Safe Haskell | Safe |
Language | Haskell2010 |
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
- selfishManager :: IO (ThreadId, IO Int)
- hardPageFaults :: IO CSize
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.