RISC-V IOMMUの構成について、概略をざっくり理解するためのメモ。
仕様書の構成:
- 導入:IOMMUの概要、用途、配置とデータフロー、および主要機能。
- データ構造:デバイスディレクトリテーブル(DDT)、プロセスディレクトリテーブル(PDT)などのデータ構造と、IOVA変換プロセス。
- メモリ内キューインターフェース:コマンドキュー、フォルト/イベントキュー、ページリクエストキューなど。
- デバッグサポート
- メモリマップされたレジスタインターフェース
- ソフトウェアガイドライン
- ハードウェアガイドライン
IOMMUによって実現できること
- デバイスのメモリアクセスの仮想化: IOMMUは、デバイスが直接アクセスする物理メモリアドレスを、仮想アドレスにマッピングする。異なるプロセスやオペレーティングシステムが同じハードウェアリソースを共有しながら、独立したメモリ空間を持つことができるようになる。
- セキュリティ強化: 不正なメモリアクセスを防ぐためのアクセス制御を提供する。これにより、DMA(Direct Memory Access)を使用するデバイスが、システムメモリの許可されていない領域にアクセスすることを防ぐ。
- 入出力性能の向上: デバイスのDMA操作によるメモリアクセスが最適化され、システム全体の入出力性能が向上する。
- エラー処理と隔離: デバイスからのメモリアクセスエラーを検出し、隔離する機能を提供する。
- 共有仮想メモリ(SVM): CPUとデバイス間でメモリページを共有することを可能にする。これにより、デバイスとCPU間でのデータコピー操作を減らすことができる。
つまり、IOMMUは、DMA対応I/Oデバイスとシステムメモリを接続するシステムレベルのMMUである。 各I/Oデバイスに固有のコンテキストを提供し、独立したOSごとに個別の設定をサポートする。 効率的なメモリ管理のために、CPUのMMUと類似したページテーブル形式を使用して二段階のアドレス変換を行う。 共有仮想アドレッシングや高度な割り込み処理などの機能もサポートし、デバイスとメモリの相互作用における性能とセキュリティを強化する。
用語の定義
用語 | 定義 |
---|---|
AIA | RISC-V Advanced Interrupt Architecture |
ATS / PCIe ATS | Address Translation Services: A PCIe protocol to support DevATC |
CXL | Compute Express Link bus standard |
DC / Device Context | デバイスと、そのデバイスが割り当てられているVMを識別する、状態をハードウェアで表現したもの |
DDT | デバイス・ディレクトリ・テーブル: デバイスコンテキスト構造を見つけるために、一意のデバイス識別子を使って走査されるradix-tree構造。 |
DDI | デバイス・ディレクトリ・インデックス: リーフまたはノンリーフDDT構造へのインデックスとして使用される一意のデバイス識別子のサブフィールド。 |
Device ID | DMA または割り込み要求の送信元を識別するための最大 24 ビットの識別番号。PCIeデバイスの場合は、ルーティング識別子(RID)[1]。 |
DevATC | デバイスのアドレス変換キャッシュ |
DMA | Direct Memory Access |
GPA | Guest Physical Address: 仮想マシン上の仮想化された物理メモリ空間 |
GSCID | Gust soft-context identifier: 仮想マシンに割り当てられたデバイスの集合を一意に識別するためにソフトウェアが使用する識別番号。IOMMU は IOATC エントリーに GSCID を付けることができる。同じ GSCID でプログラムされたデバイスコンテキストは、同じセカンドステージページテーブルでプログラムされている必要がある。 |
Guest | 仮想マシン上のソフトウェア |
HPM | Hardware Performance Monitor |
Hypervisor | 仮想化を司るソフトウェア |
ID | 識別子 |
IMSIC | Incoming Message-signaled Interrupt Controller |
IOATC | IOMMU Address Translation Cache: IOMMUないのキャッシュ。アドレス変換に必要な構造をキャッシュする |
IOVA | I/O Virtual Address。デバイスによるDMAのための仮想アドレス |
MSI | Message Signaled Interrupts |
OS | Operating System |
PASID | Process Address Space Identifier: プロセスのアドレス空間を識別する。PASID値はリクエストのPASID TLPプレフィックスで提供される。 |
PBMT | Page-Based Memory Types |
PPN | Physical Page Number |
PRI | Page Request Interface: PCIeによりOSのメモリマネージャに対してデバイスのページを作成するリクエストを可能にするためのプロトコル。 |
PC | Process Context |
PCIe | Peripheral Component Interconnect Express bus standard |
PDI | Process-directory-index: 一意なプロセス識別子のサブフィールドで、リーフまたは非リーフPDT構造へのインデックスに使用される。 |
PDT | Process-directory-table: プロセスコンテキスト構造を見つけるために、一意のプロセス識別子を使用して走査されるradix-treeデータ構造。 |
PMA | Physical Memory Attributes |
PMP | Physical Memory Protection |
PPN | Physical Page Number |
Process ID | プロセス・コンテキストを識別するための最大20ビットの識別番号。PCIeデバイスの場合はPASID [1]。 |
PSCID | Process soft-context identifier: ソフトウェアが一意のアドレス空間を識別するために使用する識別番号。IOMMU は IOATC エントリに PSCID を付けることができる。 |
PT | Page Table |
PTE | Page Table Entry. ページテーブルのリーフまたは非リーフのエントリ |
Reserved | 将来の使用のために予約されたレジスタまたはデータ構造フィールド。データ構造の予約フィールドは、ソフトウェアによって0に設定されなければならない。ソフトウェアはレジスタの予約フィールドを無視し、同じレジスタの他のフィールドに値を書き込むときは、これらのフィールドに保持されている値を保持しなければならない。 |
RID / PCIe RID | PCIe routing identifier |
RO | Read-only: レジスタ・ビットは読み取り専用であり、ソフトウェアで変更することはできない。明示的に定義されている場合、これらのビットは変化するハードウェアの状態を反映するために使用され、その結果、実行時にビットの値が変化するのを観測することができる。ビットを設定するオプション機能が実装されていない場合、ビットはゼロにハードワイヤリングされなければならない。 |
RW | Read-Write: レジスタ・ビットはリード・ライトであり、ソフトウェアによって希望する状態にセットまたはクリアされる。ビットに関連するオプション機能が実装されていない場合、ビットはゼロにハードワイヤリングされることが許可されています。 |
RW1C | Write-1-to-clear status: レジスタ・ビットは、読み出されるとステータスを示す。セット・ビットはステータス・イベントを示し、1bを書き込むとクリアされる。RW1Cビットに0bを書き込んでも効果はない。ビットをセットするオプション機能が実装されていない場合、ビットは読み取り専用で、ゼロにハードワイヤリングされなければならない。 |
RW1S | Read-Write-1-to-set:レジスタ・ビットは、読み出されるとステータスを示す。ビットは1bを書き込むことでセットされる。RW1Sビットに0bを書き込んでも効果はない。このビットを導入するオプション機能が実装されていない場合、このビットは読み取り専用で、ゼロにハードワイヤリングされなければならない |
SOC | System on a chip, system-on-a-chipもしくはsystem-on-chipとも言われる。 |
SPA | Supervisor Physical Address: メモリもしくはメモリにマップされたリソースにアクセスするための物理アドレス |
TLP | Transaction Layer Packet |
VA | Virtual Address |
VM | Virtual Machine: 実際のコンピュータ・システムの効率的で分離された複製。この仕様では、ハイパーバイザー拡張機能をサポートするRISC-Vハートが仮想化モードを1に設定して実行したときにアクセス可能なリソースとステートの集合体を指す。 |
VMM | Virtual Machine Monitor: ハイパーバイザとも呼ばれる |
VS | Virtual Supervisor: 仮想モードのスーパバイザの権限 |
WARL | Write any values, Read Legal values: ビットエンコーディングのサブセットに対してのみ定義されるレジスタフィールドの属性。 |
WPRI | Write Preserve values, Reads Ignore values: 将来の使用のために予約されているレジスタ・フィールドの属性。 |