MIPS 4Kのwaitインストラクション


MIPS 4KにはwaitというCPUをsleepさせて省電力を実現するインストラクションがあります。通常のLinuxやFreeBSDではカーネルモードでは使うことなくて、ユーザモードでは使えないインストラクションなはずです。勝手にユーザにCPU止められたら困りますよね。

試しにadm5120で測ってみました。

状態 mA
通常 504
wait 420

adm5120はSwitchなども入っているので、あまり小さくならないのかもしれませんが、ある程度の効果はあるようです。

waitから次の実行に移すには割り込みを上げる必要があります。割込みが上がりハンドラが呼び出された後にwaitの次のインストラクションが実行されます。

mruby on YABMではTimerとEthernetの受信割り込みを使っています。Timerは10msでEthernetは随時上がります。

waitを使うためにはEthernetの受信割り込みを止める、またはパケットが入ってこない設定にする、Timerを指定した時間、または長めに指定するなどにする必要があります。

MIPSは1本のTimerで時間も管理しているので、結構厄介です。

ちょっと複雑になるのと効果が薄そうなので、とりあえず実装しないつもりです。

この手の省電力はOSがある場合は使うのが非常に難しいですが、BearMetalの場合には考えれば使いようがあるような気もします。