MPS issue job003798

TitleTract tables are inflexible
Statusopen
Priorityoptional
Assigned userGareth Rees
OrganizationRavenbrook
DescriptionA tract is the unit of allocation from the arena and so segments must be made up of tracts. But this is inflexible: we want to be able to allocate in large units (so that there is less space and time overhead in maintaining the allocation table -- see job003823) but we want segments to be small (so that remembered sets are more accurate).
AnalysisTracts are used for allocation, for address lookup, for the arena's ring of spare pages, and by the MFS and MV pool classes. So these concerns need to be separated. [1]

Plan is as follows:

1. Fix job003554 so that we don't have to worry about chunks.
Fixed by branch/2014-01-17/cbs-tract-alloc [2] and branch/2014-05-17/chunk-tree [3].

2. Eliminate the duplicate white set from the tract table and use the segment's white set instead. This adds an extra lookup in some cases in _mps_fix2, so evaluate the performance.
Fixed by branch/2016-03-30/tract-white-elim [4].

3. Eliminate the tract utility pointer from MFS by storing the extents on a ring.
Fixed by 2018-07-03/mfs-tractp [5].

4. Eliminate the use of tracts for the arena's ring of spare pages by storing the spare memory in a land.

5. Improve the performance of MVFF so that it is competitive with MV and so suitable for use as the arena's control pool.
Fixed by branch/2018-07-04/mvff-perf [6].

6. Use MVFF as the arena's control pool.
Fixed by branch/2016-03-01/mvff-control [7].

7. Deprecate and remove the MV pool class.
Fixed by branch/2018-08-01/rm-mv [8].

8. Eliminate the tract's pool utility pointer.
Fixed by branch/2016-03-30/tract-p-elim [9].

9. Create a new module that handles tract/page lookup *only*, separating out the allocation purpose of the current tract table.

10. Swap this in for tract lookup.

11. Evaluate performance.

12. Rip out old tract table.
How foundinspection
Evidence[1] https://info.ravenbrook.com/mail/2014/05/15/19-19-13/0/
[2] https://info.ravenbrook.com/infosys/cgi/perfbrowse.cgi?@describe+184783
[3] https://info.ravenbrook.com/infosys/cgi/perfbrowse.cgi?@describe+186564
[4] https://info.ravenbrook.com/infosys/cgi/perfbrowse.cgi?@describe+194638
[5] https://info.ravenbrook.com/infosys/cgi/perfbrowse.cgi?@describe+194414
[6] https://info.ravenbrook.com/infosys/cgi/perfbrowse.cgi?@describe+194439
[7] https://info.ravenbrook.com/infosys/cgi/perfbrowse.cgi?@describe+194442
[8] https://info.ravenbrook.com/infosys/cgi/perfbrowse.cgi?@describe+194869
[9] https://info.ravenbrook.com/infosys/cgi/perfbrowse.cgi?@describe+194716
Created byGareth Rees
Created on2014-05-15 19:48:51
Last modified byGareth Rees
Last modified on2020-08-30 17:12:20
History2014-05-15 GDR Created.

Fixes

Change Effect Date User Description
194869 open 2018-08-02 14:43:29 Gareth Rees Merge branch/2018-08-01/rm-mv into the master sources.
194716 open 2018-07-23 11:31:47 Gareth Rees Merge branch/2016-03-30/tract-p-elim into the master sources.
194638 open 2018-07-13 13:09:26 Gareth Rees Merge branch/2016-03-30/tract-white-elim into the master sources.
194442 open 2018-07-05 13:37:01 Gareth Rees Merge branch/2016-03-01/mvff-control into the master sources.
194439 open 2018-07-05 12:54:16 Gareth Rees Merge branch/2018-07-04/mvff-perf into the master sources.
194414 open 2018-07-04 17:13:53 Gareth Rees Merge branch/2018-07-03/mfs-tractp into the master sources.
186564 open 2014-06-13 14:31:31 Gareth Rees Merge branch/2014-05-17/chunk-tree into the master sources.
184783 open 2014-03-13 15:28:06 Richard Brooksby Merging branch/2014-01-17/cbs-tract-alloc into master.