Activity log for bug #1339924

Date Who What changed Old value New value Message
2014-07-09 23:13:48 Ilya Perminov bug added bug
2014-07-09 23:25:11 Ilya Perminov attachment added A test case https://bugs.launchpad.net/sbcl/+bug/1339924/+attachment/4149163/+files/gc-test.lisp
2014-07-10 03:22:44 Ilya Perminov attachment added gc.patch https://bugs.launchpad.net/sbcl/+bug/1339924/+attachment/4149239/+files/gc.patch
2014-07-10 03:23:49 Ilya Perminov description The garbage collector becomes very slow as the number of threads grows. The problem is in scavenge_newspace_generation (in gencgc.c). It invokes gc_alloc_update_all_page_tables in loop over sets of new areas. gc_alloc_update_all_page_tables, in its turn, iterates over all treads. There seems to be an easy fix to the problem: GC is single-threaded and all memory allocations during a collection happen in the GC thread, so it is sufficient to update all the the page tables once at the beginning of a collection and update only page tables of the GC thread during the collection. The garbage collector becomes very slow as the number of threads grows. The problem is in scavenge_newspace_generation (in gencgc.c). It invokes gc_alloc_update_all_page_tables in loop over sets of new areas. gc_alloc_update_all_page_tables, in its turn, iterates over all threads. There seems to be an easy fix to the problem: GC is single-threaded and all memory allocations during a collection happen in the GC thread, so it is sufficient to update all the the page tables once at the beginning of a collection and update only page tables of the GC thread during the collection.
2014-07-10 16:57:16 Mark W Johnson bug added subscriber Mark W Johnson
2016-10-06 17:21:10 Stas Boukarev sbcl: assignee Stas Boukarev (stassats)
2016-10-06 18:54:21 Stas Boukarev sbcl: assignee Stas Boukarev (stassats)
2016-10-06 18:54:22 Stas Boukarev sbcl: status New Fix Committed
2016-10-31 12:12:33 Christophe Rhodes sbcl: status Fix Committed Fix Released