Linuxにおいて、バグっていて使用メモリを解放しないドライバを使ったりや超大量の入出力を行うと swiotlb buffer is full
が出てシステムがうまく使えなくなることがありますが、その場合Linuxのブートオプション (/etc/default/grub
等に書かれている) に以下を加えると解決することが多いです。
-
iommu=force,merge,nopanic,nopt intel_iommu=on amd_iommu=on
をカーネルの起動パラメーターに付けて様子をみる - それでうまくいかなかったら、
swiotlb=65536
を追加して様子を見る。うまくいくまでswiotlb
の値を2倍ずつ増やして再起動する。
swiotlb buffer is full
のエラーメッセージがでる原因はDMA用のカーネル内メモリの割り当て失敗でswiotlb=65536
は取り敢えず64目がバイトDMA用にとっておくように指示します。ハードウェアによるIOMMUを使えばそのようなメモリーの使用を大幅に削減できます。