[commit: ghc] master: Per-thread allocation counters and limits (b0534f7)
Mateusz Kowalczyk
fuuzetsu at fuuzetsu.co.uk
Sat May 3 06:31:47 UTC 2014
On 05/02/2014 03:50 PM, git at git.haskell.org wrote:
> Repository : ssh://git@git.haskell.org/ghc
>
> On branch : master
> Link : http://ghc.haskell.org/trac/ghc/changeset/b0534f78a73f972e279eed4447a5687bd6a8308e/ghc
>
>> ---------------------------------------------------------------
>
> commit b0534f78a73f972e279eed4447a5687bd6a8308e
> Author: Simon Marlow <marlowsd at gmail.com>
> Date: Mon Apr 28 16:55:47 2014 +0100
>
> 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.
>
>
>> ---------------------------------------------------------------
>
> b0534f78a73f972e279eed4447a5687bd6a8308e
> compiler/cmm/CmmLayoutStack.hs | 9 +-
> compiler/codeGen/StgCmmForeign.hs | 268 ++++++++++++++------
> includes/CodeGen.Platform.hs | 4 +-
> includes/rts/Constants.h | 6 +
> includes/rts/Flags.h | 8 +
> includes/rts/Threads.h | 8 +-
> includes/rts/storage/TSO.h | 31 ++-
> libraries/base/Control/Exception.hs | 1 +
> libraries/base/Control/Exception/Base.hs | 1 +
> libraries/base/GHC/Conc.lhs | 6 +
> libraries/base/GHC/Conc/Sync.lhs | 92 ++++++-
> libraries/base/GHC/IO/Exception.hs | 21 +-
> rts/HeapStackCheck.cmm | 4 +-
> rts/Linker.c | 4 +
> rts/Prelude.h | 2 +
> rts/RaiseAsync.c | 54 ++++
> rts/RaiseAsync.h | 4 +
> rts/RtsFlags.c | 10 +
> rts/RtsStartup.c | 1 +
> rts/Schedule.c | 19 ++
> rts/Threads.c | 77 +++---
> rts/package.conf.in | 2 +
> rts/sm/Storage.c | 6 +
> testsuite/tests/concurrent/should_run/all.T | 7 +
> .../tests/concurrent/should_run/allocLimit1.hs | 9 +
> .../tests/concurrent/should_run/allocLimit1.stderr | 1 +
> .../tests/concurrent/should_run/allocLimit2.hs | 17 ++
> .../tests/concurrent/should_run/allocLimit3.hs | 15 ++
> .../tests/concurrent/should_run/allocLimit3.stderr | 1 +
> .../should_run/allocLimit3.stdout} | 1 -
> .../tests/concurrent/should_run/allocLimit4.hs | 31 +++
> utils/deriveConstants/DeriveConstants.hs | 1 +
> 32 files changed, 576 insertions(+), 145 deletions(-)
>
> Diff suppressed because of size. To see it, use:
>
> git diff-tree --root --patch-with-stat --no-color --find-copies-harder --ignore-space-at-eol --cc b0534f78a73f972e279eed4447a5687bd6a8308e
> _______________________________________________
> ghc-commits mailing list
> ghc-commits at haskell.org
> http://www.haskell.org/mailman/listinfo/ghc-commits
>
I just tried to compile a snapshot involving this commit and got a
compile failure:
http://lpaste.net/103540
I was compiling with GHC 7.8.2 on a 32-bit machine.
--
Mateusz K.
More information about the ghc-devs
mailing list