Glossary of Scheduling Policies #13
Replies: 4 comments
-
Awesome! Just wanted to say this is really helpful; especially for the most "basic" policies, it's clarifying to see everything written out explicitly. |
Beta Was this translation helpful? Give feedback.
-
I'm adding a handful of non-work-conserving pollicies (and updating this discussion to reflect that we now support both WC & NWC). Also adding a few policies that I think are interesting and worth exploring later, albeit not at the risk of overwhelming ourselves currently! |
Beta Was this translation helpful? Give feedback.
-
Putting a little note here on #46, a new discussion I'm opening up – one where we can store a glossary of 'algorithms' to translate policies we express here into queue representations! |
Beta Was this translation helpful? Give feedback.
-
@anshumanmohan This can now be more formally stated – Same comment for the FIFO and SJN notes. |
Beta Was this translation helpful? Give feedback.
-
This is a running list of scheduling policies, both work-conserving and non-work-conserving of which we are aware. It would be great if our DSL could easily express a large number of these. The list is currently in roughly increasing order of complexity, and probably makes for a good ordered hitlist for our project.
Work-Conserving Policies
fcfs(A)
just sends packets of classA
in the order that they arrive.fcfs(A, B)
emits a mix of packets from classesA
andB
, again following the order that packets from these classes arrive.rr(A, B)
sends one packet fromA
, one fromB
, and so on. If one class is silent and the other is active, it allows the active class to send packets in FIFO order until the silent class starts up again. The erstwhile silent class does not get any form of "credit" for the time it was silent.rr(A, B, C)
behaves as you would expect from the above. A subtlety of this policy is that if, say,A
fell silent, the policy would need to temporarily become equivalent torr(B, C)
.strict(A, B)
emits packets from classA
so long as as classA
is active. If classA
falls silent, it emits packets fromB
until such time as classA
is active again.wfq_2_3(A, B)
emits packets from classesA
andB
, attempting to ensure that, for every five packets emitted, two come fromA
and three fromB
. If one class is silent, the other is temporarily allowed more than its stated share. When the silent class starts transmitting again, it does not get "credit" for the time it was silent. I can imagine denoting this differently, likewfq((2, 3), (A, B))
or something.wfq_2_3_4(A, B, C)
behaves as you would expect from the above. A subtlety of this policy is that if, say,A
fell silent, the policy would need to temporarily become equivalent towfq_3_4(B, C)
.lstf(A)
emits packets fromA
in increasing order of packet slack.lstf(A, B)
generalizes straightforwardly: mixA
andB
freely, paying attention to the slacks and not the classes.A
would take 10 seconds and gets scheduled at time 0. Then, five seconds later, a jobB
that would take 2 seconds is enqueued. This policy does not let the quick new jobB
overtake the running jobA
, even thoughB
needs 2 seconds andA
needs 5 more seconds.A
would be paused and added back to the queue, andB
would be started in its stead.Non-Work-Conserving Policies
Rate-controlled Static-Priority (RCSP)
rcsp(A, B)
will emit a series of elements from bothA
andB
, based on the rules that are described above. If neither one has an eligible element, our scheduler will fall silent as time passes until an element becomes eligible (its readiness time passes).Leaky Bucket Filter
leaky(A, B, n, m)
functions likefifo(A, B)
would, except for the fact that it processes elements at specified time rates & capacities as described above.Token Bucket Filter
token(A, B, n, m)
functions likefifo(A, B) would
, except that it now handles elements with the capacity and time constraints described above.Stop-And-Go Filter
stopandgo(A, B, n)
functions likefifo(A, B)
would, but elements are only accessed after each interval of time lengthn
.Size-aware
Intuition: if flow A's packets are 3x longer than flow B's, then we should behave as though there were a 1:3 weight from the user.
Unclassified
Tabled For Now
Beta Was this translation helpful? Give feedback.
All reactions