bpf.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 0/8] memcg: avoid flushing stats atomically where possible
@ 2023-03-30 19:17 Yosry Ahmed
  2023-03-30 19:17 ` [PATCH v3 1/8] cgroup: rename cgroup_rstat_flush_"irqsafe" to "atomic" Yosry Ahmed
                   ` (7 more replies)
  0 siblings, 8 replies; 20+ messages in thread
From: Yosry Ahmed @ 2023-03-30 19:17 UTC (permalink / raw)
  To: Tejun Heo, Josef Bacik, Jens Axboe, Zefan Li, Johannes Weiner,
	Michal Hocko, Roman Gushchin, Shakeel Butt, Muchun Song,
	Andrew Morton, Michal Koutný
  Cc: Vasily Averin, cgroups, linux-block, linux-kernel, linux-mm, bpf,
	Yosry Ahmed

rstat flushing is an expensive operation that scales with the number of
cpus and the number of cgroups in the system. The purpose of this series
is to minimize the contexts where we flush stats atomically.

Patches 1 and 2 are cleanups requested during reviews of prior versions
of this series.

Patch 3 makes sure we never try to flush from within an irq context.

Patches 4 to 7 introduce separate variants of mem_cgroup_flush_stats()
for atomic and non-atomic flushing, and make sure we only flush the
stats atomically when necessary.

Patch 8 is a slightly tangential optimization that limits the work done
by rstat flushing in some scenarios.

v2 -> v3:
- Collected more Acks (thanks everyone!).
- Dropped controversial patch 4 from v2.
- Improved commit logs and cover letter (Michal).
v2: https://lore.kernel.org/linux-mm/20230328221644.803272-1-yosryahmed@google.com/

v1 -> v2:
- Added more context in patch 4's commit log.
- Added atomic_read() before atomic_xchg() in patch 5 to avoid
  needlessly locking the cache line (Shakeel).
- Refactored patch 6: added a common helper, do_flush_stats(), for
  mem_cgroup_flush_stats{_atomic}() (Johannes).
- Renamed mem_cgroup_flush_stats_ratelimited() to
  mem_cgroup_flush_stats_atomic_ratelimited() in patch 6. It is restored
  in patch 7, but this maintains consistency (Johannes).
- Added line break to keep the lock section visually separated in patch
  7 (Johannes).
v1: https://lore.kernel.org/lkml/20230328061638.203420-1-yosryahmed@google.com/

RFC -> v1:
- Dropped patch 1 that attempted to make the global rstat lock a non-irq
  lock, will follow up on that separetly (Shakeel).
- Dropped stats_flush_lock entirely, replaced by an atomic (Johannes).
- Renamed cgroup_rstat_flush_irqsafe() to cgroup_rstat_flush_atomic()
  instead of removing it (Johannes).
- Added a patch to rename mem_cgroup_flush_stats_delayed() to
  mem_cgroup_flush_stats_ratelimited() (Johannes).
- Separate APIs for flushing memcg stats in atomic and non-atomic
  contexts instead of a boolean argument (Johannes).
- Added patches 3 & 4 to make sure we never flush from irq context
  (Shakeel & Johannes).
RFC: https://lore.kernel.org/lkml/20230323040037.2389095-1-yosryahmed@google.com/

Yosry Ahmed (8):
  cgroup: rename cgroup_rstat_flush_"irqsafe" to "atomic"
  memcg: rename mem_cgroup_flush_stats_"delayed" to "ratelimited"
  memcg: do not flush stats in irq context
  memcg: replace stats_flush_lock with an atomic
  memcg: sleep during flushing stats in safe contexts
  workingset: memcg: sleep when flushing stats in workingset_refault()
  vmscan: memcg: sleep when flushing stats during reclaim
  memcg: do not modify rstat tree for zero updates

 include/linux/cgroup.h     |  2 +-
 include/linux/memcontrol.h |  9 ++++-
 kernel/cgroup/rstat.c      |  4 +-
 mm/memcontrol.c            | 78 ++++++++++++++++++++++++++++++--------
 mm/workingset.c            |  5 ++-
 5 files changed, 76 insertions(+), 22 deletions(-)

-- 
2.40.0.348.gf938b09366-goog


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

end of thread, other threads:[~2023-04-05  8:04 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-03-30 19:17 [PATCH v3 0/8] memcg: avoid flushing stats atomically where possible Yosry Ahmed
2023-03-30 19:17 ` [PATCH v3 1/8] cgroup: rename cgroup_rstat_flush_"irqsafe" to "atomic" Yosry Ahmed
2023-03-30 19:17 ` [PATCH v3 2/8] memcg: rename mem_cgroup_flush_stats_"delayed" to "ratelimited" Yosry Ahmed
2023-03-30 19:17 ` [PATCH v3 3/8] memcg: do not flush stats in irq context Yosry Ahmed
2023-03-30 19:17 ` [PATCH v3 4/8] memcg: replace stats_flush_lock with an atomic Yosry Ahmed
2023-04-04 16:52   ` Michal Koutný
2023-04-04 17:13     ` Shakeel Butt
2023-04-04 17:21       ` Shakeel Butt
2023-04-04 17:32         ` Michal Koutný
2023-03-30 19:17 ` [PATCH v3 5/8] memcg: sleep during flushing stats in safe contexts Yosry Ahmed
2023-03-30 19:30   ` Johannes Weiner
2023-04-04 15:09   ` Johannes Weiner
2023-03-30 19:17 ` [PATCH v3 6/8] workingset: memcg: sleep when flushing stats in workingset_refault() Yosry Ahmed
2023-04-04 16:53   ` Michal Koutný
2023-04-04 18:09     ` Yosry Ahmed
2023-04-05  8:00       ` Michal Koutný
2023-04-05  8:02         ` Yosry Ahmed
2023-03-30 19:18 ` [PATCH v3 7/8] vmscan: memcg: sleep when flushing stats during reclaim Yosry Ahmed
2023-03-30 19:18 ` [PATCH v3 8/8] memcg: do not modify rstat tree for zero updates Yosry Ahmed
2023-04-04 16:53   ` Michal Koutný

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).