ティックレス(Tickless)とは​何か?

コンピュータ用語として、「ティックレス」という言葉を目にしたことがあると思いますが、ティックレスとはどういう意味なのでしょうか。

ティック(Tick)という単語は、主に時計が時を刻むときに出す音の擬音語、または時計の針が時を刻む様の擬態語として使われています。身近なところで、TikTokは日本でも人気の動画投稿プラットホームです。昭和の人にはチックタックが馴染むでしょうか。

ティックレスは、システムの実行環境やOSの実装方針として使われる用語です。
それではティックレス(Tick-less)、文字通りに受け取れば「時を刻まない」とはどういうことなのでしょうか?

1. プログラムの動作とOSの時計機能

一般的に、OSやRTOSと呼ばれるソフトウェアは内部に時を刻む機能を持っており、これがOSやRTOS上で動作するプログラムに時間の経過を知らせる機能、実行のタイミングを計るためのアラーム機能を提供します。

マルチタスク環境では複数のタスクが同期・協調動作するので、OSの時計はオーケストラの指揮者のように機能します。もしOSに時計機能がなければ、楽士であるプログラムは、自分の演奏を'勘'で待つような状態になってしまいます。

すなわち、OSの時計機能はプログラムの動作にとって必須といえます。

2. OSの時計機能と周期割込み動作

それでは、一般的なOSの時計機能はどのように実現されているでしょうか?

古典的には、OSの時計は内部のカウンター変数として実装します。これを一定周期で動作するタイマ割込みルーチンにより、カウンター変数をインクリメントすることで時を刻んでいます。この周期割込み動作を「ティック(Tick)」と呼んでいます(図1)。

ティック間隔が短い程、高精度な時計機能を提供できます。

10ミリ秒のティックで動作する時計は、誤差は10ミリ秒です。1ミリ秒のティックで動作する時計は、誤差は1ミリ秒と精度が高くなります。1ミリ秒精度をハードリアルタイムと呼びます。

タイマ割込みのティック動作タイマカウンタ変数変数のインクリメント1ミリ秒周期のタイマ割込みタイムイベント時間経過?アプリケーションにタイムイベントを通知

図1 ティック動作

より詳しく技術や関連製品について知りたい方へ

お気軽相談

本コラムに関係する技術や関連する製品について知りたい方は、お気軽にご相談ください。

3. ティック動作と正確性

CPU動作のパフォーマンス向上の歴史に伴い、ティックも古典的なCPUの百Hz(10ミリ秒)動作から、1キロHz(1ミリ秒間隔)の精度で動作させることが一般的となりました。今後もCPUの高速化は続くと考えられます。一方、ティックの精度をあげるには、これまで以上にティック間隔を短くすれば良いのでしょうか?高精度な1マイクロ秒の時計が欲しい場合、1マイクロ秒でティック動作させればいいのでしょうか?

現状のCPU事情での答えはNoです。

ティック動作は、何にもブロックされることなく正確に時を刻むことが重要ですが、その一方でアプリケーションタスクの事情にお構いなしで割り込んで発生します(図2)。これは、本来の目的を達成するアプリケーションには余分なオーバヘッドとなりますし、目的を達成する最悪実行時間の予測にも不透明性をもたらします。電力消費の点では、アプリケーションが実行されていない時も、ティック動作で無駄に電力を消費することになります。

タスクBの実行タスクAの実行タスク実行アイドル期間アプリケーションの実行タイマ割込み実行

図2 フルティックカーネル動作

4. 電力消費とティック動作

4-1. アイドル時ティックレス

バッテリ駆動のデバイスでは、必要がない時にティック動作を止めることで電源を長持ちさせることができます。

そこで考えられたのが、アイドル時ティックレスです(図3)。これは、処理するタスクが動作しないときにティック動作を止める、というアイデアです。システムがアイドルの間は時間の進捗も止まりますが、電力消費も抑えられます。

オンデマンドでティック動作を再開した時には、アイドル期間の経過時間でOSの時計をプリセットします。組込みシステムの場合、外部イベント駆動によりアプリケーション動作のCPU負荷が最高に発生しますが、定常時はアイドルの割合が多いので、アイドル時ティックレスは省電力の点で利点があります。

ティック動作を止めると同時に、より複雑な周辺のクロックや電力供給の停止を行うことで、より省電性は高まります。

