linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/4] cgroup: nmi safe css_rstat_updated
@ 2025-06-11 22:15 Shakeel Butt
  2025-06-11 22:15 ` [PATCH v2 1/4] cgroup: support to enable nmi-safe css_rstat_updated Shakeel Butt
                   ` (5 more replies)
  0 siblings, 6 replies; 11+ messages in thread
From: Shakeel Butt @ 2025-06-11 22:15 UTC (permalink / raw)
  To: Tejun Heo, Andrew Morton
  Cc: JP Kobryn, Johannes Weiner, Michal Hocko, Roman Gushchin,
	Muchun Song, Vlastimil Babka, Alexei Starovoitov,
	Sebastian Andrzej Siewior, Michal Koutný, Harry Yoo,
	Yosry Ahmed, bpf, linux-mm, cgroups, linux-kernel,
	Meta kernel team

BPF programs can run in nmi context and may trigger memcg charged memory
allocation in such context. Recently linux added support to nmi safe
page allocation along with memcg charging of such allocations. However
the kmalloc/slab support and corresponding memcg charging is still
lacking,

To provide nmi safe support for memcg charging for kmalloc/slab
allocations, we need nmi safe memcg stats because for kernel memory
charging and stats happen together. At the moment, memcg charging and
memcg stats are nmi safe and the only thing which is not nmi safe is
adding the cgroup to the per-cpu rstat update tree. i.e.
css_rstat_updated() which this series is doing.

This series made css_rstat_updated by using per-cpu lockless lists whose
node in embedded in individual struct cgroup_subsys_state and the
per-cpu head is placed in struct cgroup_subsys. For rstat users without
cgroup_subsys, a global per-cpu lockless list head is created. The main
challenge to use lockless in this scenario was the potential multiple
inserters from the stacked context i.e. process, softirq, hardirq & nmi,
potentially using the same per-cpu lockless node of a given
cgroup_subsys_state. The normal lockless list does not protect against
such scenario.

The multiple stacked inserters using potentially same lockless node was
resolved by making one of them succeed on reset the lockless node and the
winner gets to insert the lockless node in the corresponding lockless
list. The losers can assume the lockless list insertion will eventually
succeed and continue their operation.

Changelog since v2:
- Add more clear explanation in cover letter and in the comment as
  suggested by Andrew, Michal & Tejun.
- Use this_cpu_cmpxchg() instead of try_cmpxchg() as suggested by Tejun.
- Remove the per-cpu ss locks as they are not needed anymore.

Changelog since v1:
- Based on Yosry's suggestion always use llist on the update side and
  create the update tree on flush side

[v1] https://lore.kernel.org/cgroups/20250429061211.1295443-1-shakeel.butt@linux.dev/
 


Shakeel Butt (4):
  cgroup: support to enable nmi-safe css_rstat_updated
  cgroup: make css_rstat_updated nmi safe
  cgroup: remove per-cpu per-subsystem locks
  memcg: cgroup: call css_rstat_updated irrespective of in_nmi()

 include/linux/cgroup-defs.h   |  11 +--
 include/trace/events/cgroup.h |  47 ----------
 kernel/cgroup/rstat.c         | 169 +++++++++++++---------------------
 mm/memcontrol.c               |  10 +-
 4 files changed, 74 insertions(+), 163 deletions(-)

-- 
2.47.1



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

end of thread, other threads:[~2025-06-17 19:39 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-06-11 22:15 [PATCH v2 0/4] cgroup: nmi safe css_rstat_updated Shakeel Butt
2025-06-11 22:15 ` [PATCH v2 1/4] cgroup: support to enable nmi-safe css_rstat_updated Shakeel Butt
2025-06-11 22:15 ` [PATCH v2 2/4] cgroup: make css_rstat_updated nmi safe Shakeel Butt
2025-06-11 22:15 ` [PATCH v2 3/4] cgroup: remove per-cpu per-subsystem locks Shakeel Butt
2025-06-11 22:15 ` [PATCH v2 4/4] memcg: cgroup: call css_rstat_updated irrespective of in_nmi() Shakeel Butt
2025-06-16 18:15 ` [PATCH v2 0/4] cgroup: nmi safe css_rstat_updated Tejun Heo
2025-06-16 19:20   ` Shakeel Butt
2025-06-17 19:06     ` Tejun Heo
2025-06-17 19:38       ` Shakeel Butt
2025-06-16 20:08 ` JP Kobryn
2025-06-16 20:13   ` Shakeel Butt

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).