On Wed, Mar 01, 2023 at 10:50:24PM -0500, Pasha Tatashin wrote: > On Tue, Feb 21, 2023 at 2:58 PM Matthew Wilcox <willy@xxxxxxxxxxxxx> wrote: > > My goal for 2023 is to get to a point where we (a) have struct page > > reduced to: > > > > struct page { > > unsigned long flags; > > struct list_head lru; > > struct address_space *mapping; > > pgoff_t index; > > unsigned long private; > > atomic_t _mapcount; > > atomic_t _refcount; > > unsigned long memcg_data; > > #ifdef LAST_CPUPID_NOT_IN_PAGE_FLAGS > > int _last_cpupid; > > #endif > > }; > > This looks clean, but it is still 64-bytes. I wonder if we could > potentially reduce it down to 56 bytes by removing memcg_data. We need struct page to be 16-byte aligned to make slab work. We also need it to divide PAGE_SIZE evenly to make CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP work. I don't think it's worth nibbling around the edges like this anyway; convert everything from page to folio and then we can do the big bang conversion where struct page shrinks from 64 bytes to 8.