On 10/8/21 15:53, Mel Gorman wrote: > Tracing indicates that tasks throttled on NOPROGRESS are woken > prematurely resulting in occasional massive spikes in direct > reclaim activity. This patch wakes tasks throttled on NOPROGRESS > if reclaim efficiency is at least 12%. > > Signed-off-by: Mel Gorman <mgorman@xxxxxxxxxxxxxxxxxxx> Acked-by: Vlastimil Babka <vbabka@xxxxxxx> > --- > mm/vmscan.c | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) > > diff --git a/mm/vmscan.c b/mm/vmscan.c > index 7b54fec4072c..80a9a26f701f 100644 > --- a/mm/vmscan.c > +++ b/mm/vmscan.c > @@ -3338,8 +3338,11 @@ static inline bool compaction_ready(struct zone *zone, struct scan_control *sc) > > static void consider_reclaim_throttle(pg_data_t *pgdat, struct scan_control *sc) > { > - /* If reclaim is making progress, wake any throttled tasks. */ > - if (sc->nr_reclaimed) { > + /* > + * If reclaim is making progress greater than 12% efficiency then > + * wake all the NOPROGRESS throttled tasks. > + */ > + if (sc->nr_reclaimed > (sc->nr_scanned >> 3)) { > wait_queue_head_t *wqh; > > wqh = &pgdat->reclaim_wait[VMSCAN_THROTTLE_NOPROGRESS]; >