以下の内容はhttps://msyksphinz.hatenablog.com/entry/2025/01/12/040000より取得しました。


RISC-VのIOMMUの仕組み (1. 概要)

Chapter 1: IOMMU(入力出力メモリ管理ユニット)とは?

IOMMUとは、その名の通りIOデバイス向けのMMUである。IOデバイスというのは、GPGPU、AI Acceleratorなどの”CPU”以外のデバイスを指す。

MMUというのは、Memory Management Unitで、基本的な機能としては仮想アドレス(VA)から物理アドレス(PA)への変換や、メモリ領域の保護をサポートするものである。

IOMMUはCPUの使うMMUと基本的な役割は同じで、デバイス向けに、デバイスの使う仮想アドレスを物理アドレスに変換する役割と、デバイスが不正にメモリアクセスを行うことを防ぐものである。

IOMMUのユースケース

非常に簡単なモデルで、IOMMUがどのように使われるのかを考えてみる。例えば、CPUで動いているあるプロセスが、GPGPUに仕事を頼みたいとする。

CPUはGPGPUに対して、「仮想アドレス(VA) = 0x100にあるデータを処理してください」と頼む。ここで、VA=0x100は実際には 0x8000_0100 のことであるので、GPGPUは 0x8000_0100にアクセスする必要があるわけだ。

ところが、CPUのプロセスは基本的にソフトウェアからはアドレスはVAしか見えないので、CPUのプロセスが物理アドレス(PA)を知ることはできない。

したがって、CPUがGPGPUに伝えるときは「0x100」というアドレス情報しか伝えられなくて、GPGPUはこのVAが実際にはどの物理アドレスなのかを知る手段がない、ということになってしまう。

そこでIOMMUが登場する。IOMMUはGPGPUデバイス向けに0x100が0x8000_0100に相当するというような変換テーブルを保持しており、GPGPUからの要求に応じて物理アドレスを提供する。

この変換テーブルを生成するためには、CPU(そして具体的にはオペレーティングシステムに相当するシステムソフトウェア)がIOMMUのテーブルを設定し、GPGPUが適切にVA→PA変換ができるようにサポートする。

IOMMUがデバイスを管理する仕組み「デバイス・コンテキスト」

IOMMUがデバイスを管理するための概念として、デバイス・コンテキストというものを導入する。

デバイス・コンテキストというのは、IOMMUが各デバイスを管理するための情報を一元化したもので、IOMMUはデバイス毎にデバイス・コンテキストを持っている。

下記の図でいうならば、GPGPUはプロセスAで使われるので、プロセスAが持っているVA→PA変換に従い、プロセスBがAIアクセラレータを使うとしたら、プロセスBのVA→PA変換に従う必要がある。これらのデバイス毎の情報をまとめたものが、デバイス・コンテキストである。




以上の内容はhttps://msyksphinz.hatenablog.com/entry/2025/01/12/040000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14