Re: The future of PageAnonExclusive

Matthew Wilcox
2024-12-11T15:45:42Z

On Wed, Dec 11, 2024 at 03:49:12PM +0100, David Hildenbrand wrote:
> On 11.12.24 15:25, Ryan Roberts wrote:
> > On 11/12/2024 11:56, David Hildenbrand wrote:
> > > Now CCing the correct Willy :)
> > >
> > > On 11.12.24 12:55, David Hildenbrand wrote:
> > > > Hi,
> > > >
> > > > PageAnonExclusive (PAE) is working very reliable at this point. But
> > > > especially in the context of THPs (large folios) we'd like to do better:
> > > >
> > > > (1) For PTE-mapped THP, we have to maintain it per page. We'd like to
> > > >       avoid per-page flags as good as possible (e.g., waste in "struct
> > > >       page",  touching many cachelines).
> >
> > Presumably also important for the Glorious Future where struct page is just a
> > pointer and struct folio (et al) is allocated dynamically?
>
> I think Willy mentioned that there might be ways to encode it in the 8-byte
> for the "tail" pages.

Yes. For anon memory, the page->memdesc has a 4-bit 'type' and the
remaining 60 bits is a pointer to a struct folio (allocated from a slab
with 16 byte alignment). The current list of types [1] has file folios
as type 2 and anon folios as type 3. We could allocate a type to be
'anon exclusive', thus essentially giving us an anon-exclusive bit.

[1] https://kernelnewbies.org/MatthewWilcox/Memdescs

Don't get too excited about "we're almost out of types". The "managed"
type has subtypes. We could also collapse "file" and "anon" into a
single type and distinguish between them with a bit in the folio.

Anyway, yes, we can do one per-page flag. Two per-page flags starts to
get dicey.