• Federico Motta's avatar
    block, bfq: fix asymmetric scenarios detection · 98fa7a3e
    Federico Motta authored
    Since commit 2d29c9f8 ("block, bfq: improve asymmetric scenarios
    detection"), a scenario is defined asymmetric when one of the
    following conditions holds:
    - active bfq_queues have different weights
    - one or more group of entities (bfq_queue or other groups of entities)
      are active
    bfq grants fairness and low latency also in such asymmetric scenarios,
    by plugging the dispatching of I/O if the bfq_queue in service happens
    to be temporarily idle. This plugging may lower throughput, so it is
    important to do it only when strictly needed.
    
    By mistake, in commit '2d29c9f8' ("block, bfq: improve asymmetric
    scenarios detection") the num_active_groups counter was firstly
    incremented and subsequently decremented at any entity (group or
    bfq_queue) weight change.
    
    This is useless, because only transitions from active to inactive and
    vice versa matter for that counter. Unfortunately this is also
    incorrect in the following case: the entity at issue is a bfq_queue
    and it is under weight raising. In fact in this case there is a
    spurious increment of the num_active_groups counter.
    
    This spurious increment may cause scenarios to be wrongly detected as
    asymmetric, thus causing useless plugging and loss of throughput.
    
    This commit fixes this issue by simply removing the above useless and
    wrong increments and decrements.
    
    Fixes: 2d29c9f8 ("block, bfq: improve asymmetric scenarios detection")
    Tested-by: default avatarOleksandr Natalenko <oleksandr@natalenko.name>
    Signed-off-by: default avatarFederico Motta <federico@willer.it>
    Signed-off-by: default avatarPaolo Valente <paolo.valente@linaro.org>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    98fa7a3e
bfq-wf2q.c 52.2 KB