public inbox for cgroups@vger.kernel.org
 help / color / mirror / Atom feed
* [RFC PATCH 0/7] Make rstat flushing IRQ and sleep friendly
@ 2023-03-23  4:00 Yosry Ahmed
       [not found] ` <20230323040037.2389095-1-yosryahmed-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
                   ` (5 more replies)
  0 siblings, 6 replies; 56+ messages in thread
From: Yosry Ahmed @ 2023-03-23  4:00 UTC (permalink / raw)
  To: Tejun Heo, Josef Bacik, Jens Axboe, Zefan Li, Johannes Weiner,
	Michal Hocko, Roman Gushchin, Shakeel Butt, Muchun Song,
	Andrew Morton
  Cc: Vasily Averin, cgroups, linux-block, linux-kernel, linux-mm, bpf,
	Yosry Ahmed

Currently, if rstat flushing is invoked using the irqsafe variant
cgroup_rstat_flush_irqsafe(), we keep interrupts disabled and do not
sleep for the entire flush operation, which is O(# cpus * # cgroups).
This can be rather dangerous.

Not all contexts that use cgroup_rstat_flush_irqsafe() actually cannot
sleep, and among those that cannot sleep, not all contexts require
interrupts to be disabled. This patch series breaks down the
O(# cpus * # cgroups) duration that we disable interrupts for into a
series of O(# cgroups) durations. Disabling interrupts is deferred to
the caller if needed.

Patch 1 mainly addresses this by not requiring interrupts to be
disabled for the global rstat lock to be acquired. As a side effect of
that, the we disable rstat flushing in interrupt context. See patch 1
for more details.

One thing I am not sure about is whether the only caller of
cgroup_rstat_flush_hold() -- cgroup_base_stat_cputime_show(),
currently has any dependency on that call disabling interrupts.

Patch 2 follows suit for stats_flush_lock in the memcg code, allowing it
to be acquired without disabling interrupts.

Patch 3 removes cgroup_rstat_flush_irqsafe() and updates
cgroup_rstat_flush() to be more explicit about sleeping.

Patch 4 changes memcg code paths that invoke rstat flushing to sleep
where possible. The patch changes code paths where it is naturally saef
to sleep: userspace reads and the background periodic flusher.

Patches 5 & 6 allow sleeping while rstat flushing in reclaim context and
refault context. I am not sure if this is okay, especially the latter,
so I placed them in separate patches for ease of revert/drop.

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

Yosry Ahmed (7):
  cgroup: rstat: only disable interrupts for the percpu lock
  memcg: do not disable interrupts when holding stats_flush_lock
  cgroup: rstat: remove cgroup_rstat_flush_irqsafe()
  memcg: sleep during flushing stats in safe contexts
  vmscan: memcg: sleep when flushing stats during reclaim
  workingset: memcg: sleep when flushing stats in workingset_refault()
  memcg: do not modify rstat tree for zero updates

 block/blk-cgroup.c         |  2 +-
 include/linux/cgroup.h     |  3 +--
 include/linux/memcontrol.h |  8 +++---
 kernel/cgroup/cgroup.c     |  4 +--
 kernel/cgroup/rstat.c      | 54 ++++++++++++++++++++------------------
 mm/memcontrol.c            | 52 ++++++++++++++++++++++--------------
 mm/vmscan.c                |  2 +-
 mm/workingset.c            |  4 +--
 8 files changed, 73 insertions(+), 56 deletions(-)

-- 
2.40.0.rc1.284.g88254d51c5-goog


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

end of thread, other threads:[~2023-03-31  1:51 UTC | newest]

Thread overview: 56+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-03-23  4:00 [RFC PATCH 0/7] Make rstat flushing IRQ and sleep friendly Yosry Ahmed
     [not found] ` <20230323040037.2389095-1-yosryahmed-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2023-03-23  4:00   ` [RFC PATCH 1/7] cgroup: rstat: only disable interrupts for the percpu lock Yosry Ahmed
     [not found]     ` <20230323040037.2389095-2-yosryahmed-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2023-03-23  4:29       ` Shakeel Butt
     [not found]         ` <CALvZod7e7dMmkhKtXPAxmXjXQoTyeBf3Bht8HJC8AtWW93As3g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2023-03-23  5:15           ` Yosry Ahmed
     [not found]             ` <CAJD7tkbziGh+6hnMysHkoNr_HGBKU+s1rSGj=gZLki0ALT-jLg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2023-03-23  6:33               ` Shakeel Butt
2023-03-23 13:35                 ` Yosry Ahmed
     [not found]                   ` <CAJD7tkY6Wf2OWja+f-JeFM5DdMCyLzbXxZ8KF0MjcYOKri-vtA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2023-03-23 15:40                     ` Shakeel Butt
2023-03-23 15:42                       ` Yosry Ahmed
2023-03-23 15:46                         ` Shakeel Butt
2023-03-23 16:09                           ` Shakeel Butt
     [not found]                             ` <CALvZod7-6F84POkNetA2XJB-24wms=5q_s495NEthO8b63rL4A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2023-03-23 16:17                               ` Yosry Ahmed
     [not found]                                 ` <CAJD7tkbGCgk9VkGdec0=AdHErds4XQs1LzJMhqVryXdjY5PVAg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2023-03-23 16:29                                   ` Shakeel Butt
     [not found]                                     ` <CALvZod7saq910u4JxnuY4C7EwiK5vgNF=-Bv+236RprUOQdkjw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2023-03-23 16:36                                       ` Yosry Ahmed
     [not found]                                         ` <CAJD7tkb8oHoK5RW96tEXjY9iyJpMXfGAvnFw1rG-5Sr+Mpubdg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2023-03-23 16:45                                           ` Shakeel Butt
     [not found]                                             ` <CALvZod5USCtNtnPuYRbRv_psBCNytQWWQ592TFsJLfrLpyLJmw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2023-03-23 16:51                                               ` Yosry Ahmed
2023-03-23 19:09                                                 ` Shakeel Butt
2023-03-23 17:33                                 ` Johannes Weiner
     [not found]                                   ` <20230323173343.GF739026-druUgvl0LCNAfugRpC6u6w@public.gmane.org>
2023-03-23 18:09                                     ` Yosry Ahmed
2023-03-23 18:19                                       ` Johannes Weiner
2023-03-24  1:39       ` Tejun Heo
2023-03-24  7:22         ` Yosry Ahmed
2023-03-24 14:12           ` Waiman Long
2023-03-24 22:50             ` Yosry Ahmed
     [not found]           ` <CAJD7tkYNZeEytm_Px9_73Y-AYJfHAxaoTmmnO71HW5hd1B5tPg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2023-03-25  1:54             ` Tejun Heo
2023-03-25  2:17               ` Yosry Ahmed
     [not found]                 ` <CAJD7tkYhyMkD8SFf8b8L1W9QUrLOdw-HJ2NUbENjw5dgFnH3Aw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2023-03-25  4:30                   ` Shakeel Butt
2023-03-25  4:37                     ` Yosry Ahmed
2023-03-25  4:46                       ` Shakeel Butt
2023-03-27 23:23                         ` Yosry Ahmed
2023-03-29 18:53                           ` Tejun Heo
2023-03-29 19:22                             ` Hugh Dickins
     [not found]                               ` <f9b6410-ee17-635f-a35d-559fa0191dc3-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2023-03-29 20:00                                 ` Tejun Heo
     [not found]                                   ` <ZCSY8l/jVwszF6iA-NiLfg/pYEd1N0TnZuCh8vA@public.gmane.org>
2023-03-29 20:38                                     ` Hugh Dickins
     [not found]                                       ` <98cb3ce-7ed9-3d17-9015-ef7193d6627-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2023-03-30  4:26                                         ` Yosry Ahmed
2023-03-31  1:51                                         ` Tejun Heo
2023-03-23  4:00   ` [RFC PATCH 6/7] workingset: memcg: sleep when flushing stats in workingset_refault() Yosry Ahmed
2023-03-23 15:50     ` Johannes Weiner
2023-03-23 16:02       ` Yosry Ahmed
2023-03-23 16:00     ` Johannes Weiner
     [not found]       ` <20230323160030.GD739026-druUgvl0LCNAfugRpC6u6w@public.gmane.org>
2023-03-23 16:02         ` Yosry Ahmed
2023-03-23  4:10   ` [RFC PATCH 0/7] Make rstat flushing IRQ and sleep friendly Shakeel Butt
2023-03-23  5:07     ` Yosry Ahmed
2023-03-23  4:00 ` [RFC PATCH 2/7] memcg: do not disable interrupts when holding stats_flush_lock Yosry Ahmed
2023-03-23  4:32   ` Shakeel Butt
     [not found]     ` <CALvZod5MnM8UJ0pj44QYb4sVwgFZ1B2KpSL6oqBQbJU3wH6eNA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2023-03-23  5:16       ` Yosry Ahmed
2023-03-23  4:00 ` [RFC PATCH 3/7] cgroup: rstat: remove cgroup_rstat_flush_irqsafe() Yosry Ahmed
2023-03-23 15:43   ` Johannes Weiner
2023-03-23 15:45     ` Yosry Ahmed
2023-03-23  4:00 ` [RFC PATCH 4/7] memcg: sleep during flushing stats in safe contexts Yosry Ahmed
2023-03-23 15:56   ` Johannes Weiner
2023-03-23 16:01     ` Yosry Ahmed
     [not found]       ` <CAJD7tkZ7Dz9myftc9bg7jhiaOYcn7qJ+V4sxZ_2kfnb+k=zhJQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2023-03-23 17:27         ` Johannes Weiner
     [not found]           ` <20230323172732.GE739026-druUgvl0LCNAfugRpC6u6w@public.gmane.org>
2023-03-23 18:07             ` Yosry Ahmed
2023-03-23 19:35               ` Shakeel Butt
2023-03-23  4:00 ` [RFC PATCH 5/7] vmscan: memcg: sleep when flushing stats during reclaim Yosry Ahmed
2023-03-23  4:00 ` [RFC PATCH 7/7] memcg: do not modify rstat tree for zero updates Yosry Ahmed

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