From: David Hildenbrand <[email protected]>
To: Matthew Wilcox <[email protected]>
Cc: Andrew Morton <[email protected]>,
Jens Axboe <[email protected]>,
[email protected], [email protected]
Subject: Re: [PATCH 7/9] mm: Add deferred_list page flag
Date: Wed, 16 Aug 2023 11:55:12 +0200 [thread overview]
Message-ID: <[email protected]> (raw)
In-Reply-To: <[email protected]>
On 15.08.23 21:58, Matthew Wilcox wrote:
> On Tue, Aug 15, 2023 at 07:27:26PM +0200, David Hildenbrand wrote:
>> On 15.08.23 19:06, Matthew Wilcox wrote:
>>> Theree are a lot of counters called THP and TransHuge and other variants
>>> which are exposed to userspace, and the (user) assumption is that this counts
>>> PMD-sized folios. If you grep around for folio_test_pmd_mappable(),
>>> you'll find them. If we have folio_test_thp(), people will write:
>>>
>>> if (folio_test_thp(folio))
>>> __mod_lruvec_state(lruvec, NR_SHMEM_THPS, nr);
>>>
>>> instead of using folio_test_pmd_mappable().
>>
>> So if we *really* don't want to use THP to express that we have a page, then
>> let's see what these pages are:
>> * can be mapped to user space
>> * are transparent to most MM-related systemcalls by (un) mapping
>> them in system page size (PTEs)
>
> * Are managed on the LRU
> * Can be dirtied, written back
Right, but at least hugetlb *could* be extended to do that as well (and
even implement swapping). I think the biggest difference is the
transparency/PTE-mapping/unmapping/ ....
>
>> That we can split these pages (not PTE-map, but convert from large folio to
>> small folios) is one characteristic, but IMHO not the main one (and maybe
>> not even required at all!).
>
> It's the one which distinguishes them from, say, compound pages used for
> slab. Or used by device drivers. Or net pagepool, or vmalloc. There's
> a lot of compound allocations out there, and the only ones which need
> special treatment here are the ones which are splittable.
And my point is that that is an implementation detail I'm afraid.
Instead of splitting the folio into order-0 folios, you could also
migrate off all data to order-0 folios and just free the large folio.
Because splitting only succeeds if there are no other references on the
folio, just like migration.
But let's not get distracted :)
>
>> Maybe we can come up with a better term for "THP, but not necessarily
>> PMD-sized".
>>
>> "Large folio" is IMHO bad. A hugetlb page is a large folio and not all large
>> folios can be mapped to user space.
>>
>> "Transparent large folios" ? Better IMHO.
>
> I think this goes back to Johannes' point many months ago that we need
> separate names for some things. He wants to split anon & file memory
> apart (who gets to keep the name "folio" in the divorce? what do we
> name the type that encompasses both folios and the other one? or do
> they both get different names?)
Good question. I remember discussing a type hierarchy back when you
upstreamed folios.
Maybe we would have "file folios" and "anon folios.
>
>>> Perhaps the key difference between normal compound pages and file/anon
>>> compound pages is that the latter are splittable? So we can name all
>>> of this:
>>>
>>> folio_init_splittable()
>>> folio_test_splittable()
>>> folio_fini_splittable()
>>>
>>> Maybe that's still too close to an implementation detail, but it's at
>>> least talking about _a_ characteristic of the folio, even if it's not
>>> the _only_ characteristic of the folio.
>>
>> Maybe folio_init_transparent() ... avoiding the "huge" part of it.
>>
>> Very open for alternatives. As expressed in other context, we really should
>> figure this out soon.
>
> Yeah, I'm open to better naming too. At this point in the flow we're
> trying to distinguish between compound pages used for slab and compound
> pages used for anon/file, but that's not always going to be the case
> elsewhere.
Yes. Let me reply to your other mail.
--
Cheers,
David / dhildenb
next prev parent reply other threads:[~2023-08-16 9:56 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-15 3:26 [PATCH 0/9] Remove _folio_dtor and _folio_order Matthew Wilcox (Oracle)
2023-08-15 3:26 ` [PATCH 1/9] io_uring: Stop calling free_compound_page() Matthew Wilcox (Oracle)
2023-08-15 7:33 ` David Hildenbrand
2023-08-15 15:00 ` Jens Axboe
2023-08-15 15:36 ` Matthew Wilcox
2023-08-15 3:26 ` [PATCH 2/9] mm: Call the hugetlb destructor directly Matthew Wilcox (Oracle)
2023-08-15 7:36 ` David Hildenbrand
2023-08-15 3:26 ` [PATCH 3/9] mm: Call free_transhuge_folio() directly from destroy_large_folio() Matthew Wilcox (Oracle)
2023-08-15 6:13 ` kernel test robot
2023-08-15 7:40 ` David Hildenbrand
2023-08-15 14:06 ` Matthew Wilcox
2023-08-15 8:09 ` kernel test robot
2023-08-15 3:26 ` [PATCH 4/9] mm: Make free_compound_page() static Matthew Wilcox (Oracle)
2023-08-15 7:47 ` David Hildenbrand
2023-08-15 7:48 ` David Hildenbrand
2023-08-15 3:26 ` [PATCH 5/9] mm: Remove free_compound_page() Matthew Wilcox (Oracle)
2023-08-15 7:48 ` David Hildenbrand
2023-08-15 3:26 ` [PATCH 6/9] mm: Remove HUGETLB_PAGE_DTOR Matthew Wilcox (Oracle)
2023-08-15 7:50 ` David Hildenbrand
2023-08-15 3:26 ` [PATCH 7/9] mm: Add deferred_list page flag Matthew Wilcox (Oracle)
2023-08-15 7:54 ` David Hildenbrand
2023-08-15 15:32 ` Matthew Wilcox
2023-08-15 16:40 ` David Hildenbrand
2023-08-15 17:06 ` Matthew Wilcox
2023-08-15 17:27 ` David Hildenbrand
2023-08-15 19:58 ` Matthew Wilcox
2023-08-16 3:14 ` Matthew Wilcox
2023-08-16 10:12 ` David Hildenbrand
2023-08-16 12:05 ` Matthew Wilcox
2023-08-16 12:34 ` David Hildenbrand
2023-08-16 9:55 ` David Hildenbrand [this message]
2023-08-15 3:26 ` [PATCH 8/9] mm: Rearrange page flags Matthew Wilcox (Oracle)
2023-08-15 4:30 ` Yosry Ahmed
2023-08-15 19:24 ` Peter Xu
2023-08-15 20:07 ` Matthew Wilcox
2023-08-15 22:31 ` Yosry Ahmed
2023-08-15 23:01 ` Matthew Wilcox
2023-08-15 23:33 ` Yosry Ahmed
2023-08-15 3:26 ` [PATCH 9/9] mm: Free up a word in the first tail page Matthew Wilcox (Oracle)
2023-08-15 7:59 ` David Hildenbrand
2023-08-15 11:39 ` Matthew Wilcox
2023-08-15 19:21 ` Peter Xu
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 \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
/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