Martin Bligh wrote:
Another bug is that if try_to_free_pages / balance_pgdat are called
with a gfp_mask specifying GFP_IO and/or GFP_FS, they may reclaim
the requisite number of pages, and reset prev_priority to DEF_PRIORITY.
However, another reclaimer without those gfp_mask flags set may still
be struggling to reclaim pages. The easy fix for this is to key the
distress calculation not off zone->prev_priority, but also take into
account the local caller's priority by using:
min(zone->prev_priority, sc->priority)
Does it really matter who is doing the actual reclaiming? IMO, if the
non-crippled (GFP_IO|GFP_FS) reclaimer is making progress, the other
guy doesn't need to start swapping, and should soon notice that some
pages are getting freed up.
Workloads where non GFP_IO or GFP_FS reclaimers are having a lot of
trouble indicates that either it is very swappy or page writeback has
broken down and lots of dirty pages are being reclaimed off the LRU.
In either case, they are likely to continue to have problems, even if
they are now able to unmap the odd page.
What are the empirical effects of this patch? What's the numbers? And
what have you done to akpm? ;)