Found interesting discussion on linux-mm (Sept. 2002):
AKPM and Rik („inactive_dirty list“)
[AKPM proposed separate inactive_dirty and inactive_clean lists to avoid excessive scanning of pages that cannot be reclaimed (due to then-new non-blocking VM scanner]:
Riel: > AKPM: > > - inactive_dirty holds pages which are dirty or under writeback. > > > - everywhere where we add a page to the inactive list will now > > add it to either inactive_clean or inactive_dirty, based on > > its PageDirty || PageWriteback state. > > If I had veto power I'd use it here ;) > > We did this in early 2.4 kernels and it was a disaster. The > reason it was a disaster was that in many workloads we'd > always have some clean pages and we'd end up always reclaiming > those before even starting writeout on any of the dirty pages. > > It also meant we could have dirty (or formerly dirty) inactive > pages eating up memory and never being recycled for more active > data.And later in the same thread:
AKPM: > You're proposing that we get that IO underway sooner if there > is page reclaim pressure, and that one way to do that is to > write one page for every reclaimed one. Guess that makes > sense as much as anything else ;)
(decrease dirty cache balancing rules when hitting memory pressure, so that balance_dirty_pages() and pdflush do write-out in scanner's stead)
And further more:
Daniel Phillips > On Saturday 07 September 2002 01:34, Andrew Morton wrote: > > You're proposing that we get that IO underway sooner if there > > is page reclaim pressure, and that one way to do that is to > > write one page for every reclaimed one. Guess that makes > > sense as much as anything else ;) > > Not really. The correct formula will incorporate the allocation rate > and the inactive dirty/clean balance. The reclaim rate is not > relevant, it is a time-delayed consequence of the above. Relying on > it in a control loop is simply asking for oscillation.