clockevents
Linux カーネルには clockevents というフレームワークがあるのだけど、LWN.netの記事を見る限り、どうもハードウェアタイマのドライバを書くためのフレームワークという認識が正しいみたいです. もっとレイヤの高いものだと思っていたんだけど.
話が変わりますが、この記事の中に興味深い一文があります.
Clockevents and dyntick
The implementation leaves room for further development like full tickless systems, where the time slice is controlled by the scheduler, variable frequency profiling, and a complete removal of jiffies in the future.
tick をなくすとな! 大変面白い試みだと思います. 難しいのは、現在の Dynamic Ticks が hrtimer に依存しているところかな. 現在の Dynamic Ticks の仕組みは、
- cpu_idle()というメインループの中で、タスクがなければ hrtimer を発行して cli,hlt する.
- 時間がくると、 hrtimer が fire して寝ているCPUを叩き起こし、schedule()を呼ぶ.
という感じになっています*1.
さて、自分が起きるために hrtimer を発行すると書きましたが、このために BSP(Bootstrap Processor) は必ず毎回タイマ割り込みをハンドルする必要があります. つまり、hrtimer を正しく fire (点火)するために、BSP は Dynamic Ticks の対象には入っていないってことです. これを直すとなると、かなり大幅な修正が必要になるような気がします. 加えて、jiffies を直に使ってしまっているコード(特にドライバ!)が多いので、jiffies なくします!といってサクっとなくせる雰囲気でもない感じです. さて、どうするのがいいのだろう...?
*1:読み間違いをしていなければ^^;