introduce bfq i/o scheduler#2
Open
xryoshi wants to merge 3 commits intoMathijsz:masterfrom
xryoshi:master
Open
introduce bfq i/o scheduler#2xryoshi wants to merge 3 commits intoMathijsz:masterfrom xryoshi:master
xryoshi wants to merge 3 commits intoMathijsz:masterfrom
xryoshi:master
Conversation
BFQ uses struct cfq_io_context to store its per-process per-device data, reusing the same code for cic handling of CFQ. The code is not shared ATM to minimize the impact of these patches. This patch introduces a new hlist to each io_context to store all the cic's allocated by BFQ to allow calling the right destructor on module unload; the radix tree used for cic lookup needs to be duplicated because it can contain dead keys inserted by a scheduler and later retrieved by the other one. Update the io_context exit and free paths to take care also of the BFQ cic's. Change the type of cfqq inside struct cfq_io_context to void * to use it also for BFQ per-queue data. A new bfq-specific ioprio_changed field is necessary, too, to avoid clobbering cfq's one, so switch ioprio_changed to a bitmap, with one element per scheduler. Signed-off-by: Paolo Valente <paolo.valente@unimore.it> Signed-off-by: Arianna Avanzini <avanzini.arianna@gmail.com>
Add a Kconfig option and do the related Makefile changes to compile the BFQ I/O scheduler. Also let the cgroups subsystem know about the BFQ I/O controller. Signed-off-by: Paolo Valente <paolo.valente@unimore.it> Signed-off-by: Arianna Avanzini <avanzini.arianna@gmail.com>
Add the BFQ-v5r1 I/O scheduler to 3.1.
The general structure is borrowed from CFQ, as much code. A (bfq_)queue is
associated to each task doing I/O on a device, and each time a scheduling
decision has to be taken a queue is selected and it is served until it expires.
- Slices are given in the service domain: tasks are assigned budgets,
measured in number of sectors. Once got the disk, a task must
however consume its assigned budget within a configurable maximum time
(by default, the maximum possible value of the budgets is automatically
computed to comply with this timeout). This allows the desired latency
vs "throughput boosting" tradeoff to be set.
- Budgets are scheduled according to a variant of WF2Q+, implemented
using an augmented rb-tree to take eligibility into account while
preserving an O(log N) overall complexity.
- A low-latency tunable is provided; if enabled, both interactive and soft
real-time applications are guaranteed very low latency.
- Latency guarantees are preserved also in presence of NCQ.
- High throughput with flash-based devices, while still preserving
latency guarantees.
- Useful features borrowed from CFQ: cooperating-queues merging (with
some additional optimizations with respect to the original CFQ version),
static fallback queue for OOM.
- BFQ supports full hierarchical scheduling, exporting a cgroups
interface. Each node has a full scheduler, so each group can
be assigned its own ioprio and an ioprio_class.
- If the cgroups interface is used, weights can be explictly assigned,
otherwise ioprio values are mapped to weights using the relation
weight = IOPRIO_BE_NR - ioprio.
- ioprio classes are served in strict priority order, i.e., lower
priority queues are not served as long as there are higher priority
queues. Among queues in the same class the bandwidth is distributed
in proportion to the weights of each queue. A very thin extra bandwidth
is however guaranteed to the Idle class, to prevent it from starving.
Signed-off-by: Paolo Valente <paolo.valente@unimore.it>
Signed-off-by: Arianna Avanzini <avanzini.arianna@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.