Dear Engineers,

The tests say it all. BFQ and BFQ-MQ win.

Please don't listen to FUD (you should be immune to that by now)
and make it happen for the mainline. Paolo and the guys
did a great job. They think like engineers.

I understand that some people want to have credit for someone
else's job, but I believe we both hate such people.

The expected reasult:
blq (spinning HHDs) and bfq-mq (SSDs) into deafault in mainline.

Please make it happen.

Thank you,
Workstation User

Culprits of blocking (extreme sabotage!):
1.Jens Axboe (kernel)
2.Tejun Heo (kernel)

The way of sabotage (how they blocked bfq):
quote:
"Well, it's all about how to actually route the changes
and in general whenever avoidable we try to avoid
whole-sale code replacement especially when most of the
structural code is similar like in this case.
Gradually evolving cfq to bfq is likely to take
more work but I'm very positive that it'd definitely
be a lot easier to merge the changes that way and people
involved, including the developers and reviewers,
would acquire a lot clearer picture of what's going on in the process." 

Disecting above sabotage:

FUD:
Well, it's all about how to actually route the changes
and in general whenever avoidable we try to avoid
whole-sale code replacement especially when most of
the structural code is similar like in this case.
Gradually evolving cfq to bfq is likely to take more
work but I'm very positive that it'd definitely be a
lot easier to merge the changes that way and people
involved, including the developers and reviewers,
would acquire a lot clearer picture of what's going on
in the process."

Answer to FUD and sabotages:
 1) cfq is based on a round-robin scheme, in which an
unlucky queue that should be served immediately may happen
instead to wait for all the other busy queues before being
served. In this respect, combining round robin with
virtual-time-based improvements is likely to lead to not
very clear solutions, and probably to sub-optimal results
with respect to just using an optimal scheduler with
provable deterministic guarantees (as the internal
scheduler of bfq).

2) To provide a queue with a higher fraction of the
throughput, a round-robin scheduler serves the queue
for a longer time slice. Increasing time slices further
increases per-request latencies. The problem may be
mitigated by using preemption, but the result is a
combination of a basic algorithm and a ‘corrective’
heuristic. This is again a more convoluted, and likely
less accurate, solution than using directly an optimal
algorithm with provable guarantees.

3) In bfq, budgets play a similar role as time slices
in cfq, i.e., once a queue has been granted access to the
device, the queue is served, in the simplest case, until
it finishes its budget. But, under bfq, the fraction of
the throughput received by a queue is *independent* of the
budget assigned to the queue. I agree that this may seem
counterintuitive in the first place, especially if one is
accustomed to thinking a la round-robin. Differently
from a round-robin algorithm, the internal scheduler
of bfq controls throughput distribution by controlling
the frequency at which queues are served. The resulting
degree of freedom with respect to budget sizes has the
following two main advantages:
3.a) bfq can choose for each queue the budget that best
fits the requirements or characteristics of the queue.
For example, queues corresponding to time-sensitive
applications are assigned small budgets, which guarantees
that they are served quickly. On the opposite side, queues
associated to I/O-bound processes performing mostly
sequential I/O are assigned large budgets, which helps
boost the throughput.
3.b) bfq does not need to assign large budgets to queues
to provide them with large fractions of the throughput;
hence bfq does not need to deteriorate per-request
latencies to guarantee a differentiated throughput
distribution.

3) The internal scheduler of bfq guarantees that a queue
that needs to be served quickly may wait, unjustly, for the
service of at most one queue. More formally, bfq guarantees
that each budget is completed with the smallest possible
delay, for a budget-by-budget scheduler, with respect
to an ideal, perfectly fair scheduler (i.e., an ideal
scheduler that serves all busy queues at the same,
providing each with a fraction of the throughput
proportional to its weight).

4) Assigning temporarily a large fraction of the throughput
is the main mechanism through which bfq provides interactive
and soft real-time applications with a low latency. Thanks
to fact 3.b, bfq achieves this goal without increasing
per-request latencies. As for how applications are deemed
as interactive or soft real-time, I have tried to describe
both detection heuristics in patches 06 and 07.

Finally, as for adding to cfq the heuristics I have added
to bfq, I think that this would probably improve application
latencies also with cfq. But, because of the above facts,
the result would unavoidably be worse than with bfq."

There is really just one reasonable answer put BFQ and
remove CFQ because in an effort perspective future fixes
in BFQ will be easier than try to fix and understand CFQ
in light of the BFQ analysis. So why this is not merged
in mainline?



links (some outdated, bfq has been improved and its now bfq and bfq-mq !):

https://algo.ing.unimo.it/people/paolo/disk_sched/

https://www.youtube.com/watch?v=1cjZeaCXIyM&feature=youtu.be

_______________________________________________
Softwarefactory-dev mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/softwarefactory-dev

Reply via email to