FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

RISC-V IOMMU の構成についてマニュアルを読んでまとめる (2. 使用モデル)

前回:msyksphinz.hatenablog.com

github.com

RISC-V IOMMUの構成について、概略をざっくり理解するためのメモ。

何回か読もうとして挫折してきたので、もう一度ちゃんと読んでみようと思う。


1.2 使用モデル

IOMMUは、非仮想化OSにおいて以下の主要なシステムレベルの機能を提供できる:

  • 誤動作するデバイスからの不正なメモリアクセスからOSを保護する。
  • 64ビット環境で32ビットデバイスをサポートする(バウンスバッファの回避)。
  • 断片化された物理アドレスへの連続した仮想アドレスのマッピングをサポートする(スキャッター/ギャザーリストの回避)。
  • 共有仮想アドレッシングのサポート。

IOMMUがない場合、デバイスは特権メモリを含むあらゆるメモリにアクセス可能であり、ハードウェアやデバイスドライバのバグ、または悪意のあるソフトウェアによって意図しない破損を引き起こす可能性がある。 IOMMUは、デバイスがアクセスできるメモリを制限することで、このような問題を防ぐメカニズムを提供する。OSはIOMMUをページテーブルで構成し、IOVAを変換してアクセス可能なアドレスを制御できる。

図は本論文より引用

レガシーな32ビットデバイスは4GiB以上のメモリにアクセスできないが、IOMMUのアドレス再マッピング機能により、デバイスは適切なアクセス許可があればシステム内の任意のアドレスに直接アクセス可能である。 IOMMUがない場合、OSはバウンスバッファを使用してデータをコピーする必要があり、システムパフォーマンスを低下させる。

IOMMUは、連続した仮想アドレス範囲を断片化された物理アドレスにマッピングできるため、スキャッター/ギャザーDMAの実行に便利である。 また、共有仮想アドレッシングをサポートすることで、デバイスとプロセスアドレス空間を共有し、DMAに使用される仮想アドレスをIOMMUがSPAに変換する。

非仮想化OSでIOMMUを使用する場合、必要なアドレス変換と保護機能は第一段階で十分であり、第二段階はBareに設定できる。

1.2.2 ハイパーバイザ

IOMMUは、仮想マシン上で動作するゲストOSが、ハイパーバイザの介入を最小限に抑えてI/Oデバイスを直接制御できるようにする。 ゲストOSが制御するデバイスはゲスト物理アドレスでプログラムされる。 デバイスがメモリアクセスを行うとき、IOMMUはハイパーバイザが提供するアドレス変換データ構造を参照し、ゲスト物理アドレスをスーパーバイザ物理アドレスに変換する責任を負う。

図は本論文より引用

ハイパーバイザは、各デバイスに対して第二段階のページテーブルを設定し、デバイスがアクセスできるメモリを対応するVMのメモリに制限する。 ゲストOSが制御するデバイスからのMSIを処理するため、ハイパーバイザはIOMMUを構成し、それらのMSIをIMSIC内のゲスト割り込みファイルやメモリ常駐割り込みファイルにリダイレクトする。 IOMMUは、ハイパーバイザが提供するMSIアドレス変換データ構造を使用してMSIのリダイレクトを行う。

図は本論文より引用

1.2.3 ゲストOS

ハイパーバイザは、ハードウェアエミュレーションやソフトウェアインターフェース(パラ仮想化)を通じて、ゲストOSに仮想IOMMU機能を提供できる。 ゲストOSは、仮想IOMMUが提供する機能を使用し、非仮想化OSと同様に第一段階のページテーブルを管理して利点を享受できる。 ハイパーバイザは仮想マシンのアドレス空間を仮想化し、デバイスからのメモリアクセスをVMに関連するメモリに制限するために第二段階のページテーブルを確立する。

二段階のアドレス変換が有効な場合、ゲストOSが管理する第一段階のページテーブルでIOVAがGPAに変換され、ハイパーバイザが管理する第二段階のページテーブルでGPAがSPAに変換される。

図は本論文より引用

IOMMUは、デバイスに対して第一段階および第二段階のページテーブルを使用してアドレス変換を実行するよう構成される。第二段階は通常ハイパーバイザによって使用され、GPAをSPAに変換し、デバイスのアクセスを対応するVMのメモリに制限する。第一段階は通常ゲストOSによって構成され、VAをGPAに変換し、デバイスのアクセスをVMメモリのサブセットに含める。

ホストOSやハイパーバイザは、デバイスを保持し、必要なアドレス変換と保護機能を第一段階で提供し、第二段階はBareに設定することもできる。