2023年11月24日
論理的手腕が試される、リアルタイム組み込みシステム

エレベーター、信号機、洗濯機の給水弁などの制御からトースターの焼き加減まで、組み込みコンピューティングはあらゆるところで利用されています。
リアルタイム組み込みシステムは、タイトなスケジュールで重要なプロセスを完了させることが求められる組み込みコンピューティングのサブセットです。たとえば、自動車のエアバッグを膨らませるシステムを考えてみてください。マイクロコントローラが衝突を検知し、0.02~0.04秒という速さでエアバッグを電子的に作動させます。衝突の検知からエアバッグ作動までに時間がかかってしまうと大事故につながります。
そのため、リアルタイム組み込みシステムは、自動運転や飛行制御、ロケットの打ち上げ装置など、絶対の信頼性が求められるアプリケーションに紐づけられることがよくあります。しかし、こういったシステムはあらゆるストレージデバイスの心臓部でもあるのです。そして、本質的に妥協が許されないことから、エンジニアにとって過酷でありながらも心躍る挑戦の場となっているのです。

組み込まれた「組み込みシステム」

Udi Shnitzerは、イスラエルのウエスタンデジタルで、リアルタイム組み込みファームウェアエンジニアリングのシニアマネージャーを務めています。彼の説明によると、すべてのフラッシュストレージデバイスは、リアルタイムで一定のデータレートをサポートする必要があります。これは、1秒あたりのメモリーへのトランザクション数、または1秒あたりのデバイスを介して転送されるメガビット数によって測定されます。
「1秒間に4ギガビットをフラッシュに書き込めるとコミットしても、1メガビットあたり平均1/400秒で書き込めなければ、システムは耐えられないでしょう」とShnitzerは述べています。
リアルタイムソフトウェアに20年以上携わってきたベテランのShnitzerは、このエンジニアリングの難易度に匹敵する技術は恐らくないだろうと考えています。

「リアルタイム組み込みシステムは、極端に限られたリソースで時間的制約のあるタスクを完了されなければならないため、ハードウェア設計やファームウェアプログラミングにおいて極めて困難な課題をいくつか生み出します」

と彼は話しています。
コンピュータやサーバーのストレージやメモリーの容量を増やすことは比較的簡単ですが、組み込みシステムではそのような贅沢はできません。決められたわずかなリソースで動作させるしかありません。
「それには豊かな創造力が必要になります。」とShnitzerは説明しています。「割り当てられるメモリー量が非常に限られているため、コード行が多いアプリケーションは書けません。その中で大変複雑な処理をしなければなりません。だからこそ、革新的な創造力を駆使して、効率的にコーディングする必要があるのです」。

エンジニアリングのシャーロックホームズ

Shnitzerとそのチームは、自動車からスマートフォン、IoTデバイスまで、あらゆるものに搭載されているウエスタンデジタルのiNAND製品を担当しています。その製品が持つ偏在性、組み込み製品であること、およびグローバル性が故に、特にデバッグに関してもいくつかの固有の課題を抱えています。
一般的なソフトウェアは、コンピュータ上でデバッグできます。また、アプリケーションであればモバイルデバイス上で実行することもできますが、組み込みソフトウェアではそうはいきません。もし韓国で自動車に組み込まれたフラッシュコンポーネントに問題が発生した場合、Shnitzerが韓国の自動車メーカーまで行って解決するわけにもいきません。こういった問題を解決するには探偵のような才能が必要になります。
「とにかく情報がなければ、問題を理解することさえできません」とShnitzerは述べています。「つまり、必要な時に解決につながる糸口を得るためには、デバイス上にリアルタイムでどのようなデータを保持すべきかを事前に知っておかなければなりません」。
初期の厳密なメモリー制約を守りながら、熱応力や電子干渉などの手がかりを使って解決する必要があります。データを効率的に収集する方法を見つけるためには、スキルと経験が不可欠なのです。

論理と推論の手腕

インドのバンガロールを拠点とするウエスタンデジタルのファームウェアエンジニアリング技術者であるSowjanya Sunkavelliは、リアルタイムの組み込みファームウェアをデバッグするのは、論理パズルを解くようなものと言います。「ソフトウェアプログラミングとは異なり、実際に起こっていることを視覚的に捉えることはできません」と彼女は述べています。「したがって、何か問題が生じたら、ランタイム時に収集した手がかりと我々のロジックを基にして結論を導き出す必要があります」。
Sunkavelliは、ウエスタンデジタルのUSBデバイスやSDカード製品のリアルタイム組み込みシステムに取り組んでいます。Shnitzerが担当しているiNAND製品やSSDと比較すると、通常USBデバイスはリアルタイムの制約がそれほど厳格ではありません。しかし、これらの製品には、それに劣らずエンジニアリングの超絶技巧を必要とする独自の課題があります。

