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=-9.5 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 3D48CC4742C for ; Sat, 14 Nov 2020 01:09:06 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 96B7F22254 for ; Sat, 14 Nov 2020 01:09:05 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 96B7F22254 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=nvidia.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 009D26B005D; Fri, 13 Nov 2020 20:09:05 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id EFCCC6B006C; Fri, 13 Nov 2020 20:09:04 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id DC4506B006E; Fri, 13 Nov 2020 20:09:04 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0181.hostedemail.com [216.40.44.181]) by kanga.kvack.org (Postfix) with ESMTP id AB1526B005D for ; Fri, 13 Nov 2020 20:09:04 -0500 (EST) Received: from smtpin25.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay05.hostedemail.com (Postfix) with ESMTP id 54043181AEF09 for ; Sat, 14 Nov 2020 01:09:04 +0000 (UTC) X-FDA: 77481239808.25.cough24_3a0c00627313 Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin25.hostedemail.com (Postfix) with ESMTP id 3484F1804E3A0 for ; Sat, 14 Nov 2020 01:09:04 +0000 (UTC) X-HE-Tag: cough24_3a0c00627313 X-Filterd-Recvd-Size: 8033 Received: from wforward1-smtp.messagingengine.com (wforward1-smtp.messagingengine.com [64.147.123.30]) by imf22.hostedemail.com (Postfix) with ESMTP for ; Sat, 14 Nov 2020 01:09:03 +0000 (UTC) Received: from compute2.internal (compute2.nyi.internal [10.202.2.42]) by mailforward.west.internal (Postfix) with ESMTP id 9FFC9F86; Fri, 13 Nov 2020 20:09:01 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute2.internal (MEProxy); Fri, 13 Nov 2020 20:09:02 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :date:from:in-reply-to:message-id:mime-version:references :subject:to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender :x-sasl-enc; s=fm1; bh=Y41m9SOkbuzfVtRo7ChuSg0M++MjP3b9rJdYUbpZ5 io=; b=XaO6EhDEQ17kwxCAxwC28phYHP604Mixwe9wVGjehb9izYOzk4uYXJmAB xBXOrrSmesjiAyxPHfUwX57z0LqCbmEAUNsqzu9plp74yopAKEX+6a432LmIzJzW AqaBRuKEtzTPmPetN4kiC0agKfafCu2dyiOPxsWvLKiLDf8JOAWlcLgPvFRuqkXL Uj3f0foQevb+801JfKiKvFDqTrhndqPx8pTCck7Iac6BVcLSqS0u6geJKQLZNpTl ekf99sP017VfoaRMAmeSpqct/FXY625/svr5krw/7LuBV2SkEEsRuq3KnbO4nPOx rc06zA757Q6iavnFfAflw5OM2bLEQ== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedujedruddviedgfedtucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffoffkjghfgggtgfesthekmhdtredtjeenucfhrhhomhepfdgkihcu jggrnhdfuceoiihihiesnhhvihguihgrrdgtohhmqeenucggtffrrghtthgvrhhnpeeigf eutdegjefgleejheeugeffheegfffggedthfeifeegjeegkeffiefgueethfenucffohhm rghinhepkhgvrhhnvghlrdhorhhgnecukfhppeejhedrieejrdelrddutdefnecuvehluh hsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepiihihiesnhhvihgu ihgrrdgtohhm X-ME-Proxy: Received: from [10.2.162.52] (c-75-67-9-103.hsd1.ma.comcast.net [75.67.9.103]) by mail.messagingengine.com (Postfix) with ESMTPA id B354E328005E; Fri, 13 Nov 2020 20:08:59 -0500 (EST) From: "Zi Yan" To: "Roman Gushchin" , "Matthew Wilcox" Cc: linux-mm@kvack.org, "Kirill A . Shutemov" , "Andrew Morton" , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, "Yang Shi" , "Michal Hocko" , "John Hubbard" , "Ralph Campbell" , "David Nellans" Subject: Re: [RFC PATCH 3/6] mm: page_owner: add support for splitting to any order in split page_owner. Date: Fri, 13 Nov 2020 20:08:58 -0500 X-Mailer: MailMate (1.13.2r5673) Message-ID: In-Reply-To: <20201114001505.GA3047204@carbon.dhcp.thefacebook.com> References: <20201111204008.21332-1-zi.yan@sent.com> <20201111204008.21332-4-zi.yan@sent.com> <20201114001505.GA3047204@carbon.dhcp.thefacebook.com> MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: quoted-printable 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 13 Nov 2020, at 19:15, Roman Gushchin wrote: > On Wed, Nov 11, 2020 at 03:40:05PM -0500, Zi Yan wrote: >> From: Zi Yan >> >> It adds a new_order parameter to set new page order in page owner. >> It prepares for upcoming changes to support split huge page to any=20 >> lower >> order. >> >> Signed-off-by: Zi Yan >> --- >> include/linux/page_owner.h | 7 ++++--- >> mm/huge_memory.c | 2 +- >> mm/page_alloc.c | 2 +- >> mm/page_owner.c | 6 +++--- >> 4 files changed, 9 insertions(+), 8 deletions(-) >> >> diff --git a/include/linux/page_owner.h b/include/linux/page_owner.h >> index 3468794f83d2..215cbb159568 100644 >> --- a/include/linux/page_owner.h >> +++ b/include/linux/page_owner.h >> @@ -31,10 +31,11 @@ static inline void set_page_owner(struct page=20 >> *page, >> __set_page_owner(page, order, gfp_mask); >> } >> >> -static inline void split_page_owner(struct page *page, unsigned int=20 >> nr) >> +static inline void split_page_owner(struct page *page, unsigned int=20 >> nr, >> + unsigned int new_order) >> { >> if (static_branch_unlikely(&page_owner_inited)) >> - __split_page_owner(page, nr); >> + __split_page_owner(page, nr, new_order); >> } >> static inline void copy_page_owner(struct page *oldpage, struct page=20 >> *newpage) >> { >> @@ -60,7 +61,7 @@ static inline void set_page_owner(struct page=20 >> *page, >> { >> } >> static inline void split_page_owner(struct page *page, >> - unsigned int order) >> + unsigned int nr, unsigned int new_order) > > With the addition of the new argument it's a bit hard to understand > what the function is supposed to do. It seems like nr =3D=3D=20 > page_order(page), > is it right? Maybe we can pass old_order and new_order? Or just the=20 > page > and the new order? Yeah, it is a bit confusing. Please see more below. > >> { >> } >> static inline void copy_page_owner(struct page *oldpage, struct page=20 >> *newpage) >> diff --git a/mm/huge_memory.c b/mm/huge_memory.c >> index f599f5b9bf7f..8b7d771ee962 100644 >> --- a/mm/huge_memory.c >> +++ b/mm/huge_memory.c >> @@ -2459,7 +2459,7 @@ static void __split_huge_page(struct page=20 >> *page, struct list_head *list, >> >> ClearPageCompound(head); >> >> - split_page_owner(head, nr); >> + split_page_owner(head, nr, 1); >> >> /* See comment in __split_huge_page_tail() */ >> if (PageAnon(head)) { >> diff --git a/mm/page_alloc.c b/mm/page_alloc.c >> index d77220615fd5..a9eead0e091a 100644 >> --- a/mm/page_alloc.c >> +++ b/mm/page_alloc.c >> @@ -3284,7 +3284,7 @@ void split_page(struct page *page, unsigned int=20 >> order) >> >> for (i =3D 1; i < (1 << order); i++) >> set_page_refcounted(page + i); >> - split_page_owner(page, 1 << order); >> + split_page_owner(page, 1 << order, 1); >> } >> EXPORT_SYMBOL_GPL(split_page); >> >> diff --git a/mm/page_owner.c b/mm/page_owner.c >> index b735a8eafcdb..2b7f7e9056dc 100644 >> --- a/mm/page_owner.c >> +++ b/mm/page_owner.c >> @@ -204,7 +204,7 @@ void __set_page_owner_migrate_reason(struct page=20 >> *page, int reason) >> page_owner->last_migrate_reason =3D reason; >> } >> >> -void __split_page_owner(struct page *page, unsigned int nr) >> +void __split_page_owner(struct page *page, unsigned int nr, unsigned=20 >> int new_order) >> { >> int i; >> struct page_ext *page_ext =3D lookup_page_ext(page); >> @@ -213,9 +213,9 @@ void __split_page_owner(struct page *page,=20 >> unsigned int nr) >> if (unlikely(!page_ext)) >> return; >> >> - for (i =3D 0; i < nr; i++) { >> + for (i =3D 0; i < nr; i +=3D (1 << new_order)) { >> page_owner =3D get_page_owner(page_ext); >> - page_owner->order =3D 0; >> + page_owner->order =3D new_order; >> page_ext =3D page_ext_next(page_ext); > > I believe there cannot be any leftovers because nr is always a power=20 > of 2. > Is it true? Converting nr argument to order (if it's possible) will=20 > make it obvious. Right. nr =3D thp_nr_pages(head), which is a power of 2. There would not=20 be any leftover. Matthew recently converted split_page_owner to take nr instead of=20 order.[1] But I am not sure why, since it seems to me that two call sites (__split_huge_page in mm/huge_memory.c and split_page in mm/page_alloc.c) can pass the order=20 information. [1]https://lore.kernel.org/linux-mm/20200908195539.25896-4-willy@infradea= d.org/ =E2=80=94 Best Regards, Yan Zi