FPGA開発日記

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

RISC-V IOMMU の構成についてマニュアルを読んでまとめる

github.com

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

仕様書の構成:

  1. 導入:IOMMUの概要、用途、配置とデータフロー、および主要機能。
  2. データ構造:デバイスディレクトリテーブル(DDT)、プロセスディレクトリテーブル(PDT)などのデータ構造と、IOVA変換プロセス。
  3. メモリ内キューインターフェース:コマンドキュー、フォルト/イベントキュー、ページリクエストキューなど。
  4. デバッグサポート
  5. メモリマップされたレジスタインターフェース
  6. ソフトウェアガイドライン
  7. ハードウェアガイドライン

IOMMUによって実現できること

  1. デバイスのメモリアクセスの仮想化: IOMMUは、デバイスが直接アクセスする物理メモリアドレスを、仮想アドレスにマッピングする。異なるプロセスやオペレーティングシステムが同じハードウェアリソースを共有しながら、独立したメモリ空間を持つことができるようになる。
  2. セキュリティ強化: 不正なメモリアクセスを防ぐためのアクセス制御を提供する。これにより、DMA(Direct Memory Access)を使用するデバイスが、システムメモリの許可されていない領域にアクセスすることを防ぐ。
  3. 入出力性能の向上: デバイスのDMA操作によるメモリアクセスが最適化され、システム全体の入出力性能が向上する。
  4. エラー処理と隔離: デバイスからのメモリアクセスエラーを検出し、隔離する機能を提供する。
  5. 共有仮想メモリ(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: 将来の使用のために予約されているレジスタ・フィールドの属性。