[PATCH V2 00/16] Introduce the BFQ I/O scheduler

From: Paolo Valente
Date: Fri Mar 31 2017 - 08:55:00 EST


Hi,
with respect to the previous submission [1], these new patch series:
- contains all the changes suggested by Jens and Bart [1], apart from
those for which I raised doubts that either have been acknowledged,
or have not received a reply yet (I will of course apply also the
latter changes if those threads restart);
- contains a fix to the bug causing the failure reported by Jens [2].

As for major changes, this patch series:
- solves the nesting problem between scheduler and io-context locks, by
not taking any reference to io contexts anymore [3];
- splits the original, single source file into three files.

These last two contributions are provided by two additional patches in
the series. I've not merged these changes into the other patches for
the following reasons:

- Merging these changes would have implied splitting them into further
smaller pieces, applying each piece to the right previous patch, and
solving all the conflicts generated by each per-patch
modification. This would have taken really a lot of time, and would
have implied a certain probability of introducing subtle errors (I
have tried for a few days, and then abandoned this solution).

- The removal of extra io-context references is a non-trivial change
to code that has worked the other way, for probably about a decade,
in CFQ. The change seems to be fine, but in case of errors, it is
probably much easier to find and clearly fix them, if they are
confined in a single commit.

- A dedicated commit for the removal of extra io-context references
also documents how it has been obtained, and what assumptions have
been made.

- Similarly, an explicit split of the srouce file shows where each
piece has gone, instead of exposing only the result of the split,
with possible mistakes buried in it.

I have run all the tests I could.

Some patch still generates WARNINGS with checkpatch.pl, but these
WARNINGS seem to be either unavoidable for the involved pieces of code
(which the patch just extends), or false positives.

Thanks,
Paolo

[1] https://lkml.org/lkml/2017/3/4/148
[2] https://lkml.org/lkml/2017/3/6/887
[3] https://lkml.org/lkml/2017/3/18/34
Arianna Avanzini (4):
block, bfq: add full hierarchical scheduling and cgroups support
block, bfq: add Early Queue Merge (EQM)
block, bfq: reduce idling only in symmetric scenarios
block, bfq: handle bursts of queue activations

Paolo Valente (12):
block, bfq: introduce the BFQ-v0 I/O scheduler as an extra scheduler
block, bfq: improve throughput boosting
block, bfq: modify the peak-rate estimator
block, bfq: add more fairness with writes and slow processes
block, bfq: improve responsiveness
block, bfq: reduce I/O latency for soft real-time applications
block, bfq: preserve a low latency also with NCQ-capable drives
block, bfq: reduce latency during request-pool saturation
block, bfq: boost the throughput on NCQ-capable flash-based devices
block, bfq: boost the throughput with random I/O on NCQ-capable HDDs
block, bfq: remove all get and put of I/O contexts
block, bfq: split bfq-iosched.c into multiple source files

Documentation/block/00-INDEX | 2 +
Documentation/block/bfq-iosched.txt | 531 ++++
block/Kconfig.iosched | 21 +
block/Makefile | 1 +
block/bfq-cgroup.c | 1139 ++++++++
block/bfq-iosched.c | 5030 +++++++++++++++++++++++++++++++++++
block/bfq-iosched.h | 942 +++++++
block/bfq-wf2q.c | 1616 +++++++++++
include/linux/blkdev.h | 2 +-
9 files changed, 9283 insertions(+), 1 deletion(-)
create mode 100644 Documentation/block/bfq-iosched.txt
create mode 100644 block/bfq-cgroup.c
create mode 100644 block/bfq-iosched.c
create mode 100644 block/bfq-iosched.h
create mode 100644 block/bfq-wf2q.c

--
2.10.0