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.