Very cool! The idle loop needs to know an estimate of when the next cyclic will fire. We currently look at the cy_expire field of the top cyclic on the cpu's cyclic heap to see when the next cyclic will fire. Can we still use the cy_expire field of the 2 cyclics used for callout's for this? (e.g. when the interval is set to infinity, will cy_expire also be set to infinity?)
I would like to see the design doc and webrev if possilble. :-) Thank you, Bill Madhavan Venkataraman wrote: > Bill Holler wrote: > >> Hi Tesla Dev, >> >> Where will callouts live in the tickless world? >> Will callouts become a "one shot" cyclic? >> >> cyclic_fire() currently reschedules each cyclic; it does not >> have "one shot" support. >> >> A prototype moves the next cyclic from one cpu to a >> different cpu to trigger cbe_fire() with a cross call. >> This is an alternative to using the HPET interrupt to trigger >> cbe_fire() on a deep C-state idle cpu when the local APIC >> is not working. A very small amount of code had to be >> added in cyclic_fire() to remove the "one time" cyclic from >> the remote cpu's cyclic heap after cyclic_retire() because >> there is no concept of a one-shot cyclic. >> >> Bill >> >> >> >> >> >> _______________________________________________ >> tesla-dev mailing list >> tesla-dev at opensolaris.org >> http://mail.opensolaris.org/mailman/listinfo/tesla-dev >> >> > I am currently working on the Tickless Callout stuff. Infact, > it will be code complete in a week's time. I will provide > your team with the latest design doc and webrev if you > are interested. > > In the new design, callouts are maintained in a heap. There is > one heap corresponding to each CPU. All timeouts issued from > a CPU get queued in the CPUs heap. > > There is one cyclic per CPU for realtime callouts and one > for normal callouts. The cyclic works off of the heap and picks > the earliest one and programs itself. A new cyclic API function > cyclic_reprogram() has been defined to allow reprogramming of > a cyclic. The callout cyclic handlers use this function to reprogram > their next expire. > > My changes also support one-shot timers (in effect). If the interval > for a cyclic is specified as infinity (INT64_MAX), then the cyclic > subsystem recognizes that and programs the cyclic to infinity. > So, the cyclic drops to the bottom of the cyclic heap and just stays there. > Of course, this is not a perfect one-shot. But removing one-shots from > the cyclic heap and reinserting them is just extra overhead and > does not seem warranted at this time. > > If you have any questions and/or would like more information, let me know. > BTW, I am working with Eric Saxe and Sasha on this one. They are reviewers > for the callout stuff. > > Madhavan > _______________________________________________ > tesla-dev mailing list > tesla-dev at opensolaris.org > http://mail.opensolaris.org/mailman/listinfo/tesla-dev >
