Hello, According to the plan[1] I posted earlier, I have completed the request polling emulation part and the first version of BFQ scheduler.
The code is at [2], and I am currently working on branch dsched_BFQ. The first version is implemented according to the algorithm on the BFQ tech report[3] written by Paolo Valente (the inventer of BFQ). However, that report have hidden some details that may be possible optimizing points, such as: - Dynamically changing maximum budget (currently hard wired in bfq.h) - Dynamically changing anticipatory waiting time (currently hard wired in bfq.h) - A good selecting function which can distinct between sync and async requests from one process(currently a simple FIFO per process) I will have to take a look at the implementation on Linux and add those features into our BFQ in next versions (I will take the ideas but the code). Currently, there is a known bug in the first version, under the vkernel: Whenever I "cat"ing a large file (ls -R / > list; cat list), the system will stick a wile and has the following debug line printed: wkt_acquire: stuck: td 0x54479c50 td->td_flags 00800821 I do not know if it means that the system deadlocks on that situation, but I looked into my code and find nowhere to deadlock. Can anybody help me and give me some suggestions on it? [1] http://leaf.dragonflybsd.org/mailarchive/kernel/2011-04/msg00060.html [2] git://leaf.dragonflybsd.org/~brillsp/dragonfly.git [3] http://algo.ing.unimo.it/people/paolo/disk_sched/bfq-techreport.pdf --- Regards, Brills Peng