Details
-
Improvement
-
Resolution: Unresolved
-
Minor
-
None
-
None
-
None
-
3
-
9223372036854775807
Description
This seems to be something wanted from a long time: LU-8433
The idea here is to be able to configure a rule like this:
# lctl set_param ...=start fio jobid={fio.*} minrate=1000 rate=10000 # lctl get_param ... regular requests: CPT 0: fio {fio.*} 1000-10000, ref 2 ...
The rate for each job matching "fio.*" should be between 1000-10000 RPC/s.
So requests in queue belonging to a class bucket with rate below minimum acceptable rate should be scheduled first.
Implementation:
The main idea is to duplicate some part of TBF code to implement deadline and token for minimum rate.
The compare function (tbf_cli_compare()) of the TBF binheap can be modify to firstly compare the deadlines of the minimum rate but only if the class has missed some token time slots before (current rate < minimum rate).
That way, if a class is late (< minrate), it should be scheduled before the others class. If the class is not late anymore, it will be scheduled according its maximum rate.
Realtime
The realtime rule is used to prioritize the classes matching the rule when server loaded (if the sum of all the defined rate is above what the server can handle). The realtime classes will always try to match the specified rate by degrading the performances of the other classes.
When a minimum rate is specified on a realtime rule, it makes sense to apply the "realtime" behavior on the lower rate limit of the classe.