Title | Policy gets stuck when buffers exceed capacity of generation |
Status | closed |
Priority | essential |
Assigned user | Gareth Rees |
Organization | Ravenbrook |
Description | When pause time is set to 100 seconds, finaltest seemed to stop making progress (still running after more than a minute). See [1]. |
Analysis | Finaltest 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 found | automated_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 by | Gareth Rees |
Created on | 2016-04-19 11:33:18 |
Last modified by | Gareth Rees |
Last modified on | 2016-04-20 13:17:47 |
History | 2016-04-19 GDR Created. |
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. |