:このような高度なシステムのスリープを行うと、省電性は高まりますが、システム通常動作への復帰時間も増大するので、システムの応答要件に合わせてトレードオフする必要があります。

タスクAの実行タスクBの実行タスク実行アイドル期間アプリケーションの実行タイマ割込み実行アイドル時はティック停止

図3 アイドルティックレスカーネル動作

4-2. ティックレスカーネル

アイドル時ティックレスすることで、省電力の可能性が高まりますが、通常動作時のティック動作によるアプリケーションに対するオーバヘッドはなくなりません。さらに、ティックをより精度の高い高分解能時刻、例えば1刻みが1μ秒の高分解能なシステム時刻サービスやタイムイベントサービスが提供できれば、アプリケーションはより高精度な通信・機械制御を行うことができます。

1刻みが1μ秒の高分解能なシステム時刻を、ソフトウェアの定周期割込みで作成することは可能でしょうか?

現在でも主流となっているノイマン型(あるいはノイマン改良型)のCPUアーキテクチャでは、実現不可能です。1μ秒周期で割込みを入れた場合、1タイムスロットがほぼソフトウェアの定周期割込み処理で埋まってしまい、アプリケーションが動作する余地がありません。

そこで考えられたのが、カーネルのティック動作を止めるというアイデアです。これをフルティックレスと呼び、このように実装されたカーネルをティックレスカーネルと呼びます(図4)。

ティックレスカーネルではCPUと並列動作するハードウェアタイマカウンターによりシステム時刻を管理し、アプリケーションに1μ秒単位の高分解能なシステム時刻サービスを提供します。

また、タイムイベントもハードウェアタイマによりオンデマンドで発生する1μ秒精度のタイム事象割込みをアプリケーションに通知します。

ティックレスカーネルでは、実行中に定期的なティック割込みが発生することはなく、システム全体の負荷を低減します。また、アプリケーション動作中に無駄なオーバヘッドを発生させません(図5)。無駄なオーバヘッドが除去されることより、最悪実行時間の見積りの不透明性を低減します。またシステム全体の負荷が低減するのでデバイスの省電力性能にとっても優位です。

ティックレスカーネルアプリケーション高精度な時刻参照機能を提供1μ秒単位で時を刻むハードウェアタイマカウンタ(32bit/64bit)オンデマンドで発生するタイムイベント割込みタイムイベント通知

図4 フルティックレスカーネルの実装

タスク実行アイドル期間アプリケーションの実行オンデマンドでタイマイベント割込み発生タスクBの実行タスクAの実行

図5 フルティックレスカーネル動作

5. ティックレスカーネルを実装したμITRON仕様カーネルTOPPERS

日本で多くのハードリアルタイムシステムで利用されるμITRON仕様カーネルは、カーネルがティック動作することを前提としています。μITRON仕様を継承したTOPPERS新世代カーネルも1ミリ秒をシステム時刻単位とし、カーネルがティック動作するよう設計・実装されています。

TOPPERSの第3世代カーネルは、下記の理由から、高分解能時間単位(1μ秒)でシステム時刻を管理し、ティックを廃止したティックレスカーネルとして実装した仕様となっており、これにより高精度タイマサービスを実現しています。

  • 従来のハードリアルタイム処理では1ミリ秒の分解能で十分であったことが、より高分解能な時間処理がソフトウェアから求められる
  • ティック動作のオーバヘッドから、高分解能な時間をソフトウェアで作成することは不可能

RTOSカーネルの高精度タイマ機能は、これまでハードウェアやFPGAロジックでしかできなかったことを、ソフトウェアで実現できる可能性を秘めています。

より詳しく技術や関連製品について知りたい方へ

お気軽相談

本コラムに関係する技術や関連する製品について知りたい方は、お気軽にご相談ください。


製品情報

RTOSソリューション

TOPPERS-Proシリーズ

TOPPERSカーネルベースの開発プラットフォームを提供
製品ページを見る

TOPPERSカーネルの時間パーティショニング機能の概要

コラムを読む

TOPPERSカーネルのメモリ保護機能の特長と、高信頼性システム開発のポイント

コラムを読む

マルチコア/マルチOS環境でのデバイス共有/コア間・OS間通信

コラムを読む

組込みLinuxの生存確認(死活監視)

コラムを読む

組込み向けハイパーバイザーSafeGの詳細解説

コラムを読む

シングル/マルチコア上でLinux/Androidの高速起動とリアルタイムOSを協調動作

コラムを読む