linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [LSF/MM/BPF Topic] Performance improvement for Memory Cgroups
@ 2025-03-19  6:19 Shakeel Butt
  2025-03-19  8:49 ` [Lsf-pc] " Christian Brauner
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Shakeel Butt @ 2025-03-19  6:19 UTC (permalink / raw)
  To: linux-mm, lsf-pc
  Cc: Johannes Weiner, Michal Hocko, Roman Gushchin, Muchun Song,
	Vlastimil Babka, Yosry Ahmed, Meta kernel team

A bit late but let me still propose a session on topics related to memory
cgroups. Last year at LSFMM 2024, we discussed [1] about the potential
deprecation of memcg v1. Since then we have made very good progress in that
regard. We have moved the v1-only code in a separate file and make it not
compile by default, have added warnings in many v1-only interfaces and have
removed a lot of v1-only code. This year, I want to focus on performance of
memory cgroup, particularly improving cost of charging and stats.

At the high level we can partition the memory charging in three cases. First
is the user memory (anon & file), second if kernel memory (slub mostly) and
third is network memory. For network memory, [1] has described some of the
challenges. Similarly for kernel memory, we had to revert patches where memcg
charging was too expensive [3,4].

I want to discuss and brainstorm different ways to further optimize the
memcg charging for all these types of memory. I am at the moment prototying
multi-memcg support for per-cpu memcg stocks and would like to see what else
we can do.

One additional interesting observation from our fleet is that the cost of 
memory charging increases for the users of memory.low and memory.min. Basically
propagate_protected_usage() becomes very prominently visible in the perf
traces.

Other than charging, the memcg stats infra also is very expensive and a lot
of CPUs in our fleet are spent on maintaining these stats. Memcg stats use
rstat infrastructure which is designed for fast updates and slow readers.
The updaters put the cgroup in a per-cpu update tree while the stats readers
flushes update trees of all the cpus. For memcg, the flushes has become very
expensive and over the years we have added ratelimiting to limit the cost.
I want to discuss what else we can do to further improve the memcg stats.

Other than the performance of charging and memcg stats, time permitting, we
can discuss other memcg topics like new features or something still lacking.

[1] https://lwn.net/Articles/974575/
[2] https://lore.kernel.org/all/20250307055936.3988572-1-shakeel.butt@linux.dev/
[3] 3754707bcc3e ("Revert "memcg: enable accounting for file lock caches"")
[4] 0bcfe68b8767 ("Revert "memcg: enable accounting for pollfd and select bits arrays"")


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2025-03-31 18:03 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-03-19  6:19 [LSF/MM/BPF Topic] Performance improvement for Memory Cgroups Shakeel Butt
2025-03-19  8:49 ` [Lsf-pc] " Christian Brauner
2025-03-20  5:02 ` Balbir Singh
2025-03-21 17:57   ` Shakeel Butt
2025-03-20  6:22 ` Harry Yoo
2025-03-31 18:02   ` Vlastimil Babka

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox