Title | Tract tables are inflexible |
Status | open |
Priority | optional |
Assigned user | Gareth Rees |
Organization | Ravenbrook |
Description | A 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). |
Analysis | Tracts 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 found | inspection |
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 by | Gareth Rees |
Created on | 2014-05-15 19:48:51 |
Last modified by | Gareth Rees |
Last modified on | 2020-08-30 17:12:20 |
History | 2014-05-15 GDR Created. |
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. |