On Sat, Jan 23, 2021 at 9:01 PM Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> wrote: > > From: Johannes Weiner <hannes@xxxxxxxxxxx> > Subject: mm: memcontrol: prevent starvation when writing memory.high > > When a value is written to a cgroup's memory.high control file, the > write() context first tries to reclaim the cgroup to size before putting > the limit in place for the workload. Concurrent charges from the workload > can keep such a write() looping in reclaim indefinitely. > > In the past, a write to memory.high would first put the limit in place for > the workload, then do targeted reclaim until the new limit has been met - > similar to how we do it for memory.max. This wasn't prone to the > described starvation issue. However, this sequence could cause excessive > latencies in the workload, when allocating threads could be put into long > penalty sleeps on the sudden memory.high overage created by the write(), > before that had a chance to work it off. > > Now that memory_high_write() performs reclaim before enforcing the new > limit, reflect that the cgroup may well fail to converge due to concurrent > workload activity. Bail out of the loop after a few tries. > > Link: https://lkml.kernel.org/r/20210112163011.127833-1-hannes@xxxxxxxxxxx > Fixes: 536d3bf261a2 ("mm: memcontrol: avoid workload stalls when lowering memory.high") > Signed-off-by: Johannes Weiner <hannes@xxxxxxxxxxx> > Reviewed-by: Shakeel Butt <shakeelb@xxxxxxxxxx> > Reported-by: Tejun Heo <tj@xxxxxxxxxx> > Acked-by: Roman Gushchin <guro@xxxxxx> > Reviewed-by: Michal Koutný <mkoutny@xxxxxxxx> > Cc: Michal Hocko <mhocko@xxxxxxxx> > Cc: <stable@xxxxxxxxxxxxxxx> [5.8+] > Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> Johannes requested to replace this patch with https://lore.kernel.org/linux-mm/20210122184341.292461-1-hannes@xxxxxxxxxxx/