Lines Matching +full:real +full:- +full:time
5 BFQ is a proportional-share I/O scheduler, with some extra
6 low-latency capabilities. In addition to cgroups support (blkio or io
9 - BFQ guarantees a high system and application responsiveness, and a
10 low latency for time-sensitive applications, such as audio or video
12 - BFQ distributes bandwidth, and not just time, among processes or
13 groups (switching back to time distribution when needed to keep
19 goal, for a given device, is to achieve the maximum-possible
20 throughput at all times, then do switch off all low-latency heuristics
25 As every I/O scheduler, BFQ adds some overhead to per-I/O-request
27 single-lock-protected, per-request processing time of BFQ---i.e., the
29 completion hooks---is, e.g., 1.9 us on an Intel Core i7-2760QM@2.40GHz
30 (dated CPU for notebooks; time measured with simple code
31 instrumentation, and using the throughput-sync.sh script of the S
32 suite [1], in performance-profiling mode). To put this result into
33 context, the total, single-lock-protected, per-request execution time
34 of the lightest I/O scheduler available in blk-mq, mq-deadline, is 0.7
35 us (mq-deadline is ~800 LOC, against ~10500 LOC for BFQ).
44 set (Section 4-2):
45 - Intel i7-4850HQ: 400 KIOPS
46 - AMD A8-3850: 250 KIOPS
47 - ARM CortexTM-A53 Octa-core: 80 KIOPS
52 (Section 4-2). For BFQ, this leads to the following maximum
54 - Intel i7-4850HQ: 310 KIOPS
55 - AMD A8-3850: 200 KIOPS
56 - ARM CortexTM-A53 Octa-core: 56 KIOPS
58 BFQ works for multi-queue devices too.
65 1-1 Personal systems
66 1-2 Server systems
70 4-1 Service guarantees provided
71 4-2 Interface
78 1-1 Personal systems
79 --------------------
89 - one or more large files are being read, written or copied,
90 - a tree of source files is being compiled,
91 - one or more virtual machines are performing I/O,
92 - a software update is in progress,
93 - indexing daemons are scanning filesystems and updating their
97 takes about the same time as if the storage device was idle. As a
102 Low latency for soft real-time applications
104 Also soft real-time applications, such as audio and video
109 Higher speed for code-development tasks
113 BFQ executes the I/O-related components of typical code-development
123 and with all the workloads on flash-based devices, BFQ achieves,
129 BFQ distributes the device throughput, and not just the device time,
130 among I/O-bound applications in proportion their weights, with any
132 guarantees, it is possible to compute tight per-I/O-request delay
134 guarantees, BFQ switches to time-based resource sharing (only) for
137 1-2 Server systems
138 ------------------
144 * audio and video-streaming with zero or very low jitter and drop
149 * real-time recording of data in live-dumping applications (e.g.,
158 BFQ is a proportional-share I/O scheduler, whose general structure,
161 - Each process doing I/O on a device is associated with a weight and a
164 - BFQ grants exclusive access to the device, for a while, to one queue
165 (process) at a time, and implements this service model by
169 - After a queue is granted access to the device, the budget of the
173 - The in-service queue is expired, i.e., its service is suspended,
177 - The budget timeout prevents processes doing random I/O from
181 - Actually, as in CFQ, a queue associated with a process issuing
183 contrast, BFQ may idle the device for a short time interval,
185 a new request in time. Device idling typically boosts the
186 throughput on rotational devices and on non-queueing flash-based
193 - With respect to idling for service guarantees, if several
194 processes are competing for the device at the same time, but
200 - On flash-based storage with internal queueing of commands
205 throughput may be sub-optimal. No solution currently exists to
209 - If low-latency mode is enabled (default configuration), BFQ
211 real-time applications (e.g., video or audio players/streamers),
215 throughput. For brevity, we call just "weight-raising" the whole
217 particular, BFQ provides a milder form of weight-raising for
218 interactive applications, and a stronger form for soft real-time
221 - BFQ automatically deactivates idling for queues born in a burst of
227 - As CFQ, BFQ merges queues performing interleaved I/O, i.e.,
238 - Queues are scheduled according to a variant of WF2Q+, named
239 B-WF2Q+, and implemented using an augmented rb-tree to preserve an
240 O(log N) overall complexity. See [2] for more details. B-WF2Q+ is
243 - B-WF2Q+ guarantees a tight deviation with respect to an ideal,
244 perfectly fair, and smooth service. In particular, B-WF2Q+
250 - The last, budget-independence, property (although probably
254 - First, with any proportional-share scheduler, the maximum
258 accurate service of B-WF2Q+, but also because BFQ *does not*
262 - Second, BFQ is free to choose, for every process (queue), the
265 updates queue budgets with a simple feedback-loop algorithm that
267 tight latency guarantees to time-sensitive applications. When
268 the in-service queue expires, this algorithm computes the next
271 - Let large budgets be eventually assigned to the queues
272 associated with I/O-bound applications performing sequential
276 - Let small budgets be eventually assigned to the queues
277 associated with time-sensitive applications (which typically
280 B-WF2Q+ will serve that queue (Subsec 3.3 in [2]).
282 - If several processes are competing for the device at the same time,
288 - ioprio classes are served in strict priority order, i.e.,
289 lower-priority queues are not served as long as there are
290 higher-priority queues. Among queues in the same class, the
304 max_budget. The other performance-related parameters have been
309 In particular, the tunables back_seek-max, back_seek_penalty,
315 per-process ioprio and weight
316 -----------------------------
321 weight = (IOPRIO_BE_NR - ioprio) * 10.
323 Beware that, if low-latency is set, then BFQ automatically raises the
324 weight of the queues associated with interactive and soft real-time
328 ----------
332 slice_idle is a non-zero value. Idling has a double purpose: boosting
344 as flash-based storage with internal command queueing (and
352 flash-based fast storage, setting slice_idle=0 might end up in better
356 case of differentiated weights or differentiated I/O-request lengths.
364 terms of I/O-request dispatches. To guarantee that the actual service
374 strict_guarantees tunable, short-term service guarantees may be
382 -------------
389 -----------------
393 - always performs idling when the in-service queue becomes empty;
395 - forces the device to serve one I/O request at a time, by dispatching a
398 In the presence of differentiated weights or I/O-request sizes, both
403 devices reorder internally-queued requests, which may trivially break
409 -------------
420 -----------------
430 -----------------
436 ----------------
443 -----------
447 real-time applications are privileged and experience a lower latency,
458 entail a lower throughput. To achieve the highest-possible throughput
459 on a non-rotational device, setting slice_idle to 0 may be needed too
464 ------------
466 Maximum amount of device time that can be given to a task (queue) once
468 increasing this time usually increases maximum throughput. On the
469 opposite end, increasing this time coarsens the granularity of the
470 short-term bandwidth and latency guarantees, especially if the
474 ----------
481 values is that they coarsen the granularity of short-term bandwidth
484 The default value is 0, which enables auto-tuning: BFQ sets max_budget
492 it with auto-tuning. An alternative way to achieve this goal is to
498 BFQ supports both cgroups-v1 and cgroups-v2 io controllers, namely
499 blkio and io. In particular, BFQ supports weight-based proportional
502 4-1 Service guarantees provided
503 -------------------------------
507 with weight 200 gets twice the bandwidth, and not just twice the time,
518 The resource-sharing guarantee for a group may partially or totally
519 switch from bandwidth to time, if providing bandwidth guarantees to
521 per-process basis: if a process of a leaf group causes throughput loss
523 BFQ switches back to just time-based proportional share for that
526 4-2 Interface
527 -------------
533 BFQ-specific cgroup parameters and stats begin with the "bfq."
534 prefix. So, with cgroups-v1 or cgroups-v2, the full prefix for
535 BFQ-specific files is "blkio.bfq." or "io.bfq." For example, the group
539 As for cgroups-v1 (blkio controller), the exact set of stat files
540 created, and kept up-to-date by bfq, depends on whether
543 Documentation/admin-guide/cgroup-v1/blkio-controller.rst. If, instead,
557 -----------------
561 weight (namely blkio.bfq.weight or io.bfq-weight): the weight of the
567 Recall that, if low-latency is set, then BFQ automatically raises the
568 weight of the queues associated with interactive and soft real-time
575 Technologies (MST-2015), May 2015.
577 http://algogroup.unimore.it/people/paolo/disk_sched/mst-2015.pdf
587 http://algogroup.unimore.it/people/paolo/disk_sched/bfq-v1-suite-results.pdf
590 https://github.com/Algodev-github/S