Why both gen and gen_no in bdescr?
Block descriptors currently contain both gen
(a generation *
) and gen_no
(a uint16_t
, which is gen->no
cached). I wonder whether it would be worthwhile to drop the former and always use generations[bd->gen_no]
. Afterall, this would save an entire word per descriptor which may improve our caches' coverage of the bdescr region appreciably. Presumably the generations
array would be hot enough to stay in cache in such a scheme, so I would guess that the cost would be small-ish.
Simon, have you measured this in the past?