DragonFly kernel List (threaded) for 2011-04
[GSoC]Overview on my GSoC project: Implement BFQ disk scheduling policy
My GSoC proposal "Improve dsched interfaces and implement BFQ disk
scheduling policy" has been accepted, while it does not mean the plan in
it is totally practical and nailed down. Suggestions/questions are
needed to help me revise the plan. So I will describe the whole thing in
1. What is the goal?
I will implement a BFQ (Budget Fair Queue) scheduler on the basis of
dsched interfaces. The "improve dsched interfaces" part is not a
ultimate goal but one way to support the "dequeue" trigger needed by BFQ
(I will explain this later).
Of course, the motivation of doing these is to improve the overall
performance of DFBSD.
2. Why BFQ?
Firstly, a scheduler emphasizes fairness is needed by DFBSD, for it can
improve the interactivity. Secondly, BFQ scheduler performs well in
benchmarks under Linux, both on fairness and the worst case performance,
compared to Linux's CFQ (Completely Fair Queue, a time slice based fair
queue scheduler) [2,3].
3. How to achieve the goal?
Currently, there are three phases:
A. Make dsched adapt to BFQ algorithm (or make BFQ adapt to dsched)
The initial idea is the "improve dsched interface" part -- implement
request polling mechanism for dsched, that is, the lower disk driver
will ask for further requests, instead of waiting for requests
dispatched by dsched. It includes modifying disk drivers and
implementing some new interfaces for dsched. I will ensure backwards
compatibility of the modified drivers and dsched: both request polling
and request dispatching is supported and a scheduler on dsched can
choose between them or both of them.
It is only a straightforward idea, and I do not know whether it can work
efficiently or any obstacle exists. Alex Hornung suggests I ask for
alternate (and wiser) way to implement BFQ without request polling. I
hope someone can give me suggestions on this point (or discussion on the
necessity of request polling).
B. Implement BFQ scheduler
As far as I can see, this part does not have problems if part A prepares
good interfaces for BFQ. I will start from scratch to write the whole
scheduler, under the guideline of the technical report written by the
inventor of BFQ.
C. Tune and benchmark BFQ scheduler
I think this can probably be the heaviest part of the project. Your
helping hands are needed to test the implementation under different
parameters and different hardware.
That's all. I am eagerly looking forward to your suggestions, especially
on part A the request polling part. I can start to figure out details
once this point is clear.
Sorry for the long post, and thank you.