ageing corner case Jonathan S. Shapiro (shap@eros.cis.upenn.edu)
Sat, 11 Jul 1998 06:34:19 -0400

I am beginning to worry about a corner case of object ageing. I have a tentative solution, but I would appreciate some advice.

The odd corner case goes as follows:

  1. Node space (equivalently, page space) manages to become nearly full in a single generation.
  2. Ager is called, and manages to kill all of the objects in node space, leaving a node space in which the age of all objects is identical.
  3. Ager is now called and must make several pages ageing these objects until the first hits the "dead" generation.
  4. Note that this bad situation is meta-stable unless ageing is performed on a timed basis. Even if performed on a timed basis, the effect remains in quantized form.

I do not, in general, know of a solution to this problem. My main concern is that as the in-core object cache grows large, making N passes (N the number of generations before kickout) becomes expensive.

I am therefore contemplating the following change:

Rather than consider all nodes (pages), the ager will divide node space (page space) into windows of W objects. When asked to perform ageing, it will consider only the next W objects in node space (page space). It will therefore consider at most (N-1)*W objects before kicking something out. Once an object has been selected for termination (sic), the ager will advance the window by W objects.

In effect, I am proposing a poor-man's binning strategy.

Does anyone know of a reason to shun this solution?

shap