「指の爪ほどの小さなmicroSDカードには、スマートフォンから写真をコピーするためだけにバックグラウンドで実行される数百万行ものコードが収まっています」

とSunkavelliは語っています。
この小さな形が問題をさらに複雑にします。USBやSDカードに入っているRAMは極端に小さいのです。また、これらを使ったデバイスは手頃な価格で提供することを目指しているため、できるだけチェックと計算処理に必要なRAMを1バイトでも減らすことでコストを削減しています。
さらに、これらのデバイスはグレードの低いメモリーを使うことが多いので、リアルタイム処理に加えて、追加のエラー対応とメモリー操作も必要になります。
「こうした機能を実現するには、他のフラッシュ製品にはないイノベーションが必要になります」とSunkavelliは説明しています。データがNANDに正しく書き込まれたことをチェックする余分のコード行はすべて、限られたRAM容量内に何とか収める必要があります。
リアルタイム組み込みシステムを設計する核心について、Sunkavelliは、厳選された巧妙なアルゴリズムを必要とする、永遠に続く制約のパズルだと形容しています。「最小限の動作で最大の結果が得られるアルゴリズムが求められます」と彼女は付け加えます。「デバイスが実際に書き込み動作をする前に、どれほど多くのプロセスが必要で、そこにはどれだけの特許が含まれているのかを知ると、きっと驚かれることでしょう」。

リアルタイム組み込みシステムの並行性

リアルタイム組み込みシステム内のタスクとレイヤーの並行性は、システム設計において最もやっかいな部分です。エンジニアはあらゆることを念頭に置くことが求められます。たとえば、ブートファームウェア、デバイスドライバー、複数のクロック、タイマーとインターフェイス、組み込みOS、適応レイヤー、ハードウェアアクセラレータなどです。
「何を最優先にするか判断を迫られます」とSunkavelliは述べています。「しかし、別のレイヤーやユーザーコマンドが割り込んでくる可能性が常にあることを忘れてはいけません。そこで、それぞれのレイヤーは他からのリクエストをチェックするバッファを備え、そのリクエストを考慮し優先順位を決められるシステムを構築する必要があります。このリクエストを無視するレイヤーがたった1つでもあれば問題が起きてしまうからです」。
Shnitzerにとって、リアルタイム組み込みシステムにとって脅威になるのがマルチスレッドプログラミング(※)です。「それは2人が皿の上の1つのケーキに同時に手を延ばすようなものです」と彼は説明します。人の場合は身振りや言葉で解決策を見出せますが、リアルタイム組み込みシステムでは、いわゆるコリジョン、衝突事故が起きてしまいます。
「どのタスクが最初にリソースに到達する優先度があるかを明確に定義しないと、システムは停止してしまうでしょう。さらに悪いことには、意図したものとは真逆の予期せぬ動作や振る舞いをする可能性もあります」とShnitzerは警告しています。
これらの製品には高い信頼性が求められます。「モバイル、コンピュータ、人工知能などの業界は、ウエスタンデジタルのシステムを基盤にしています。ユーザーに影響する問題がメモリーチップに発生した場合、製品ライン全体が破綻する危険性があります」とShnitzerは指摘しています。

誤動作は許されない

エアバッグシステム、フライトコントローラー、フラッシュデバイスなど何であれ、リアルタイム組込みシステムのあらゆる実行シナリオは、確固たる予測能力を持って設計する必要があります。
ウエスタンデジタルでは、SunkavelliやShnitzerのような、数百人のリアルタイム組み込みソフトウェア担当エンジニアが、新しいアルゴリズム、データスキーム、メモリー処理機能の開発に取り組んでいます。決して消費者の目に触れることはありませんが、彼らの独創性が素晴らしい製品を生み出す上で大きな役割を果たしているのです。

※マルチスレッドプログラミング…単一のプログラムで複数のスレッドを同時に実行すること。

著者:Ronni Shendar Ronni Shendar
※Western Digital BLOG 記事( NOVEMBER 3, 2022)を翻訳して掲載しています。原文はこちらから。

戻る