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 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id AEE35C3DA49 for ; Fri, 2 Aug 2024 08:39:17 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0CCFC6B007B; Fri, 2 Aug 2024 04:39:17 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 056496B0083; Fri, 2 Aug 2024 04:39:17 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E39776B0085; Fri, 2 Aug 2024 04:39:16 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id C22346B007B for ; Fri, 2 Aug 2024 04:39:16 -0400 (EDT) Received: from smtpin16.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 6A5FB12113B for ; Fri, 2 Aug 2024 08:39:16 +0000 (UTC) X-FDA: 82406655912.16.569241A Received: from szxga08-in.huawei.com (szxga08-in.huawei.com [45.249.212.255]) by imf25.hostedemail.com (Postfix) with ESMTP id F1E21A0016 for ; Fri, 2 Aug 2024 08:39:12 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=none; spf=pass (imf25.hostedemail.com: domain of wangkefeng.wang@huawei.com designates 45.249.212.255 as permitted sender) smtp.mailfrom=wangkefeng.wang@huawei.com; dmarc=pass (policy=quarantine) header.from=huawei.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1722587896; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=PJQxTtIUR36yPz48CzD4Y3WT3bA0uVRO7iUEyolCAx4=; b=L7kdreF9jGezdTYQV+2p0WqrVlaAlfTpdO4y0c2uKINflQQX+jqCqQL4/o3XzZvIkrDpue 8hKMlLFlOpaHkJgZdannH7xIeQb2Nrf17O4YAiAG9oNj+HtZK+Lwm06wzh6Ha86a24bfj2 gQGVFsaLM2/MFKv36rfPWfEpJMyNcfs= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1722587896; a=rsa-sha256; cv=none; b=nsS6Q47Sdt5/kIHh2wv6Flx1fupd7++6VZDRawebuQ6C41mWFRemDGQP/ezA5QdycKKC64 ehCFkFJiYO517OBzyXiw6qrOAy74rLxv3XTknVCGapptFgmC33CXVTO+k1nhP3x6MaOfVW VoeqQFVHUuCJpBUo34j5VRya0P3o3AE= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=none; spf=pass (imf25.hostedemail.com: domain of wangkefeng.wang@huawei.com designates 45.249.212.255 as permitted sender) smtp.mailfrom=wangkefeng.wang@huawei.com; dmarc=pass (policy=quarantine) header.from=huawei.com Received: from mail.maildlp.com (unknown [172.19.163.48]) by szxga08-in.huawei.com (SkyGuard) with ESMTP id 4WZzl10dPVz1L997; Fri, 2 Aug 2024 16:38:53 +0800 (CST) Received: from dggpemf100008.china.huawei.com (unknown [7.185.36.138]) by mail.maildlp.com (Postfix) with ESMTPS id E201618005F; Fri, 2 Aug 2024 16:39:06 +0800 (CST) Received: from [10.174.177.243] (10.174.177.243) by dggpemf100008.china.huawei.com (7.185.36.138) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.11; Fri, 2 Aug 2024 16:39:06 +0800 Message-ID: Date: Fri, 2 Aug 2024 16:39:05 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 4/4] mm: memory_hotplug: unify Huge/LRU/non-LRU movable folio isolation Content-Language: en-US To: David Hildenbrand , Andrew Morton CC: Oscar Salvador , Miaohe Lin , Naoya Horiguchi , References: <20240725011647.1306045-1-wangkefeng.wang@huawei.com> <20240725011647.1306045-5-wangkefeng.wang@huawei.com> <8d5cb85d-dd8c-4073-9bba-14f5c03aa49d@redhat.com> From: Kefeng Wang In-Reply-To: <8d5cb85d-dd8c-4073-9bba-14f5c03aa49d@redhat.com> Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 8bit X-Originating-IP: [10.174.177.243] X-ClientProxiedBy: dggems703-chm.china.huawei.com (10.3.19.180) To dggpemf100008.china.huawei.com (7.185.36.138) X-Stat-Signature: 4swtzzzfcnwadh1oqd7nmozbdki7jqq9 X-Rspamd-Queue-Id: F1E21A0016 X-Rspam-User: X-Rspamd-Server: rspam08 X-HE-Tag: 1722587952-22185 X-HE-Meta: U2FsdGVkX18tvJVJD1mkJBrh0jyPobshws7TrpC7CJQ0EGnd8csLlRhQg7CNXgaqX1Zyd/zjExQmFd/voSpDzzNfreG7QzkT2IMNw+9HTnP4vu5G5M4sGsBZ351lYR/nGP/GpF0qwtvRWjLUMkTpyUjUelbr6oZMK1k43cwVxuzTmlx75NctTPKS+jMPdyNcJtqia1h7t4dyHN4bKFcxl9ThYv9ZacWj+P4V72ynpcUsVsTwUXyQ7UJEWfoivfnYG8YdCtp+sKUE6JbR1GGbx76jzTnmE1YCGILS+URSipsAW1qATbKtmkA4QyFvWaKbejgObL5j52PEtPM2WJwF1yv7qBUoqBBUhVWsNGRA+Hwq9vQksVrcqXoTgcItiT6wTgX5xpFa5I0Ehd4sBew0Q78GhqteH4V3NxXCCJq9oK5T0IBnzJMdGvxsuHd5kIJDQOPl9x1dmINDFl6p7hroYK0/wszKMmetYFkVyWiuXxTuZ23eQH6g9px5VFAmcup1jukciiX6xRsppKjUDQN1mymWX1y/xmUBg16j8IBffbDaHqLq35orIjDJC0uXli8/XylMw4iaC1nPQn//3pdbu2PMYjOGMrISDyETwM/5nRj0oAZOMCtiqW9E8rWhW0nPuNsgf357jDMvBqHl2rjB1zrqMifOwKo7xGL05eL3h2leGd2DtFE0IHPEwvEf2xTIHRrT0kryyBickXt+4mFQFnDLzWgZNA6GNfS5UXEIT1c4zttONV+i19ZLoTDCzTvvCria0UwSeMDQ+JtVO9M7FG4PHeOHnrEvA3mCO4rruX5cj85uCuGw/ogFGiz8X+uN8zgU3Y3EowKixhJnoVBoCeEhDHE5GDbNjOgBBvQSVewyVZ+KaWj22nGExUn13ZjIFIuB9ea9twsOPXnvxytUDHZxgce2E64DWK1cL80wYLfm1JmjMoaIGy6CnwHU2/YrKiS/gpwFf2s0rLXAJ7y fzJbDNzL Wu33kBcwYzxsQoFxV0Hfe3BDpX8NtwbBrX7u1K418nU4PLFgqy9fgfQSCK2G5eWEp0Ryg8IanuYW3mSnBLYiemdokXkbFlPPNWmif5eOZemK8/z8Irzp94Dgbir0mBP8jrWGkRLmhZjoJf1sUiDdXPCuUZPtY0XRs3CQXGKkSINpESxGsTr1Zf06I7Br4actPAm26+1B4qdCOjzqmxonMWjnuV6MAYqV6c9mCAubPoSs2wIENU+f9Di3Sff0jjqsJL2Dm2mCHIXrIEhu88CDIYy8Mb5a+Zl3BXEnofw0lCVPKKWUXAPwnuMLKUAXJb6OQDRa6Aczlz3E60mc= 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: List-Subscribe: List-Unsubscribe: On 2024/8/2 4:23, David Hildenbrand wrote: > On 25.07.24 03:16, Kefeng Wang wrote: >> Move isolate_hugetlb() after grab a reference, and use the >> isolate_folio_to_list() to unify hugetlb/LRU/non-LRU folio >> isolation, which cleanup code a bit and save a few calls to >> compound_head(). >> >> Signed-off-by: Kefeng Wang >> --- >>   mm/memory_hotplug.c | 48 +++++++++++++++------------------------------ >>   1 file changed, 16 insertions(+), 32 deletions(-) >> >> diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c >> index ccaf4c480aed..057037766efa 100644 >> --- a/mm/memory_hotplug.c >> +++ b/mm/memory_hotplug.c >> @@ -1773,20 +1773,17 @@ static int scan_movable_pages(unsigned long >> start, unsigned long end, >>   static void do_migrate_range(unsigned long start_pfn, unsigned long >> end_pfn) >>   { >>       unsigned long pfn; >> -    struct page *page, *head; >>       LIST_HEAD(source); >> +    struct folio *folio; >>       static DEFINE_RATELIMIT_STATE(migrate_rs, >> DEFAULT_RATELIMIT_INTERVAL, >>                         DEFAULT_RATELIMIT_BURST); >>       for (pfn = start_pfn; pfn < end_pfn; pfn++) { >> -        struct folio *folio; >> -        bool isolated; >> +        struct page *page; >>           if (!pfn_valid(pfn)) >>               continue; >>           page = pfn_to_page(pfn); >> -        folio = page_folio(page); >> -        head = &folio->page; >>           /* >>            * HWPoison pages have elevated reference counts so the >> migration would >> @@ -1808,36 +1805,22 @@ static void do_migrate_range(unsigned long >> start_pfn, unsigned long end_pfn) >>               continue; >>           } >> -        if (PageHuge(page)) { >> -            pfn = page_to_pfn(head) + compound_nr(head) - 1; >> -            isolate_hugetlb(folio, &source); >> +        folio = folio_get_nontail_page(page); >> +        if (!folio) >>               continue; > > There is one interesting case: 1 GiB hugetlb folios can span multiple > memory blocks (e.g., 128 MiB). Offlining individual blocks must work. > > If you do the folio_get_nontail_page() we'd not be able to offline a > memory block in the middle anymore, because we'd never try even > isolating it. Indeed, will test this case. > > So likely we have to try getting the head page of a large folio instead > (as a fallback if this fails?) and continue from there. > > In case of an free hugetlb tail page we would now iterate each > individual page instead of simply jumping forward like the old code > would have done. I think we want to maintain that behavior as well? Yes, only can occur when the first hugetlb page if start_pfn is not head page, will reconsider of this part > >> -        } else if (PageTransHuge(page)) >> -            pfn = page_to_pfn(head) + thp_nr_pages(page) - 1; >> - >> -        if (!get_page_unless_zero(page)) >> -            continue; >> -        /* >> -         * We can skip free pages. And we can deal with pages on >> -         * LRU and non-lru movable pages. >> -         */ >> -        if (PageLRU(page)) >> -            isolated = isolate_lru_page(page); >> -        else >> -            isolated = isolate_movable_page(page, ISOLATE_UNEVICTABLE); >> -        if (isolated) { >> -            list_add_tail(&page->lru, &source); >> -            if (!__PageMovable(page)) >> -                inc_node_page_state(page, NR_ISOLATED_ANON + >> -                            page_is_file_lru(page)); >> -        } else { >> +        /* Skip free folios, deal with hugetlb, LRU and non-lru >> movable folios. */ > > Can you clarify what "skip free folios" means? For free folios the > folio_get_nontail_page() shouldn't have succeeded. Did you mean if the > folio got freed in the meantime? I think we could drop the comments here, the original comment is added by commit 0c0e61958965 ("memory unplug: page offline"), and there is no increase the reference to page, but with commit 700c2a46e882 ("mem- hotplug: call isolate_lru_page with elevated refcount"), the comment could be dropped since the folio can't be freed here. > >> +        if (!isolate_folio_to_list(folio, &source)) { >>               if (__ratelimit(&migrate_rs)) { >>                   pr_warn("failed to isolate pfn %lx\n", pfn); >>                   dump_page(page, "isolation failed"); >>               } >>           } > >