1. HW-RTOSについて
HW-RTOSは、リアルタイムOSをハードウェアで実現した、ルネサスエレクトロニクスのオリジナル技術です。HW-RTOSは約30種類のシステムコールをサポートしており、これら全てがハードウェアにより実装されております。ハードウェアにより実現することにより、 従来のソフトウェアRTOSに比較し極めて高いRTOS性能を提供します。具体的には、
- 高速かつバラツキの少ないシステムコールの実行時間
- 高速かつバラツキの少ない割込み応答性能
- 極めて短い割込み禁止期間
を実現します。従来のソフトウェアRTOSと異なり、最悪実行時間を規定することが可能です。これはリアルタイムシステムの設計を容易にします。
HW-RTOSは高性能なRTOSを提供するだけなく、組込みシステムのRTOSとして十分な機能を提供しております。HW-RTOSがサポートするシステムコールは以下の通りです。
- セマフォ
- イベントフラグ
- メールボックス
- CPUロック、ディスパッチ禁止
- スリープ/ウェイクアップ
- 強制待ち解除
- Readyキュー回転
- 優先度変更
2. システムコールの発行方法
HW-RTOSはシステムバス上の周辺モジュールの一つとして配置されます。HW-RTOSは図のようにHW-RTOSを利用するために、「システムコールレジスタ」、「引数レジスタ」、「結果レジスタ」を用意しています。ルネサスではこれらをアクセスするためにOSライブラリを用意し、利用者はOSライブラリのAPIを使って通常のソフトウェアRTOSと同様にシステムコールを簡単に発行することができます。
図のようなシステムコール(set_flg)が発行された場合、OSライブラリは引数を引数レジスタに、システムコールの種類をシステムコールレジスタに書き込みます。HW-RTOSはこれを受け、システムコールを実行し、戻り値を結果レジスタに書き込ます。OSライブラリはAPIを介して戻り値を発行アプリケーションに伝えます。
システムコールを実行した結果、タスク切換が必要な場合があります。このとき、HW-RTOSはタスク切換が必要である旨および次に実行すべきタスクIDを結果レジスタに書き込み、OSライブラリに伝えます。OSライブラリはこれに伴いソフトウェアにより、コンテキストスイッチを実行します。
3. Tickオフローディング
RTOSではソフトウェアで時間を計測しています。例えば、あるタスクがスリープし、1秒後に再起動する場合、RTOSはこの1秒を測定しなければなりません。このように時間計測のためのソフトウェアが周期的に起動されます。これがTick処理です。図のように、Tickを実現するため、周期割込みが必要です。
Tickは必須機能ですが、以下3つの弊害があります。第一に、図のように周期的にアプリケーションが中断されるわけであり、CPUの使用効率が低下します。第二に、Tickは極めてクリティカルな処理を行っているため、割込み禁止状態になるのが一般的です。従って割込み応答性能が劣化します。第三にTick処理をソフトウェアで実現する必要があるため、Tick周期は極端に短くできない、すなわち高精度な時間管理はできないと言うことが言えます。
一方HW-RTOSでは、Tick処理を完全にハードウェア化しました。これをTickオフローディング機能と言います。HW-RTOS内で、Tick処理が実行されます。したがって、Tickのための周期的な割込みの必要がなくなりますし、CPUはTick処理をする必要がなくなります。図のように、CPUは常にアプリケーションソフトウェアを実行することができ、唯一中断されるのは、タイムアウトによるコンテキストスイッチが発生した時のみです。また、Tick処理は大変高速に実行されるため、Tick周期を短くすることができます。以上のようにTickオフローディング機能により、従来のソフトウェアに比較し以下のアドバンテージを得ることができます。
- Tick処理によるCPU効率低下がない
- Tick処理による割込み禁止期間がない
- Tick精度の大幅向上
4. ハードウェアISR (HW ISR)
割込みが発生すると、インターラプトサービスルーチン (ISR) が起動されます。ISR実行中は割込み禁止状態になるのが一般的です。上の図では割込みの種類により交互にISR1とISR2が起動しています。
もし、ISR1の処理が長引くと、下の図のように他の割込みを取りこぼしたり、遅延したりします。リアルタイムシステムでは割込みの取りこぼしはあってはならないことですし、遅延も避けたいところです。
このような問題を避けるため、一般的には以下の様な手法をとります。
図のように、ISR1の処理はタスク1に、ISR2の処理はタスク2に引き継ぎます。タスクは割込み禁止にはなりませんので、他の割込みを影響を与えることはありません。
引き継ぐ方法は以下の通りです。タスク1はフラグ待ちとし、割込み1が発生した時、ISR1ではタスク1の「待ち解除」をするためのシステムコールを実行します。
このようにすることにより割込み処理が、他の割込みへの影響を最小限にすることができます。
「割込みが発生したら、ISRでシステムコールを発行する」、これをもう少し詳しく見てみましょう。下図はこれを示しています。Task A実行中、割込みが発生したとします。
- RTOSはCPUのレジスタを入れ替え、ISRを起動します。
- ISRでは割込み要因をチェックし、その割込みに対応したシステムコールを発行します。
- このシステムコールを実行します。
- システムコールが終わると、ISRも終了します。
- システムコールの結果、Readyキューに変化が生じ、Task AよりISRの処理を引き継ぐTask Bのほうが優先度が高ければ、ディスパッチを実行し、Task Bを実行させます。
以上の流れになります。しかし、この処理はかなり複雑で、一般的には500サイクルから1,500サイクルもの時間が消費されます。
一方、HW-RTOSを使用すると、図のRTOSの処理はDispatch処理以外はハードウェア化されているので大変高速に処理されることになります。
すなわちISRの処理を高速化したのです。ISRは割込み要因に対応したシステムコールを発行するだけです。したがって、この部分をハードウェア化し、高速化しました。これをハードウェアISR (HW ISR) と言います。下図にこのタイミングチャートを示します。
- 割込みが発生し、HW-RTOSが動作開始します。HW-RTOSはHW ISRを起動します。
- HW ISRでは割込みに対応したシステムコールを発行します。
- 発行されたシステムコールをHW-RTOSが実行します。
- システムコールの結果、Readyキューに変化が生じ、Task AよりISRの処理を引き継ぐTask Bのほうが優先度が高ければ、ディスパッチを実行し、Task Bを実行させます。
以上がHW ISRによる割込み処理です。注目すべきポイントはHW-RTOSおよびHW ISRの処理中CPUはTask Aの処理をし続けることができると言うことです。したがって、CPUが中断されるのはタスク切換の期間のみになります。
下図は、前記4.において、ISR処理を引き継ぐべきTask BがReady状態になるものの、Task Bの優先度がTask A以下であった場合の例です。この場合はタスク切換の必要がありませんので、Task Aは処理をし続けることができます。割込みが発生してもCPUに全くオーバヘッドがかかりません。これは驚くべき事です。
以上がHW ISRの説明です。HW ISRを利用することにより以下の様なベネフィットを得ることができます。
- CPUの割込み時のオーバヘッドの大幅削減
- 割込み禁止期間の大幅削減
- コンテキストスイッチの回数の大幅削減
一般的なシステムにおいてはほとんどの割込みはHW ISRに置き換えることが可能です。迅速に実行したい処理はHW ISRで起動されるタスクの優先度を上げれば良いだけです。もちろん、HW-RTOSを利用し、従来のISRによる処理も可能です。
5. HW-RTOSの性能
システムコールの実行時間を示します。紫色が従来のソフトウェアRTOS、薄紫色がHW-RTOSの実行時間です。
HW-RTOSはソフトウェアRTOSに比較して、実行時間が短いだけでなく、あまり大きく変動しないことが特徴です。
この図はインタラプト応答の性能を示しています。割込みが発生してからISRが起動されるまでの時間と次のタスクが起動されるまでの時間を測定しました。ソフトウェアRTOSを使用した場合、測定する度に値が変化するのに対し、HW-RTOSでは一定であるのが大きな特徴です。またHW ISRを使用した場合は、大きな性能向上になることがわかります。
6. ネットワークとRTOS
パソコン用のCPUと違い、組み込みシステム用のCPUにTCP/IPを実装した場合、高いスループットを実現するのは大変困難です。市販のTCP/IPプロトコルスタックで送受信を実行させ、プロファイリングをとったものが上の図です。CPUで実行される処理のうち、複雑なプロトコル処理を行っている時間はわずか11%、その他の時間は「メモリコピー」、「ヘッダ並べ替え」、「TCPチェックサム」、「RTOS処理」を実行していました。このうち、 「メモリコピー」、「ヘッダ並べ替え」、「TCPチェックサム」はハードウェア化が容易であり、これを実現すると真ん中の図のようになります。しかしまだ、RTOS処理が大きなオーバヘッドになっています。TCP/IPのようなプロトコル処理はマルチタスクで実現されるため、パケットを一つ送信または受信するためタスクの切換が発生し、また複数のシステムコールが発生するためRTOSによるオーバヘッドが大きくなります。HW-RTOSはこの問題を解決します。HW-RTOSを使用することにより、下の図のように、大幅にCPU負荷を削減することが可能です。これはすなわち組み込みシステムのような非力なCPUを使用して高いネットワーク性能を達成することに他なりません。また、もしそれほど高いネットワーク・スループットが必要でなければ、低い動作クロックを使用することができ、大幅な消費電力の削減につながります。
図はR-IN32M3のブロック図です。R-INエンジンはHW-RTOS、Cortex®-M3、イーサネットアクセラレータより構成されます。イーサネットアクセラレータは、先に示した「メモリコピー」、「ヘッダ並べ替え」、「TCPチェックサム」を高速化するハードウェアです。R-INエンジンを使用することにより、TCP/IPを始めネットワークプロトコル処理を高速化することが可能になります。R-INエンジンは、R-IN32シリーズ、RZ/N1シリーズの全ての製品およびRZ/T1の一部の製品に実装されております。
この図は、R-IN32M3にUDP/IPを実装してスループットを測定した結果です。動作クロックは100MHz、Ethernetフレーム長は1500バイトです。一番上のバーは、HW-RTOSをOFFにしてソフトウェアRTOSを実装し、UDPチェックサムをソフトウェアで実行したものです。真ん中のバーは、チェックサムをハードウェア化、一番下のバーはさらにHW-RTOSをONにしたものです。このように、HW-RTOSを含むR-INエンジンはネットワークプロトコル処理高速化において大変効果があります。