On Tue, Feb 21, 2023 at 2:58 PM Matthew Wilcox <willy@xxxxxxxxxxxxx> wrote: > > On Wed, Feb 22, 2023 at 02:08:28AM +0800, Gao Xiang wrote: > > On 2023/1/27 00:40, Matthew Wilcox wrote: > > > I'd like to do another session on how the struct page dismemberment > > > is going and what remains to be done. Given how widely struct page is > > > used, I think there will be interest from more than just MM, so I'd > > > suggest a plenary session. > > > > I'm interested in this topic too, also I'd like to get some idea of the > > future of the page dismemberment timeline so that I can have time to keep > > the pace with it since some embedded use cases like Android are > > memory-sensitive all the time. > > As you all know, I'm absolutely amazing at project management & planning > and can tell you to the day when a feature will be ready ;-) > > 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. Something like this might work: 1. On a 64-bit system flags field contains 19 unused bits, we could potentially use the free bits in this field. 2. There are up-to 64K memcg ids. So in case this field contains memcg pointer 16-bit id would be enough to convert to memcg pointer 3. In case memcg_data contains a pointer to a list of memcgs, there could be a separate hash table data structure that contains pointers to memcgs for slabs, or other users. However, I am not sure how that would affect the performance, but it would be very nice to reduce "struct page" by 8-bytes. Pasha