• Tejun Heo's avatar
    blk-iocost: implement delay adjustment hysteresis · 5160a5a5
    Tejun Heo authored
    Curently, iocost syncs the delay duration to the outstanding debt amount,
    which seemed enough to protect the system from anon memory hogs. However,
    that was mostly because the delay calcuation was using hweight_inuse which
    quickly converges towards zero under debt for delay duration calculation,
    often pusnishing debtors overly harshly for longer than deserved.
    
    The previous patch fixed the delay calcuation and now the protection against
    anonymous memory hogs isn't enough because the effect of delay is indirect
    and non-linear and a huge amount of future debt can accumulate abruptly
    while unthrottled.
    
    This patch implements delay hysteresis so that delay is decayed
    exponentially over time instead of getting cleared immediately as debt is
    paid off. While the overall behavior is similar to the blk-cgroup
    implementation used by blk-iolatency, a lot of the details are different and
    due to the empirical nature of the mechanism, it's challenging to adapt the
    mechanism for one controller without negatively impacting the other.
    
    As the delay is gradually decayed now, there's no point in running it from
    its own hrtimer. Periodic updates are now performed from ioc_timer_fn() and
    the dedicated hrtimer is removed.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Cc: Josef Bacik <josef@toxicpanda.com>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    5160a5a5
blk-iocost.c 87.7 KB