• Ojaswin Mujoo's avatar
    Revert "ext4: remove ac->ac_found > sbi->s_mb_min_to_scan dead check in ext4_mb_check_limits" · 3582e745
    Ojaswin Mujoo authored
    This reverts commit 32c08693.
    
    The reverted commit was intended to remove a dead check however it was observed
    that this check was actually being used to exit early instead of looping
    sbi->s_mb_max_to_scan times when we are able to find a free extent bigger than
    the goal extent. Due to this, a my performance tests (fsmark, parallel file
    writes in a highly fragmented FS) were seeing a 2x-3x regression.
    
    Example, the default value of the following variables is:
    
    sbi->s_mb_max_to_scan = 200
    sbi->s_mb_min_to_scan = 10
    
    In ext4_mb_check_limits() if we find an extent smaller than goal, then we return
    early and try again. This loop will go on until we have processed
    sbi->s_mb_max_to_scan(=200) number of free extents at which point we exit and
    just use whatever we have even if it is smaller than goal extent.
    
    Now, the regression comes when we find an extent bigger than goal. Earlier, in
    this case we would loop only sbi->s_mb_min_to_scan(=10) times and then just use
    the bigger extent. However with commit 32c08693 that check was removed and hence
    we would loop sbi->s_mb_max_to_scan(=200) times even though we have a big enough
    free extent to satisfy the request. The only time we would exit early would be
    when the free extent is *exactly* the size of our goal, which is pretty uncommon
    occurrence and so we would almost always end up looping 200 times.
    
    Hence, revert the commit by adding the check back to fix the regression. Also
    add a comment to outline this policy.
    
    Fixes: 32c08693 ("ext4: remove ac->ac_found > sbi->s_mb_min_to_scan dead check in ext4_mb_check_limits")
    Signed-off-by: default avatarOjaswin Mujoo <ojaswin@linux.ibm.com>
    Reviewed-by: default avatarRitesh Harjani (IBM) <ritesh.list@gmail.com>
    Reviewed-by: default avatarKemeng Shi <shikemeng@huaweicloud.com>
    Link: https://lore.kernel.org/r/ddcae9658e46880dfec2fb0aa61d01fb3353d202.1685449706.git.ojaswin@linux.ibm.comSigned-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
    3582e745
mballoc.c 192 KB