Re: [PATCH 4/8] mm/writeback: Throttle based on page writeback instead of congestion

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 10/8/21 15:53, Mel Gorman wrote:
> do_writepages throttles on congestion if the writepages() fails due to a
> lack of memory but congestion_wait() is partially broken as the congestion
> state is not updated for all BDIs.
> 
> This patch stalls waiting for a number of pages to complete writeback
> that located on the local node. The main weakness is that there is no
> correlation between the location of the inode's pages and locality but
> that is still better than congestion_wait.
> 
> Signed-off-by: Mel Gorman <mgorman@xxxxxxxxxxxxxxxxxxx>

Acked-by: Vlastimil Babka <vbabka@xxxxxxx>

> ---
>  mm/page-writeback.c | 11 +++++++++--
>  1 file changed, 9 insertions(+), 2 deletions(-)
> 
> diff --git a/mm/page-writeback.c b/mm/page-writeback.c
> index 4812a17b288c..f34f54fcd5b4 100644
> --- a/mm/page-writeback.c
> +++ b/mm/page-writeback.c
> @@ -2366,8 +2366,15 @@ int do_writepages(struct address_space *mapping, struct writeback_control *wbc)
>  			ret = generic_writepages(mapping, wbc);
>  		if ((ret != -ENOMEM) || (wbc->sync_mode != WB_SYNC_ALL))
>  			break;
> -		cond_resched();
> -		congestion_wait(BLK_RW_ASYNC, HZ/50);
> +
> +		/*
> +		 * Lacking an allocation context or the locality or writeback
> +		 * state of any of the inode's pages, throttle based on
> +		 * writeback activity on the local node. It's as good a
> +		 * guess as any.
> +		 */
> +		reclaim_throttle(NODE_DATA(numa_node_id()),
> +			VMSCAN_THROTTLE_WRITEBACK, HZ/50);
>  	}
>  	/*
>  	 * Usually few pages are written by now from those we've just submitted
> 





[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux