I've noticed that the page cleaner daemon, which is supposed to map
delayed allocations to disk when necessary (out of memory), walks
sequentially through whole memory searching for "delayed allocated" pages.
I think there is a problem here -- the page cleaner should take page aging
information into account.
While the VM maybe trying to sync relatively old pages which are in the
inactive_dirty list, the page cleaner is mapping relatively new "delayed
allocated" pages to disk.
The right thing, IMHO, is to make the page cleaner look at the inactive
dirty list when we are under a low memory condition.
This way it will map "older" dirty pages, making it possible for
page_launder() to sync them to disk and potentially free them later.