MPS issue job004007

TitlePolicy gets stuck when buffers exceed capacity of generation
Statusclosed
Priorityessential
Assigned userGareth Rees
OrganizationRavenbrook
DescriptionWhen pause time is set to 100 seconds, finaltest seemed to stop making progress (still running after more than a minute). See [1].
AnalysisFinaltest deliberately creates generations with very small capacity. This means that it is easy for the unused part of a buffer, which is always accounted towards the "new size" of a generation, to exceed the generation's capacity. In this situation, PolicyStartTrace thinks that it is worth starting a trace. But the trace can't reclaim the unused part of the buffer, and so the "new size" can't be reduced to below the capacity, and PolicyPoll will keep starting more traces until the pause time limit is reached.

The unused part of the buffer should not count against the "new size" of a generation; instead it should be separately accounted.
How foundautomated_test
Evidence[1] https://info.ravenbrook.com/mail/2016/04/18/17-52-23/0/
[2] https://info.ravenbrook.com/mail/2016/04/18/21-45-56/0/
Created byGareth Rees
Created on2016-04-19 11:33:18
Last modified byGareth Rees
Last modified on2016-04-20 13:17:47
History2016-04-19 GDR Created.

Fixes

Change Effect Date User Description
191243 closed 2016-04-19 16:02:16 Gareth Rees Give buffers their own account in the pool generation accounting system. This ensures that buffers don't contribute to the "new size" of a generation, and so don't provoke collections of that generation.