MPS issue job003670

TitleChains not generalized across pools
Statusclosed
Priorityoptional
Assigned userRichard Brooksby
OrganizationRavenbrook
DescriptionThere are several user-visible problems related to generation chains:

1. There's no way to control the relationship between the objects allocated by different pool classes: you can't arrange for objects to be allocated together or garbage collected together. In particular, only AMC and AMCZ let you pass in an arbitrary chain as a parameter (AMS lets you pass in a chain, but it is restricted to a single generation, and AWL and LO create their own synthetic chains).

2. Objects allocated using different chains are forced to be collected together, even if this is undesirable. (The allocation of objects is based on the generation number within the chain, causing generation 2 of all chains to be collected together.)

3. Chains are hard to understand and poorly documented [1]. In particular, it is difficult for new users to figure out appropriate values for a generation chain.

In addition, there is an internal architectural problem:

4. The way that the arena allocates zones to chains has not been properly thought out: it's too complicated and not maintainable.
AnalysisSolutions:

1. Make all garbage-collected pools take an optional keyword parameter specifying a generation chain. Also, a new keyword parameter tells the pool which generation to allocate into.

2, 4. Instead of the arena choosing which zones to allocate to chains (based on the generation number), allow the chains to manage their zones directly and independently.

3. Provide a sensible (shared) default value for the chain parameter.
How foundinspection
Evidence[1] <http://www.ravenbrook.com/project/mps/...topic/collection.html#generation-chains>
Created byGareth Rees
Created on2014-01-30 15:30:39
Last modified byRichard Brooksby
Last modified on2014-03-17 13:26:28
History2014-01-30 GDR Created.

Fixes

Change Effect Date User Description
184342 closed 2014-02-14 15:15:07 Richard Brooksby Merging branch //info.ravenbrook.com/project/mps/branch/2014-01-29/mps-chain-zones/... into master.
184273 closed 2014-01-31 16:23:04 Gareth Rees Better user documentation for generation chains:
* In the pool class properties table, note whether a pool class uses generational garbage collection.
* The arena has a default generation chain.
* The MPS_KEY_CHAIN keyword argument is now optional when creating an AMC, AMCZ or AMS pool.
* The pool classes AWL and LO now take an optional MPS_KEY_CHAIN keyword argument.
* The pool classes AMS, AWL and LO now take an optional MPS_KEY_GEN keyword argument specifying the generation for new objects.
* Remove material about generation chains from the user guide (just use the arena's default generation chain).
184213 open 2014-01-29 12:54:05 Richard Brooksby Abolishing the redundant generation to zone map in the VM arena, and replacing it with ChainAlloc, which allocates segments within a generation.
Generations from different chains will no longer share the same zone sets, and will not be collected together. To get this behaviour, use the same chain, as documented.

Imported from Git
 Author: Richard Brooksby <rb@ravenbrook.com> 1391000045 +0000
 Committer: Richard Brooksby <rb@ravenbrook.com> 1391000045 +0000
 sha1: 32a9f9c024410807716b2eef8cecd0be600bb64f