This project is mirrored from https://gitlab.haskell.org/ghc/ghc.git.
Pull mirroring failed .
Repository mirroring has been paused due to too many failed attempts, and can be resumed by a project maintainer.
Last successful update .
Repository mirroring has been paused due to too many failed attempts, and can be resumed by a project maintainer.
Last successful update .
- 19 Oct, 2019 40 commits
-
-
Ben Gamari authored
-
Ben Gamari authored
-
Ben Gamari authored
This is consistent with the other unoptimized ways.
-
Ben Gamari authored
The nonmoving way finalizes things in a different order.
-
Ben Gamari authored
The nonmoving collector doesn't support -G1
-
Ben Gamari authored
-
Ben Gamari authored
The debugged RTS initializes the heap with 0xaa, which breaks the (admittedly rather fragile) assumption that uninitialized fields are set to 0x00: ``` Wrong exit code for heap_all(nonmoving)(expected 0 , actual 1 ) Stderr ( heap_all ): heap_all: user error (assertClosuresEq: Closures do not match Expected: FunClosure {info = StgInfoTable {entry = Nothing, ptrs = 0, nptrs = 1, tipe = FUN_0_1, srtlen = 0, code = Nothing}, ptrArgs = [], dataArgs = [0]} Actual: FunClosure {info = StgInfoTable {entry = Nothing, ptrs = 0, nptrs = 1, tipe = FUN_0_1, srtlen = 1032832, code = Nothing}, ptrArgs = [], dataArgs = [12297829382473034410]} CallStack (from HasCallStack): assertClosuresEq, called at heap_all.hs:230:9 in main:Main ) ```
-
Ben Gamari authored
-
Ben Gamari authored
-
Ben Gamari authored
-
Ben Gamari authored
-
Ben Gamari authored
The nonmoving GC doesn't support `+RTS -G1`, which this test insists on.
-
Ben Gamari authored
This uses the nonmoving collector when compiling the testcases.
-
Ben Gamari authored
-
Ben Gamari authored
Flush the update remembered set. The goal here is to flush periodically to ensure that we don't end up with a thread who marks their stack on their local update remembered set and doesn't flush until the nonmoving sync period as this would result in a large fraction of the heap being marked during the sync pause.
-
Ben Gamari authored
-
Ben Gamari authored
-
Ben Gamari authored
Previously we would perform a preparatory moving collection, resulting in many things being added to the mark queue. When we finished with this we would realize in nonmovingCollect that there was already a collection running, in which case we would simply not run the nonmoving collector. However, it was very easy to end up in a "treadmilling" situation: all subsequent GC following the first failed major GC would be scheduled as major GCs. Consequently we would continuously feed the concurrent collector with more mark queue entries and it would never finish. This patch aborts the major collection far earlier, meaning that we avoid adding nonmoving objects to the mark queue and allowing the concurrent collector to finish.
-
Ben Gamari authored
-
Ben Gamari authored
Previously we would look at the segment header to determine the block size despite the fact that we already had the block size at hand.
-
Ben Gamari authored
-
Ben Gamari authored
This improved overall runtime on nofib's constraints test by nearly 10%.
-
Ben Gamari authored
-
Ben Gamari authored
-
Ben Gamari authored
Ensure that the bitmap of the segmentt that we will clear next is in cache by the time we reach it.
-
Ben Gamari authored
-
Ben Gamari authored
Use memchr instead of a open-coded loop. This is nearly twice as fast in a synthetic benchmark.
-
Ben Gamari authored
This shortens MarkQueueEntry by 30% (one word)
-
Ben Gamari authored
-
Ben Gamari authored
Perf showed that the this single div was capturing up to 10% of samples in nonmovingMark. However, the overwhelming majority of cases is looking at small block sizes. These cases we can easily compute explicitly, allowing the compiler to turn the division into a significantly more efficient division-by-constant. While the increase in source code looks scary, this all optimises down to very nice looking assembler. At this point the only remaining hotspots in nonmovingBlockCount are due to memory access.
-
Ben Gamari authored
-
Ben Gamari authored
-
Ben Gamari authored
This commit does two things: * Allow aging of objects during the preparatory minor GC * Refactor handling of static objects to avoid the use of a hashtable
-
Ben Gamari authored
-
Ben Gamari authored
-
Ben Gamari authored
-
Ben Gamari authored
-
Ben Gamari authored
-
Ben Gamari authored
-
Ben Gamari authored
Otherwise the census is unsafe when mutators are running due to concurrent mutation.
-