From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ie0-f181.google.com (mail-ie0-f181.google.com [209.85.223.181]) by kanga.kvack.org (Postfix) with ESMTP id 8B8166B00D0 for ; Mon, 9 Jun 2014 20:08:44 -0400 (EDT) Received: by mail-ie0-f181.google.com with SMTP id y20so2893027ier.12 for ; Mon, 09 Jun 2014 17:08:44 -0700 (PDT) Received: from mail-ie0-x22f.google.com (mail-ie0-x22f.google.com [2607:f8b0:4001:c03::22f]) by mx.google.com with ESMTPS id 4si4535221igt.25.2014.06.09.17.08.43 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Mon, 09 Jun 2014 17:08:43 -0700 (PDT) Received: by mail-ie0-f175.google.com with SMTP id tp5so4880718ieb.34 for ; Mon, 09 Jun 2014 17:08:43 -0700 (PDT) Date: Mon, 9 Jun 2014 17:08:40 -0700 (PDT) From: David Rientjes Subject: Re: [PATCH 06/10] mm, compaction: skip buddy pages by their order in the migrate scanner In-Reply-To: <1402305982-6928-6-git-send-email-vbabka@suse.cz> Message-ID: References: <1402305982-6928-1-git-send-email-vbabka@suse.cz> <1402305982-6928-6-git-send-email-vbabka@suse.cz> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: owner-linux-mm@kvack.org List-ID: To: Vlastimil Babka Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, Andrew Morton , Greg Thelen , Minchan Kim , Mel Gorman , Joonsoo Kim , Michal Nazarewicz , Naoya Horiguchi , Christoph Lameter , Rik van Riel On Mon, 9 Jun 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. > > Preliminary results with stress-highalloc from mmtests show a 10% reduction in > number of pages scanned by migration scanner. This change is also important to > later allow detecting when a cc->order block of pages cannot be compacted, and > the scanner should skip to the next block instead of wasting time. > > Signed-off-by: Vlastimil Babka > Cc: Minchan Kim > Cc: Mel Gorman > Cc: Joonsoo Kim > Cc: Michal Nazarewicz > Cc: Naoya Horiguchi > Cc: Christoph Lameter > Cc: Rik van Riel > Cc: David Rientjes > --- > V2: fix low_pfn > end_pfn check; comments > kept page_order_unsafe() approach for now > Please see http://marc.info/?l=linux-mm&m=140235272808846, I'd love to be proved wrong. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org