On Mon, May 30, 2022 at 03:49:17PM +0800, Muchun Song wrote: > We will reuse the obj_cgroup APIs to charge the LRU pages. Finally, > page->memcg_data will have 2 different meanings. > > - For the slab pages, page->memcg_data points to an object cgroups > vector. > > - For the kmem pages (exclude the slab pages) and the LRU pages, > page->memcg_data points to an object cgroup. > > In this patch, we reuse obj_cgroup APIs to charge LRU pages. In the end, > The page cache cannot prevent long-living objects from pinning the original > memory cgroup in the memory. > > At the same time we also changed the rules of page and objcg or memcg > binding stability. The new rules are as follows. > > For a page any of the following ensures page and objcg binding stability: > > - the page lock > - LRU isolation > - lock_page_memcg() > - exclusive reference > > Based on the stable binding of page and objcg, for a page any of the > following ensures page and memcg binding stability: > > - objcg_lock > - cgroup_mutex > - the lruvec lock > - the split queue lock (only THP page) > > If the caller only want to ensure that the page counters of memcg are > updated correctly, ensure that the binding stability of page and objcg > is sufficient. > > Signed-off-by: Muchun Song <songmuchun@xxxxxxxxxxxxx> Aside from two questions, which I raised in the comments to previous patches in the series: 1) perf impact, 2) should we open-code the reparenting procedure to show the locking in a more explicit ways? Acked-by: Roman Gushchin <roman.gushchin@xxxxxxxxx> Thanks!