• Paolo Valente's avatar
    block, bfq: decrease burst size when queues in burst exit · 7cb04004
    Paolo Valente authored
    If many queues belonging to the same group happen to be created
    shortly after each other, then the concurrent processes associated
    with these queues have typically a common goal, and they get it done
    as soon as possible if not hampered by device idling.  Examples are
    processes spawned by git grep, or by systemd during boot. As for
    device idling, this mechanism is currently necessary for weight
    raising to succeed in its goal: privileging I/O.  In view of these
    facts, BFQ does not provide the above queues with either weight
    raising or device idling.
    
    On the other hand, a burst of queue creations may be caused also by
    the start-up of a complex application. In this case, these queues need
    usually to be served one after the other, and as quickly as possible,
    to maximise responsiveness. Therefore, in this case the best strategy
    is to weight-raise all the queues created during the burst, i.e., the
    exact opposite of the strategy for the above case.
    
    To distinguish between the two cases, BFQ uses an empirical burst-size
    threshold, found through extensive tests and monitoring of daily
    usage. Only large bursts, i.e., burst with a size above this
    threshold, are considered as generated by a high number of parallel
    processes. In this respect, upstart-based boot proved to be rather
    hard to detect as generating a large burst of queue creations, because
    with upstart most of the queues created in a burst exit *before* the
    next queues in the same burst are created. To address this issue, I
    changed the burst-detection mechanism so as to not decrease the size
    of the current burst even if one of the queues in the burst is
    eliminated.
    
    Unfortunately, this missing decrease causes false positives on very
    fast systems: on the start-up of a complex application, such as
    libreoffice writer, so many queues are created, served and exited
    shortly after each other, that a large burst of queue creations is
    wrongly detected as occurring. These false positives just disappear if
    the size of a burst is decreased when one of the queues in the burst
    exits. This commit restores the missing burst-size decrease, relying
    of the fact that upstart is apparently unlikely to be used on systems
    running this and future versions of the kernel.
    Signed-off-by: default avatarPaolo Valente <paolo.valente@linaro.org>
    Signed-off-by: default avatarMauro Andreolini <mauro.andreolini@unimore.it>
    Signed-off-by: default avatarAngelo Ruocco <angeloruocco90@gmail.com>
    Tested-by: default avatarMirko Montanari <mirkomontanari91@gmail.com>
    Tested-by: default avatarOleksandr Natalenko <oleksandr@natalenko.name>
    Tested-by: default avatarLee Tibbert <lee.tibbert@gmail.com>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    7cb04004
bfq-iosched.c 165 KB