Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754824AbbFPMRD (ORCPT ); Tue, 16 Jun 2015 08:17:03 -0400 Received: from cantor2.suse.de ([195.135.220.15]:41171 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752860AbbFPMQz (ORCPT ); Tue, 16 Jun 2015 08:16:55 -0400 Message-ID: <558013B5.4050204@suse.cz> Date: Tue, 16 Jun 2015 14:16:53 +0200 From: Vlastimil Babka User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.4.0 MIME-Version: 1.0 To: Joonsoo Kim CC: Andrew Morton , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Minchan Kim , Mel Gorman , Michal Nazarewicz , Naoya Horiguchi , Christoph Lameter , Rik van Riel , David Rientjes Subject: Re: [PATCH 4/6] mm, compaction: always skip compound pages by order in migrate scanner References: <1433928754-966-1-git-send-email-vbabka@suse.cz> <1433928754-966-5-git-send-email-vbabka@suse.cz> <20150616054436.GD12641@js1304-P5Q-DELUXE> In-Reply-To: <20150616054436.GD12641@js1304-P5Q-DELUXE> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3000 Lines: 81 On 06/16/2015 07:44 AM, Joonsoo Kim wrote: > On Wed, Jun 10, 2015 at 11:32:32AM +0200, Vlastimil Babka wrote: [...] >> @@ -723,39 +725,35 @@ isolate_migratepages_block(struct compact_control *cc, unsigned long low_pfn, >> * It's possible to migrate LRU pages and balloon pages >> * Skip any other type of page >> */ >> - if (!PageLRU(page)) { >> + is_lru = PageLRU(page); >> + if (!is_lru) { >> if (unlikely(balloon_page_movable(page))) { >> if (balloon_page_isolate(page)) { >> /* Successfully isolated */ >> goto isolate_success; >> } >> } >> - continue; >> } >> >> /* >> - * PageLRU is set. lru_lock normally excludes isolation >> - * splitting and collapsing (collapsing has already happened >> - * if PageLRU is set) but the lock is not necessarily taken >> - * here and it is wasteful to take it just to check transhuge. >> - * Check PageCompound without lock and skip the whole pageblock >> - * if it's a transhuge page, as calling compound_order() >> - * without preventing THP from splitting the page underneath us >> - * may return surprising results. >> - * If we happen to check a THP tail page, compound_order() >> - * returns 0. It should be rare enough to not bother with >> - * using compound_head() in that case. >> + * Regardless of being on LRU, compound pages such as THP and >> + * hugetlbfs are not to be compacted. We can potentially save >> + * a lot of iterations if we skip them at once. The check is >> + * racy, but we can consider only valid values and the only >> + * danger is skipping too much. >> */ >> if (PageCompound(page)) { >> - int nr; >> - if (locked) >> - nr = 1 << compound_order(page); >> - else >> - nr = pageblock_nr_pages; >> - low_pfn += nr - 1; >> + unsigned int comp_order = compound_order(page); >> + >> + if (comp_order > 0 && comp_order < MAX_ORDER) >> + low_pfn += (1UL << comp_order) - 1; >> + >> continue; >> } > > How about moving this PageCompound() check up to the PageLRU check? > Is there any relationship between balloon page and PageCompound()? I didn't want to assume if there's a relationship or not, as per the changelog: >> After this patch, all pages are tested for PageCompound() and we skip them by >> compound_order(). The test is done after the test for balloon_page_movable() >> as we don't want to assume if balloon pages (or other pages with own isolation >> and migration implementation if a generic API gets implemented) are compound >> or not. > It will remove is_lru and code would be more understandable. Right, it just felt safer and more future-proof this way. > Otherwise, > > Acked-by: Joonsoo Kim > > Thanks. > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/