From: David Hildenbrand <david@redhat.com>
To: ran xiaokai <ranxiaokai627@163.com>,
akpm@linux-foundation.org, willy@infradead.org
Cc: vbabka@suse.cz, svetly.todorov@memverge.com,
ran.xiaokai@zte.com.cn, baohua@kernel.org, ryan.roberts@arm.com,
peterx@redhat.com, ziy@nvidia.com, linux-kernel@vger.kernel.org,
linux-mm@kvack.org, linux-fsdevel@vger.kernel.org
Subject: Re: [PATCH 2/2] kpageflags: fix wrong KPF_THP on non-pmd-mappable compound pages
Date: Thu, 27 Jun 2024 15:54:17 +0200 [thread overview]
Message-ID: <1fddf73d-577f-4b4c-996a-818dd99eb489@redhat.com> (raw)
In-Reply-To: <20240626024924.1155558-3-ranxiaokai627@163.com>
On 26.06.24 04:49, ran xiaokai wrote:
> From: Ran Xiaokai <ran.xiaokai@zte.com.cn>
>
> KPF_COMPOUND_HEAD and KPF_COMPOUND_TAIL are set on "common" compound
> pages, which means of any order, but KPF_THP should only be set
> when the folio is a 2M pmd mappable THP. Since commit 19eaf44954df
"should only be set" -- who says that? :)
The documentation only talks about "Contiguous pages which construct
transparent hugepages". Sure, when it was added there were only PMD ones.
> ("mm: thp: support allocation of anonymous multi-size THP"),
> multiple orders of folios can be allocated and mapped to userspace,
> so the folio_test_large() check is not sufficient here,
> replace it with folio_test_pmd_mappable() to fix this.
>
A couple of points:
1) If I am not daydreaming, ever since we supported non-PMD THP in the
pagecache (much longer than anon mTHP), we already indicate KPF_THP
for them here. So this is not anon specific? Or am I getting the
PG_lru check all wrong?
2) Anon THP are disabled as default. If some custom tool cannot deal
with that "extension" we did with smaller THP, it shall be updated if
it really has to special-case PMD-mapped THP, before enabled by the
admin.
I think this interface does exactly what we want, as it is right now.
Unless there is *good* reason, we should keep it like that.
So I suggest
a) Extend the documentation to just state "THP of any size and any
mapping granularity" or sth like that.
b) Maybe using folio_test_large_rmappable() instead of "(k & (1 <<
PG_lru)) || is_anon", so even isolated-from-LRU THPs are indicated
properly.
c) Whoever is interested in getting the folio size, use this flag along
with a scan for the KPF_COMPOUND_HEAD.
I'll note that, scanning documentation, PAGE_IS_HUGE currently only
applies to PMD *mapped* THP. It doesn't consider PTE-mapped THP at all
(including PMD-ones). Likely, documentation should be updated to state
"PMD-mapped THP or any hugetlb page".
> Also kpageflags is not only for userspace memory but for all valid pfn
> pages,including slab pages or drivers used pages, so the PG_lru and
> is_anon check are unnecessary here.
I'm completely confused about that statements. We do have KPF_OFFLINE,
KPF_PGTABLE, KPF_SLAB, ... I'm missing something important.
>
> Signed-off-by: Ran Xiaokai <ran.xiaokai@zte.com.cn>
> ---
> fs/proc/page.c | 14 ++++----------
> 1 file changed, 4 insertions(+), 10 deletions(-)
>
> diff --git a/fs/proc/page.c b/fs/proc/page.c
> index 2fb64bdb64eb..3e7b70449c2f 100644
> --- a/fs/proc/page.c
> +++ b/fs/proc/page.c
> @@ -146,19 +146,13 @@ u64 stable_page_flags(const struct page *page)
> u |= kpf_copy_bit(k, KPF_COMPOUND_HEAD, PG_head);
> else
> u |= 1 << KPF_COMPOUND_TAIL;
> +
> if (folio_test_hugetlb(folio))
> u |= 1 << KPF_HUGE;
> - /*
> - * We need to check PageLRU/PageAnon
> - * to make sure a given page is a thp, not a non-huge compound page.
> - */
> - else if (folio_test_large(folio)) {
> - if ((k & (1 << PG_lru)) || is_anon)
> - u |= 1 << KPF_THP;
> - else if (is_huge_zero_folio(folio)) {
> + else if (folio_test_pmd_mappable(folio)) {
folio_test_pmd_mappable() would not be future safe. It includes anything
>= PMD_ORDER as well.
--
Cheers,
David / dhildenb
next prev parent reply other threads:[~2024-06-27 13:54 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-26 2:49 [PATCH 0/2] kpageflags: fix wrong KPF_THP on non-pmd-mappable compound pages ran xiaokai
2024-06-26 2:49 ` [PATCH 1/2] mm: Constify folio_order()/folio_test_pmd_mappable() ran xiaokai
2024-06-26 3:09 ` Zi Yan
2024-06-26 4:30 ` ran xiaokai
2024-06-26 11:19 ` Zi Yan
2024-06-26 2:49 ` [PATCH 2/2] kpageflags: fix wrong KPF_THP on non-pmd-mappable compound pages ran xiaokai
2024-06-26 3:06 ` Zi Yan
2024-06-26 4:32 ` ran xiaokai
2024-06-26 11:07 ` Ryan Roberts
2024-06-26 14:40 ` Zi Yan
2024-06-26 14:42 ` Ryan Roberts
2024-06-27 1:54 ` Lance Yang
2024-06-27 4:10 ` Barry Song
2024-06-27 8:39 ` Ryan Roberts
2024-06-27 9:16 ` Barry Song
2024-06-27 9:27 ` Ryan Roberts
2024-06-27 12:46 ` ran xiaokai
2024-06-26 15:15 ` Matthew Wilcox
2024-06-26 15:18 ` Ryan Roberts
2024-06-27 2:07 ` Lance Yang
2024-06-26 15:55 ` kernel test robot
2024-06-26 16:21 ` kernel test robot
2024-06-27 13:54 ` David Hildenbrand [this message]
2024-06-28 3:01 ` ran xiaokai
2024-07-03 9:20 ` ran xiaokai
2024-07-03 10:11 ` David Hildenbrand
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1fddf73d-577f-4b4c-996a-818dd99eb489@redhat.com \
--to=david@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=baohua@kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=peterx@redhat.com \
--cc=ran.xiaokai@zte.com.cn \
--cc=ranxiaokai627@163.com \
--cc=ryan.roberts@arm.com \
--cc=svetly.todorov@memverge.com \
--cc=vbabka@suse.cz \
--cc=willy@infradead.org \
--cc=ziy@nvidia.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).