On Thu, Dec 02, 2021 at 08:30:51AM -0800, Shakeel Butt wrote: > Hi Mel, > > On Thu, Dec 2, 2021 at 7:07 AM Mel Gorman <mgorman@xxxxxxxxxxxxxxxxxxx> wrote: > > > > Mike Galbraith, Alexey Avramov and Darrick Wong all reported similar > > problems due to reclaim throttling for excessive lengths of time. > > In Alexey's case, a memory hog that should go OOM quickly stalls for > > several minutes before stalling. In Mike and Darrick's cases, a small > > memcg environment stalled excessively even though the system had enough > > memory overall. > > > > Commit 69392a403f49 ("mm/vmscan: throttle reclaim when no progress is being > > made") introduced the problem although commit a19594ca4a8b ("mm/vmscan: > > increase the timeout if page reclaim is not making progress") made it > > worse. Systems at or near an OOM state that cannot be recovered must > > reach OOM quickly and memcg should kill tasks if a memcg is near OOM. > > > > Is there a reason we can't simply revert 69392a403f49 instead of adding > more code/heuristics? Looking more into 69392a403f49, I don't think the > code and commit message are in sync. > > For the memcg reclaim, instead of just removing congestion_wait or > replacing it with schedule_timeout in mem_cgroup_force_empty(), why > change the behavior of all memcg reclaim. Also this patch effectively > reverts that behavior of 69392a403f49. > It doesn't fully revert it but I did consider reverting it. The reason why I preserved it because the intent originally was to throttle somewhat when progress is not being made to avoid a premature OOM and I wanted to preserve that charactersistic. Right now, this is the least harmful way of doing it. As more memcg, I removed the NOTHROTTLE because the primary reason why a memcg might fail to make progress is excessive writeback and that should still throttle. Completely failing to make progress in a memcg is most likely due to a memcg-OOM. > For direct reclaimers under global pressure, why is page allocator a bad > place for stalling on no progress reclaim? IMHO the callers of the > reclaim should decide what to do if reclaim is not making progress. Because it's a layering violation and the caller has little direct control over the reclaim retry logic. The page allocator has no visibility on why reclaim failed only that it did fail. -- Mel Gorman SUSE Labs