diff mbox series

[8/8] mm/vmscan: Delay waking of tasks throttled on NOPROGRESS

Message ID 20211008135332.19567-9-mgorman@techsingularity.net (mailing list archive)
State New
Headers show
Series Remove dependency on congestion_wait in mm/ | expand

Commit Message

Mel Gorman Oct. 8, 2021, 1:53 p.m. UTC
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@techsingularity.net>
---
 mm/vmscan.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

Comments

Vlastimil Babka Oct. 14, 2021, 3:41 p.m. UTC | #1
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@techsingularity.net>

Acked-by: Vlastimil Babka <vbabka@suse.cz>

> ---
>  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];
>
diff mbox series

Patch

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];