バックナンバーはこちら

today&tomorrow

Technology Update

2018 vol.110

バーチャル・プロトタイプを使用した組込みソフトウェアのデバッグ

ハイパーバイザと割り込み

ハイパーバイザ・ソフトウェア・レイヤは、ハードウェアとペイロード・ソフトウェア(Linux/Androidなど)が互いに直接通信するのを防ぐシールドの役割を果たします。ここでLinux/Androidを「ペイロード」と呼んでいるのは、これらがユーザーの実行しようとしているソフトウェアであるという意味です。ハイパーバイザが必要な理由について、ここでは割り込みを例に説明します。1つのシステムで複数のゲストOSを実行する場合を考えてみましょう。ハードウェアから発生する割り込みは、どちらのOSに対するものか分かりません。したがって、システムからの割り込みをまずハイパーバイザが横取りして、どちらのゲストOSに対するものかを判定する必要があります。

big.LITTLEプロセッシングの場合はその反対に、複数のプロセッサ・クラスタが同じ割り込みコントローラを共有します。ハイパーバイザはOSからクラスタを隠蔽し、タスク・マイグレーションを実行します。しかしハイパーバイザは自分自身の割り込みを必要とし、OSと干渉しないようにする必要があります。

ハードウェア・サポートによる割り込み仮想化

Armのプロセッサには、ハイパーバイザ内で割り込みをトラップできるようにする専用のハードウェア・サポートが用意されています。プロセッサのハイパーバイザ・モードでは、より特権レベルの高い例外ベクタにより、OSが応答する前に割り込みをトラップします。つまり、受信した割り込みはハイパーバイザによって最初に処理されます。この割り込みがOSに対するものであれば、ハイパーバイザは仮想化した割り込みコントローラを構成します。この割り込みコントローラは、OSからは実際の割り込みコントローラの複製に見えます。この後、OSはあたかもハイパーバイザが介在していないかのようにその割り込みを処理します。ここではMMU(メモリー管理ユニット)の仮想化も重要な役割を果たします。

ハードウェアで発生した割り込みは、ハイパーバイザとOSを経由してようやくユーザー・アプリケーションに到達します。バーチャル・プロトタイプを使用すると、図29に示すようにシステムのあらゆる側面を観測およびトレースできるため、このチェーンのデバッグに非常に役立ちます。

画像

図29:ハイパーバイザとLinuxの統合トレース

このように何が起こっているのかを全体的に俯瞰して、どこで問題が発生しているのかを評価できると、割り込みがどこで止まっているのか、ハイパーバイザで止まっているのか、割り込みコントローラまで到達していないのか、といったことを調べるのに非常に役立ちます。バーチャル・プロトタイプならすべてのソフトウェア・レイヤ、そしてハードウェアさえもいつでもトレース、デバッグしてソフトウェア統合のバグをピンポイントで特定できます。開発者はどのCPUが現在アクティブなのかを常に意識しながら、実際の割り込みがハードウェアから到達した時点を見つけ、ハイパーバイザからAndroidまでシステム内の多くのソフトウェア・レイヤをトレースできます。バーチャル・プロトタイプのトレースおよびデバッグ機能は、下層のCPUモデル(Arm Fast Model)によって示されるモードを追跡してハイパーバイザ・レイヤを認識します。

しかも、デバッグ機能は組込みソフトウェア・デーモンに依存していないため、いつでもデバッグ・サービスを利用できます。これはハイパーバイザとLinuxカーネル間の連携をデバッグするのに非常に役立ちます。1つのCPUがパワーダウンしてもう1つのCPUがパワーアップしているようなフェーズでも、デバッグとトレースを何の制限もなく実行できます(図29)。

画像

図30:マルチクラスタ・デバッグ

このフェーズは非常に複雑で、1つのCPUがコンテキスト全体を保存した後、もう1つのCPUがこれを復元する必要があります。たとえばセキュア・モード・レジスタを保存するのを忘れてコンテキストが完全に保存されていない場合など、不具合の場所があいまいで特定が困難なことがあります。図30では、パワーダウンしているCortex-A15クラスタに1つのデバッガ・インスタンスを接続すると同時に、パワーアップしているCortex-A7にもう1つのデバッガ・インスタンスを接続しています。

まとめ

本稿では、組込みソフトウェアのデバッグに関するバーチャル・プロトタイプの幅広い機能についてご紹介しました。

バーチャル・プロトタイプの優れた可制御性と可視性を活かすことで、これまでとは違った高生産性のデバッグ・ソリューションが実現します。本稿では、シングルコアおよびマルチコアのハードウェア/ソフトウェアの例を挙げ、確定性の高いデバッグ実行方法を見てきました。これにより推測の余地が小さくなり、リスクの大きい試行錯誤のアプローチを避けることができます。まずはシノプシスのVirtualizer™ Toolsetの評価版からお試しいただくことをお勧めします。Versatile™ Express for Arm Cortex-A15 MPCoreの教育用バーチャル・プロトタイプは、クラウドのバーチャル・マシンにアクセスしてご利用いただけます。

カテゴリートップ