On 05/02/2014 03:50 PM, g...@git.haskell.org wrote: > Repository : ssh://g...@git.haskell.org/ghc > > On branch : master > Link : > http://ghc.haskell.org/trac/ghc/changeset/b0534f78a73f972e279eed4447a5687bd6a8308e/ghc > >> --------------------------------------------------------------- > > commit b0534f78a73f972e279eed4447a5687bd6a8308e > Author: Simon Marlow <marlo...@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-comm...@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. _______________________________________________ ghc-devs mailing list ghc-devs@haskell.org http://www.haskell.org/mailman/listinfo/ghc-devs