• Paolo Valente's avatar
    block, bfq: consider also past I/O in soft real-time detection · a34b0244
    Paolo Valente authored
    BFQ privileges the I/O of soft real-time applications, such as video
    players, to guarantee to these application a high bandwidth and a low
    latency. In this respect, it is not easy to correctly detect when an
    application is soft real-time. A particularly nasty false positive is
    that of an I/O-bound application that occasionally happens to meet all
    requirements to be deemed as soft real-time. After being detected as
    soft real-time, such an application monopolizes the device. Fortunately,
    BFQ will realize soon that the application is actually not soft
    real-time and suspend every privilege. Yet, the application may happen
    again to be wrongly detected as soft real-time, and so on.
    
    As highlighted by our tests, this problem causes BFQ to occasionally
    fail to guarantee a high responsiveness, in the presence of heavy
    background I/O workloads. The reason is that the background workload
    happens to be detected as soft real-time, more or less frequently,
    during the execution of the interactive task under test. To give an
    idea, because of this problem, Libreoffice Writer occasionally takes 8
    seconds, instead of 3, to start up, if there are sequential reads and
    writes in the background, on a Kingston SSDNow V300.
    
    This commit addresses this issue by leveraging the following facts.
    
    The reason why some applications are detected as soft real-time despite
    all BFQ checks to avoid false positives, is simply that, during high
    CPU or storage-device load, I/O-bound applications may happen to do
    I/O slowly enough to meet all soft real-time requirements, and pass
    all BFQ extra checks. Yet, this happens only for limited time periods:
    slow-speed time intervals are usually interspersed between other time
    intervals during which these applications do I/O at a very high speed.
    To exploit these facts, this commit introduces a little change, in the
    detection of soft real-time behavior, to systematically consider also
    the recent past: the higher the speed was in the recent past, the
    later next I/O should arrive for the application to be considered as
    soft real-time. At the beginning of a slow-speed interval, the minimum
    arrival time allowed for the next I/O usually happens to still be so
    high, to fall *after* the end of the slow-speed period itself. As a
    consequence, the application does not risk to be deemed as soft
    real-time during the slow-speed interval. Then, during the next
    high-speed interval, the application cannot, evidently, be deemed as
    soft real-time (exactly because of its speed), and so on.
    
    This extra filtering proved to be rather effective: in the above test,
    the frequency of false positives became so low that the start-up time
    was 3 seconds in all iterations (apart from occasional outliers,
    caused by page-cache-management issues, which are out of the scope of
    this commit, and cannot be solved by an I/O scheduler).
    Tested-by: default avatarLee Tibbert <lee.tibbert@gmail.com>
    Signed-off-by: default avatarPaolo Valente <paolo.valente@linaro.org>
    Signed-off-by: default avatarAngelo Ruocco <angeloruocco90@gmail.com>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    a34b0244
bfq-iosched.c 173 KB