One consequence of the current cleaning model (see
section , on page
), is that the cleaner is not invoked until the
kernel has actually run out of space for caching. Until the cleaner has
finished freeing space, the kernel disables caching. This behaviour
puts pressure on the cleaner to react quickly--while it is running
we are effectively operating with a most-recently-used replacement
policy, which we know is suboptimal for most work patterns.
One way to relieve this situation is to have the kernel set both a ``soft'' and a ``hard'' limit on the cache size. When the soft limit is reached, the cleaner is invoked, but caching is not disabled. In general, the cleaning should complete before we reach the hard limit, at which point the kernel will (for self-defense) stop caching, as it does now. This scheme would relieve the time-pressure on the cleaner and allow it to provide more sophisticated policy decisions, and at the same time reduce (if not eliminate) the time the system spends with caching disabled. Although we have not implemented this extension, it is straightforward to do so.