MPS issue job003992

TitleMAX_SIZE means different things to MV and MVT pools
Assigned userRichard Brooksby
DescriptionThe MV pool takes a MAX_SIZE keyword argument that is documented as "the predicted maximum size of blocks that will be allocated from the pool". This is incorrect. It is used by MVInit as an estimate of the *total* maximum size that the pool will reach, in order to preallocate sufficient span descriptors for the pool extents. In fact, MV asserts that it is *larger* than the extent size.
The MVT pool takes a MAX_SIZE that is effectively used as the extent size (fillSize), and allocations larger than this are treated as "oversize".
AnalysisThe lines that assert in MV are from the original checkin. This is very old code.
The documentation error is very understandable, given that MIN_SIZE, AVG_SIZE, and MAX_SIZE appear to be a set. That's probably what they should mean, and we can introduce another key for total pool size estimates if needed.
Both these pools are probably for the chop.
In the meantime, I suggest dropping MAX_SIZE from MV. It has very little effect, since it's unlikely that anyone will ever need to preallocate more than a page-worth of span descriptors.
We lack coverage tests of the manual pools.
How foundunknown
EvidenceSubstituting MV for MVT in mv2test.c.
Introduced in1.100.0
Created byRichard Brooksby
Created on2016-03-21 13:21:38
Last modified byGareth Rees
Last modified on2018-09-19 12:57:47
History2016-03-21 RB Created.


Change Effect Date User Description
194869 closed 2018-08-02 14:43:29 Gareth Rees Merge branch/2018-08-01/rm-mv into the master sources.