| 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. |