カーネルブートオプション(https://www.kernel.org/doc/Documentation/x86/x86_64/boot-options.txt) 次のオプションが見つかりました。
iommu=[<size>][,noagp][,off][,force][,noforce]
[,memaper[=<order>]][,merge][,fullflush][,nomerge]
[,noaperture][,calgary]
General iommu options:
off Don't initialize and use any kind of IOMMU.
noforce Don't force hardware IOMMU usage when it is not needed.
(default).
force Force the use of the hardware IOMMU even when it is
not actually needed (e.g. because < 3 GB memory).
soft Use software bounce buffering (SWIOTLB) (default for
Intel machines). This can be used to prevent the usage
of an available hardware IOMMU.
iommu = softはIntelシステムのデフォルトオプションであり、ハードウェアIOMMUの使用を防ぐために使用できると述べています。
もしそうなら、このオプションがIntelシステムのデフォルトの場合、IntelシステムはハードウェアIOMMUを使用しませんか、それともデフォルトでハードウェアIOMMU +ソフトウェアバウンスバッファを使用しますか?
また、起動後にカーネルでどのIOMMU設定が使用されているかを確認する方法はありますか?
答え1
このiommu=soft
オプションは、IOMMUが存在しないかIOMMUが無効になっているシステムのソフトウェア回避策です。この回避策をソフトウェアIO TLB(SWIOTLB)と呼びます。 SWIOTLBは、IOMMUのないシステムがデバイスでDMA操作を安全に実行できるようにするメカニズムです。
設定されるとiommu=soft
(Intelシステムのデフォルト)、LinuxカーネルはデフォルトでSWIOTLBを使用します。これは実際にいいえハードウェア IOMMU が使用されていないことを示します。の場合Linuxカーネルは、ハードウェアIOMMUがiommu=soft
設定されていても使用可能で動作する場合は、ハードウェアIOMMUを使用するように設計されているため使用できます。 SWIOTLBメカニズムは、ハードウェアIOMMUが利用できない場合、代替ソリューションに近いです。
起動後にIOMMU設定を確認するには、コマンドを使用できますdmesg | grep -i iommu
。