IOMMUが取り扱うべきアドレスについてまとめよう。CPUには通常仮想アドレス(Virtual Address: VA)と物理アドレス(Physical Address: PA)が定義されている。
しかし、ハイパーバイザが入ってくると話は別になってくる。ハイパーバイザは、ユーザソフトウェアとシステムソフトウェア(オペレーティングシステム)に加えて、ハイパーバイザが入ってくる。 つまり、OSが使っているアドレス空間は本当の物理アドレスではなく、ハイパーバイザによりさらに仮想化されている、というケースを考えるわけだ。 これにより、ハイパーバイザが導入されたRISC-V CPUでは、2段階のアドレス変換を考慮する必要がある。つまり:
- 第1段階: 仮想アドレス (VA) → ゲスト物理アドレス (GPA)
- 第2段階: ゲスト物理アドレス (GPA) → スーパバイザ物理アドレス (SPA)
IOMMUでは、これらのアドレス変換を独立に制御することができる。システムの構成に寄って、第1段階・第2段階の変換を行うかどうかを制御できる。
| 第1段階 | 第2段階 | 説明 |
|---|---|---|
| Bare | Bare | 変換は行わない。状況としてはCPUも直接物理アドレスを使っている状態であり、Bare Metalソフトウェアが動いているような状況と思われる。 |
| Bare | !Bare | GPA → SPA のみの変換を行う。状況としてはハイパーバイザ上で動いているOSが仮想アドレスを使用しない状態で使われる。 |
| !Bare | Bare | VA → GPAのみの変換を行う。ハイパーバイザが存在しないか、ハイパーバイザ上で動作するOSが直接IOMMUをコントロールする場合がこれに相当する |
| !Bare | !Bare | VA → GPA → SPAの2段階の変換を行う。仮想マシン上のソフトウェアがIOMMUを通じてデバイスを制御する場合がこれに相当する。 |