Make RTS keep less memory (fixes #14702)
authorAndrey Sverdlichenko <blaze@ruddy.ru>
Thu, 1 Feb 2018 02:33:58 +0000 (21:33 -0500)
committerBen Gamari <ben@smart-cactus.org>
Thu, 1 Feb 2018 04:28:06 +0000 (23:28 -0500)
commit0171e09e4d073d8466953ebbf01292e55829fb20
tree4a939f8132e7568a497b96adddf23d4d74f62349
parent5f922fbbef56dd4f0133ffe07ab8f0ebcb58fbaf
Make RTS keep less memory (fixes #14702)

Currently runtime keeps hold to 4*used_memory. This includes, in
particular, nursery, which can be quite large on multiprocessor
machines: 16 CPUs x 64Mb each is 1GB. Multiplying it by 4 means whatever
actual memory usage is, runtime will never release memory under 4GB, and
this is quite excessive for processes which only need a lot of memory
shortly (think building data structures from large files).

This diff makes multiplier to apply only to GC-managed memory, leaving
all "static" allocations alone.

Test Plan: make test TEST="T14702"

Reviewers: bgamari, erikd, simonmar

Reviewed By: simonmar

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #14702

Differential Revision: https://phabricator.haskell.org/D4338
rts/RetainerProfile.c
rts/RetainerProfile.h
rts/sm/GC.c
testsuite/tests/rts/T14702.hs [new file with mode: 0644]
testsuite/tests/rts/all.T