diff options
author | Simon Marlow <marlowsd@gmail.com> | 2014-04-28 16:55:47 +0100 |
---|---|---|
committer | Simon Marlow <marlowsd@gmail.com> | 2014-05-02 14:49:22 +0100 |
commit | b0534f78a73f972e279eed4447a5687bd6a8308e (patch) | |
tree | 02d52756620bf27b9df9db45c57dacf55f190842 /rts/package.conf.in | |
parent | 34db5ccf52ec2a1b5e953c282d0c52a7fc82c02a (diff) | |
download | haskell-b0534f78a73f972e279eed4447a5687bd6a8308e.tar.gz |
Per-thread allocation counters and limits
This tracks the amount of memory allocation by each thread in a
counter stored in the TSO. Optionally, when the counter drops below
zero (it counts down), the thread can be sent an asynchronous
exception: AllocationLimitExceeded. When this happens, given a small
additional limit so that it can handle the exception. See
documentation in GHC.Conc for more details.
Allocation limits are similar to timeouts, but
- timeouts use real time, not CPU time. Allocation limits do not
count anything while the thread is blocked or in foreign code.
- timeouts don't re-trigger if the thread catches the exception,
allocation limits do.
- timeouts can catch non-allocating loops, if you use
-fno-omit-yields. This doesn't work for allocation limits.
I couldn't measure any impact on benchmarks with these changes, even
for nofib/smp.
Diffstat (limited to 'rts/package.conf.in')
-rw-r--r-- | rts/package.conf.in | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/rts/package.conf.in b/rts/package.conf.in index 4c8686f262..25fb5eb543 100644 --- a/rts/package.conf.in +++ b/rts/package.conf.in @@ -98,6 +98,7 @@ ld-options: , "-Wl,-u,_base_ControlziExceptionziBase_nonTermination_closure" , "-Wl,-u,_base_GHCziIOziException_blockedIndefinitelyOnMVar_closure" , "-Wl,-u,_base_GHCziIOziException_blockedIndefinitelyOnSTM_closure" + , "-Wl,-u,_base_GHCziIOziException_allocationQuotaExceeded_closure" , "-Wl,-u,_base_ControlziExceptionziBase_nestedAtomically_closure" , "-Wl,-u,_base_GHCziWeak_runFinalizzerBatch_closure" , "-Wl,-u,_base_GHCziTopHandler_flushStdHandles_closure" @@ -138,6 +139,7 @@ ld-options: , "-Wl,-u,base_ControlziExceptionziBase_nonTermination_closure" , "-Wl,-u,base_GHCziIOziException_blockedIndefinitelyOnMVar_closure" , "-Wl,-u,base_GHCziIOziException_blockedIndefinitelyOnSTM_closure" + , "-Wl,-u,base_GHCziIOziException_allocationQuotaExceeded_closure" , "-Wl,-u,base_ControlziExceptionziBase_nestedAtomically_closure" , "-Wl,-u,base_GHCziWeak_runFinalizzerBatch_closure" , "-Wl,-u,base_GHCziTopHandler_flushStdHandles_closure" |