2010年6月14日月曜日

ticklessなkernel

 

ノートPCや組み込み用のkernelでよくよくお世話になる、
tickless(CONFIG_NOHZ)のお話です。

 

LinuxのKernelは、定期的なtimer割り込みによって、
schedulerの管理をしています。

その定期的なtimer割り込みの単位をtickっていう言い方をして、
tickを格納している変数がjiffiesです。

timer割り込みの間隔は、CONFIG_HZによって設定されていて、
100HZ, 250HZ, 1000HZから選べるようになっているはず。
(Targetによって違いがあるかも)

仮に100HZとなっていたら1秒間に100回、つまり10msに一回の
timer割り込みが入り、その度にtickがカウントされるという仕組み
になっています。

 

定期的に割り込み処理が入り、schedulerが呼ばれますから、
当然idleの時間は短くなってしまいます。
(何もしなくても、ね)

そうなると、消費電力を気にするモバイル機器にとっては、
邪魔者以外何物でもなくなります。

 

そこで登場したのがtickless。

tickless(CONFIG_NOHZ)では、timer割り込みは動作せず、
scheuleは他の割り込みから呼ばれることになります。

jiffiesも同じタイミングでカウントされる為、定期的なカウントアップはしませんが、
時間管理として使用できるようにきちんと補正しています。

そーすることで、定期的に起こる無駄な処理を省き、idle時間を長くすることで、
消費電力を抑えることができます。

 

っとまぁ、こんな感じのものです。

自分で選んで使用してる癖に、度忘れしてしまっていたので、
思い出しながら書いてみました。

0 件のコメント:

コメントを投稿