Re: [PATCH block 1/2] writeback, cgroup: Adjust WB_FRN_TIME_CUT_DIV to accelerate foreign inode switching

From: Jan Kara
Date: Thu Aug 15 2019 - 09:48:58 EST


On Fri 02-08-19 12:07:38, Tejun Heo wrote:
> WB_FRN_TIME_CUT_DIV is used to tell the foreign inode detection logic
> to ignore short writeback rounds to prevent getting confused by a
> burst of short writebacks. The parameter is currently 2 meaning that
> anything smaller than half of the running average writback duration
> will be ignored.
>
> This is unnecessarily aggressive. The detection logic uses 16 history
> slots and is already reasonably protected against some short bursts
> confusing it and the current parameter can lead to tens of seconds of
> missed detection depending on the writeback pattern.
>
> Let's change the parameter to 8, so that it only ignores writeback
> with are smaller than 12.5% of the current running average.
>
> Signed-off-by: Tejun Heo <tj@xxxxxxxxxx>

Makes sense to me. You can add:

Reviewed-by: Jan Kara <jack@xxxxxxx>

Honza

> ---
> fs/fs-writeback.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> --- a/fs/fs-writeback.c
> +++ b/fs/fs-writeback.c
> @@ -227,7 +227,7 @@ static void wb_wait_for_completion(struc
> /* parameters for foreign inode detection, see wb_detach_inode() */
> #define WB_FRN_TIME_SHIFT 13 /* 1s = 2^13, upto 8 secs w/ 16bit */
> #define WB_FRN_TIME_AVG_SHIFT 3 /* avg = avg * 7/8 + new * 1/8 */
> -#define WB_FRN_TIME_CUT_DIV 2 /* ignore rounds < avg / 2 */
> +#define WB_FRN_TIME_CUT_DIV 8 /* ignore rounds < avg / 8 */
> #define WB_FRN_TIME_PERIOD (2 * (1 << WB_FRN_TIME_SHIFT)) /* 2s */
>
> #define WB_FRN_HIST_SLOTS 16 /* inode->i_wb_frn_history is 16bit */
--
Jan Kara <jack@xxxxxxxx>
SUSE Labs, CR