From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.3 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6AC03C433B4 for ; Wed, 14 Apr 2021 17:21:46 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id D2A9361179 for ; Wed, 14 Apr 2021 17:21:45 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D2A9361179 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=suse.cz Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 4E5076B006C; Wed, 14 Apr 2021 13:21:45 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 495756B0070; Wed, 14 Apr 2021 13:21:45 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 337E46B0071; Wed, 14 Apr 2021 13:21:45 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 199FB6B006C for ; Wed, 14 Apr 2021 13:21:45 -0400 (EDT) Received: from smtpin11.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay03.hostedemail.com (Postfix) with ESMTP id C6E408249980 for ; Wed, 14 Apr 2021 17:21:44 +0000 (UTC) X-FDA: 78031639728.11.96AB4A8 Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by imf23.hostedemail.com (Postfix) with ESMTP id 937C1A000391 for ; Wed, 14 Apr 2021 17:21:42 +0000 (UTC) X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.221.27]) by mx2.suse.de (Postfix) with ESMTP id F35C0B007; Wed, 14 Apr 2021 17:21:42 +0000 (UTC) Subject: Re: [PATCH 07/11] mm/page_alloc: Remove duplicate checks if migratetype should be isolated To: Mel Gorman , Linux-MM , Linux-RT-Users Cc: LKML , Chuck Lever , Jesper Dangaard Brouer , Thomas Gleixner , Peter Zijlstra , Ingo Molnar , Michal Hocko References: <20210414133931.4555-1-mgorman@techsingularity.net> <20210414133931.4555-8-mgorman@techsingularity.net> From: Vlastimil Babka Message-ID: Date: Wed, 14 Apr 2021 19:21:42 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.9.0 MIME-Version: 1.0 In-Reply-To: <20210414133931.4555-8-mgorman@techsingularity.net> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-Rspamd-Queue-Id: 937C1A000391 X-Stat-Signature: 81o8c1wrytn3ksgomes8zxfxd4jbqb73 X-Rspamd-Server: rspam02 Received-SPF: none (suse.cz>: No applicable sender policy available) receiver=imf23; identity=mailfrom; envelope-from=""; helo=mx2.suse.de; client-ip=195.135.220.15 X-HE-DKIM-Result: none/none X-HE-Tag: 1618420902-506571 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On 4/14/21 3:39 PM, Mel Gorman wrote: > Both free_pcppages_bulk() and free_one_page() have very similar > checks about whether a page's migratetype has changed under the > zone lock. Use a common helper. > > Signed-off-by: Mel Gorman Seems like for free_pcppages_bulk() this patch makes it check for each page on the pcplist - zone->nr_isolate_pageblock != 0 instead of local bool (the performance might be the same I guess on modern cpu though) - is_migrate_isolate(migratetype) for a migratetype obtained by get_pcppage_migratetype() which cannot be migrate_isolate so the check is useless. As such it doesn't seem a worthwhile cleanup to me considering all the other microoptimisations? > --- > mm/page_alloc.c | 32 ++++++++++++++++++++++---------- > 1 file changed, 22 insertions(+), 10 deletions(-) > > diff --git a/mm/page_alloc.c b/mm/page_alloc.c > index 295624fe293b..1ed370668e7f 100644 > --- a/mm/page_alloc.c > +++ b/mm/page_alloc.c > @@ -1354,6 +1354,23 @@ static inline void prefetch_buddy(struct page *page) > prefetch(buddy); > } > > +/* > + * The migratetype of a page may have changed due to isolation so check. > + * Assumes the caller holds the zone->lock to serialise against page > + * isolation. > + */ > +static inline int > +check_migratetype_isolated(struct zone *zone, struct page *page, unsigned long pfn, int migratetype) > +{ > + /* If isolating, check if the migratetype has changed */ > + if (unlikely(has_isolate_pageblock(zone) || > + is_migrate_isolate(migratetype))) { > + migratetype = get_pfnblock_migratetype(page, pfn); > + } > + > + return migratetype; > +} > + > /* > * Frees a number of pages from the PCP lists > * Assumes all pages on list are in same zone, and of same order. > @@ -1371,7 +1388,6 @@ static void free_pcppages_bulk(struct zone *zone, int count, > int migratetype = 0; > int batch_free = 0; > int prefetch_nr = READ_ONCE(pcp->batch); > - bool isolated_pageblocks; > struct page *page, *tmp; > LIST_HEAD(head); > > @@ -1433,21 +1449,20 @@ static void free_pcppages_bulk(struct zone *zone, int count, > * both PREEMPT_RT and non-PREEMPT_RT configurations. > */ > spin_lock(&zone->lock); > - isolated_pageblocks = has_isolate_pageblock(zone); > > /* > * Use safe version since after __free_one_page(), > * page->lru.next will not point to original list. > */ > list_for_each_entry_safe(page, tmp, &head, lru) { > + unsigned long pfn = page_to_pfn(page); > int mt = get_pcppage_migratetype(page); > + > /* MIGRATE_ISOLATE page should not go to pcplists */ > VM_BUG_ON_PAGE(is_migrate_isolate(mt), page); > - /* Pageblock could have been isolated meanwhile */ > - if (unlikely(isolated_pageblocks)) > - mt = get_pageblock_migratetype(page); > > - __free_one_page(page, page_to_pfn(page), zone, 0, mt, FPI_NONE); > + mt = check_migratetype_isolated(zone, page, pfn, mt); > + __free_one_page(page, pfn, zone, 0, mt, FPI_NONE); > trace_mm_page_pcpu_drain(page, 0, mt); > } > spin_unlock(&zone->lock); > @@ -1459,10 +1474,7 @@ static void free_one_page(struct zone *zone, > int migratetype, fpi_t fpi_flags) > { > spin_lock(&zone->lock); > - if (unlikely(has_isolate_pageblock(zone) || > - is_migrate_isolate(migratetype))) { > - migratetype = get_pfnblock_migratetype(page, pfn); > - } > + migratetype = check_migratetype_isolated(zone, page, pfn, migratetype); > __free_one_page(page, pfn, zone, order, migratetype, fpi_flags); > spin_unlock(&zone->lock); > } >