Messages in this thread | | | Date | Mon, 28 Jul 2014 18:05:34 -0700 (PDT) | From | David Rientjes <> | Subject | Re: [PATCH v5 11/14] mm, compaction: skip buddy pages by their order in the migrate scanner |
| |
On Mon, 28 Jul 2014, Vlastimil Babka wrote:
> The migration scanner skips PageBuddy pages, but does not consider their order > as checking page_order() is generally unsafe without holding the zone->lock, > and acquiring the lock just for the check wouldn't be a good tradeoff. > > Still, this could avoid some iterations over the rest of the buddy page, and > if we are careful, the race window between PageBuddy() check and page_order() > is small, and the worst thing that can happen is that we skip too much and miss > some isolation candidates. This is not that bad, as compaction can already fail > for many other reasons like parallel allocations, and those have much larger > race window. > > This patch therefore makes the migration scanner obtain the buddy page order > and use it to skip the whole buddy page, if the order appears to be in the > valid range. > > It's important that the page_order() is read only once, so that the value used > in the checks and in the pfn calculation is the same. But in theory the > compiler can replace the local variable by multiple inlines of page_order(). > Therefore, the patch introduces page_order_unsafe() that uses ACCESS_ONCE to > prevent this. > > Testing with stress-highalloc from mmtests shows a 15% reduction in number of > pages scanned by migration scanner. The reduction is >60% with __GFP_NO_KSWAPD > allocations, along with success rates better by few percent. > This change is also a prerequisite for a later patch which is detecting when > a cc->order block of pages contains non-buddy pages that cannot be isolated, > and the scanner should thus skip to the next block immediately. > > Signed-off-by: Vlastimil Babka <vbabka@suse.cz> > Reviewed-by: Zhang Yanfei <zhangyanfei@cn.fujitsu.com> > Acked-by: Minchan Kim <minchan@kernel.org> > Acked-by: Mel Gorman <mgorman@suse.de> > Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com> > Cc: Michal Nazarewicz <mina86@mina86.com> > Cc: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com> > Cc: Christoph Lameter <cl@linux.com> > Cc: Rik van Riel <riel@redhat.com> > Cc: David Rientjes <rientjes@google.com>
Acked-by: David Rientjes <rientjes@google.com>
Seems I'm overruled in the definition of page_order_unsafe(). Owell, you have more than one caller so I guess it makes sense.
| |