iova、IOMMU、DMA を 1 つの記事で理解する

目次

1. コンセプト説明

2. 簡単な言葉で詳しく説明する

3. アプリケーション

4. よくある質問


1. コンセプト説明

IOVA (IO仮想アドレス、入出力仮想アドレス)

IOMMU (I/O メモリ管理ユニット): IOMMU は、メモリへのデバイス アクセスを管理するために使用されるハードウェア ユニットです。 IOVA アドレスを物理アドレスに変換して、デバイス アクセスのセキュリティと正確性を確保できます。 IOMMU が有効になっていない場合、CPU は仮想アドレスを使用し、デバイスは物理アドレスを使用してメモリにアクセスします。システムで IOMMU が有効になっている場合、CPU は MMU マッピングに基づいて VA を使用し、デバイスも IOMMU マッピングに基づいて IOVA を使用できます。

SMMU (System MMU、システム メモリ管理ユニット)、上記と同じ、別名。

 

DMA (ダイレクト メモリ アクセス): DMA を使用すると、デバイスは CPU をバイパスし、データをメモリに直接転送できます。これによりデータ転送効率が向上しますが、デバイスが正しいメモリ領域にアクセスできるように IOVA アドレスを適切に管理する必要があります。

2. 簡単な言葉で詳しく説明する

いわゆる iova は、io のアドレス、または DMA のアドレスとして理解できます。以前の phys_addr キーワードの多くは iova キーワードに置き換えられました。 dpdk は以前は iommu を認識していなかったので、DMA の設定に物理アドレスが使用されていましたが、iommu の助けを借りて、仮想アドレスを DMA に使用できるようになりました。

iova には 2 つのモードがあり、1 つは RTE_IOVA_VA で、もう 1 つは RTE_IOVA_PA です。RTE_IOVA_VA は、DMA 操作で宛先アドレスを表すために仮想アドレスを使用できることを意味し、RTE_IOVA_PA は、DMA が宛先アドレスとして物理アドレスを使用する必要があることを意味します。

デバイス (ISP など) が別のデバイスから IOVA アドレスを受信した場合、この IOVA アドレスを直接使用してメモリにアクセスすることはできません。代わりに、ISP は通常、IOMMU を通じてアドレス変換を実行します。

デバイスは通常、メモリ転送に DMA エンジンを使用します。 DMA エンジンは、アドレス変換に IOMMU を使用して、デバイスが許可されているメモリ領域にのみアクセスできるようにします。

3. アプリケーション

異なるデバイスが同じアドレスにアクセスします。たとえば、AP 側がカメラのバッファ メモリを ISP 側に割り当てます。ISP 側がこのメモリの読み書きをしたい場合は、物理アドレスの代わりに iova アドレスを渡すことができます。

4. よくある質問

ISP がメモリを直接申請しないのはなぜですか? ISP にはこの機能がないため、外部メモリの割り当てに依存します。

おすすめ

転載: blog.csdn.net/weixin_36389889/article/details/132477127