[Click] CPU scheduling -> make elements interruptable.

Roman Chertov rchertov at purdue.edu
Thu Jun 28 21:02:32 EDT 2007


If the processing of the push/pull path is constant then you can treat 
it as a "quanta".  Then you just need to maintain a FIFO scheduler which 
schedules different clients on a per quanta bases.  That might work as well.



Beyers Cronje wrote:
> Interesting subject. As Roman pointed out each scheduled task will run 
> through the entire push/pull path before it returns and would probably 
> take some effort to implement timeslices with task interruption support.
> 
> The following is just a thought and might not be a viable option. One 
> way to do this would probably be between push()/pull() calls. Have an 
> intermediate function (lets call it prePush() ) per element that's 
> executed before each element's push() function. prePush() can then check 
> if the allocated forwarding path has exceeded it's timeslice. If it has 
> it will store a global pointer for this push/pull path and return 
> without continuing, effectively ending the scheduled task. Once the task 
> is scheduled again it can either continue where it left off using this 
> global pointer, or start a new push/pull process. The reason for prePush 
> will make life easier updating existing element code.
> 
> To illustrate:
> 
> Operation now:
> Element1::run_task() -> Element2::push() -> Element3::push() .....
> 
> Proposed:
> Element1::run_task() -> Element2::prepush() -> Element2::push() -> 
> Element3::prepush() -> Element3::push() ......
> 
> Say timeslice ends in Element3::prepush() the the next task schedule 
> path will look like this:
> Element1::run_task() -> Element3::prepush() -> Element3::push() ......
> 
> Beyers
> 
> On 6/28/07, *Roman Chertov* <rchertov at purdue.edu 
> <mailto:rchertov at purdue.edu>> wrote:
> 
>     In Click you have one or more threads of execution.  Most of the
>     elements in Click are agnostic and do not generate any tasks themselves.
>       When an element like a Queue/PollDevice/ToDevice schedules a task and
>     a packet is available, then this task will run through the entire chain
>     of elements until it gets into another Queue/PollDevice/ToDevice
>     element.  (Click SMP paper). So in order to what you are proposing, you
>     would have to interrupt a Click thread in the middle of execution of
>     some task and then to start a new one.  (obviously you have to remember
>     the state so that you can come back).  I don't think this would be easy
>     to do, as I don't think the executing threads (RouterThread) are
>     designed to be interrupted.
> 
>     Hopefully Eddie will shine more light on this.
> 
>     Roman
> 
>     Egi, Norbert wrote:
>      > Hi,
>      >
>      > We are using Click for desinging a shared forwarding engine with
>     separate forwarding paths (chain of elements) per customer. The
>     customers share all the NICs, so after the packets are polled out
>     from the NIC's queue a Classifier demultiplexes them by emitting
>     them to the proper forwarding path. Our intention is to provide a
>     fair CPU scheduling for each of the forwarding paths. The stride
>     scheduling algorithm, implemented in Click, would be a perfect
>     solution for our problem, but after checking the source code and the
>     available documents I found out that the algorithm hasn't been
>     implemented completely as it was proposed. If I understand it
>     correctly from the source and its comments, there is no such thing
>     like "quantums" ( i.e. a discrete time slice when the scheduled task
>     is entitled to use the CPU) and I guess that's the main reason while
>     the operation of the elements can not be interrupted.
>      >
>      > In the first comment of lib/task.cc it's mentioned that this may
>     be addressed in the future, so I was wondering whether anyone is
>     working on it and I may jump in and help or just could someone
>     provide information on how to make elements interruptable the
>     fastest way extending the current version of the code.
>      >
>      > Regards,
>      > Norbert
>      >
>      > _______________________________________________
>      > click mailing list
>      > click at amsterdam.lcs.mit.edu <mailto:click at amsterdam.lcs.mit.edu>
>      > https://amsterdam.lcs.mit.edu/mailman/listinfo/click
>      >
> 
>     _______________________________________________
>     click mailing list
>     click at amsterdam.lcs.mit.edu <mailto:click at amsterdam.lcs.mit.edu>
>     https://amsterdam.lcs.mit.edu/mailman/listinfo/click
> 
> 


More information about the click mailing list