rts: enable parallel GC scan of large (32M+) allocation area
authorSergei Trofimovich <slyfox@gentoo.org>
Tue, 30 Aug 2016 11:10:54 +0000 (12:10 +0100)
committerSergei Trofimovich <siarheit@google.com>
Tue, 30 Aug 2016 11:11:40 +0000 (12:11 +0100)
commita5d26f26d33bc04f31eaff50b7d633444192b4cb
tree7c796946c0fb6081904e05b7fbd03ffa5bd55afc
parent9d175605e52fd0d85f2548896358d96ee441c7e4
rts: enable parallel GC scan of large (32M+) allocation area

Parallel GC does not scan large allocation area (-A)
effectively as it does not do work stealing from nursery
by default.

That leads to large imbalance when only one of threads
overflows allocation area: most of GC threads finish
quickly (as there is not much to collect) and sit idle
waiting while single GC thread finishes scan of single
allocation area for that thread.

The patch enables work stealing for (equivalent of -qb0)
allocation area of -A32M or higher.

Tested on a highlighting-kate package from Trac #9221

On 8-core machine the difference is around 5% faster
of wall-clock time. On 24-core VM the speedup is 20%.

Signed-off-by: Sergei Trofimovich <siarheit@google.com>
Test Plan: measured wall time and GC parallelism on highlighting-kate build

Reviewers: austin, bgamari, erikd, simonmar

Reviewed By: bgamari, simonmar

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D2483

GHC Trac Issues: #9221
docs/users_guide/runtime_control.rst
rts/RtsFlags.c