Closed3
IOMMUについての調査
IOMMUとIntel VT-dについての調査の記録をまとめていきます。
IOMMU自体は通常のMMUがVA(virtual address)-PA(physical address)の変換を行うのと同様に、DA(device address)-PAの変換を行います。現時点で僕が主に知っているのはこのアドレス変換の部分だけで、Intel VT-dのその他の機能やIOMMUのパフォーマンスやセキュリティについてはほとんど知りません。
現時点でわかっていないこと
- DMAの具体的な手順
DMAについては何となく知っていますが、DMAが実際に発生する場面や意図的に発生させることはできるのか、どのようにして発生するのかについての詳細をまとめていきたいです - DMAのパフォーマンス
DMAはそもそもCPUを時間的に拘束する事なくメモリアクセスが行える点が魅力だと思うので、これを利用したパフォーマンス関連の論文を読んでみたいです - Intel VT-dによるセキュリティ
Intel VT-dではdomainによって特定のメモリを保護?みたいなことができた気がします。(例えばBitVisorは自身を保護するのにIntel VT-dを使っている)
全部は書き切れないですが、とりあえず気になることは一通り全部調べてみようと思います。
1. DMA details
DMAの流れについてざっくりと把握する。(8257 DMA)
DMA writeの流れ
- デバイスのバッファに転送するデータが準備できる
- デバイスがDMA requestをDMACに送る
- DMACがHOLD lineでCPUにHold requestを送り、CPUがHLDAをassertするのを待つ
- CPUはバスの制御を手放し、HOLD requestをHLDA signalを通して確認する
- CPUはHOLD stateになり、DMACはCPU, メモリ, IOデバイス間のバスを管理する
- DMACがデバイスからのデータを書き込むアドレスを送信する(どこに)
- DACK signalをデバイスに送り、転送準備が完了したことを通知する
- (write operationの場合)IOR, MEMW signalをcontrol busに送る。これによって、デバイスがdata busにデータを出力して、メモリがdata busからの入力を受け入れることができる
レジスタ周りは後日やる。
DMACが主流なのかデバイスそのものにbuild-inでDMA用のコンポーネント が付いているのが主流なのかわからない。
深い話になってくると、ハードウェアについてもうちょっと最低限知っておかないと厳しそう。(正直 address bus, data bus とか雰囲気で読んでいる)
このスクラップは2021/04/29にクローズされました