On Thu, Apr 13, 2023 at 4:16 AM David Hildenbrand <david@xxxxxxxxxx> wrote: > > On 13.04.23 12:40, Yosry Ahmed wrote: > > We keep track of different types of reclaimed pages through > > reclaim_state->reclaimed_slab, and we add them to the reported number > > of reclaimed pages. For non-memcg reclaim, this makes sense. For memcg > > reclaim, we have no clue if those pages are charged to the memcg under > > reclaim. > > > > Slab pages are shared by different memcgs, so a freed slab page may have > > only been partially charged to the memcg under reclaim. The same goes for > > clean file pages from pruned inodes (on highmem systems) or xfs buffer > > pages, there is no simple way to currently link them to the memcg under > > reclaim. > > > > Stop reporting those freed pages as reclaimed pages during memcg reclaim. > > This should make the return value of writing to memory.reclaim, and may > > help reduce unnecessary reclaim retries during memcg charging. Writing to > > memory.reclaim on the root memcg is considered as cgroup_reclaim(), but > > for this case we want to include any freed pages, so use the > > global_reclaim() check instead of !cgroup_reclaim(). > > > > Generally, this should make the return value of > > try_to_free_mem_cgroup_pages() more accurate. In some limited cases (e.g. > > freed a slab page that was mostly charged to the memcg under reclaim), > > the return value of try_to_free_mem_cgroup_pages() can be underestimated, > > but this should be fine. The freed pages will be uncharged anyway, and we > > can charge the memcg the next time around as we usually do memcg reclaim > > in a retry loop. > > > > Fixes: f2fe7b09a52b ("mm: memcg/slab: charge individual slab objects > > instead of pages") > > > > Signed-off-by: Yosry Ahmed <yosryahmed@xxxxxxxxxx> > > --- > > LGTM, hopefully the underestimation won't result in a real issue. > > Acked-by: David Hildenbrand <david@xxxxxxxxxx> Thanks! > > -- > Thanks, > > David / dhildenb >