diff options
author | Matthew Pickering <matthewtpickering@gmail.com> | 2019-06-06 14:07:06 +0100 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2019-06-27 10:42:29 -0400 |
commit | 07cffc49d031df71702be3bf9006e0ad006414e2 (patch) | |
tree | ee392cff58057155beb76c3d7f609dd464e90cc8 /.gitlab-ci.yml | |
parent | ed4cbd932651bb2a2673e62aad4e5cc6492c6735 (diff) | |
download | haskell-07cffc49d031df71702be3bf9006e0ad006414e2.tar.gz |
rts: Do not traverse nursery for dead closures in LDV profile
It is important that `heapCensus` and `LdvCensusForDead` traverse the
same areas.
`heapCensus` increases the `not_used` counter which tracks how many
closures are live but haven't been used yet.
`LdvCensusForDead` increases the `void_total` counter which tracks how
many dead closures there are.
The `LAG` is then calculated by substracting the `void_total` from
`not_used` and so it is essential that `not_used >= void_total`. This
fact is checked by quite a few assertions.
However, if a program has low maximum residency but allocates a lot in
the nursery then these assertions were failing (see #16753 and #15903)
because `LdvCensusForDead` was observing dead closures from the nursery
which totalled more than the `not_used`. The same closures were not
counted by `heapCensus`.
Therefore, it seems that the correct fix is to make `LdvCensusForDead`
agree with `heapCensus` and not traverse the nursery for dead closures.
Fixes #16100 #16753 #15903 #8982
Diffstat (limited to '.gitlab-ci.yml')
0 files changed, 0 insertions, 0 deletions