私はIOMMUをサポートするマザーボードを搭載したAMD A4-5300 CPUを持っており、KVM VMでグラフィックカードを使用する目的で、Gentoo Hardened 4.3.3-r4カーネルでIOMMUを有効にしようとしています。このガイドはこちら、いくつかの提供されたオプション (「DMA 再マッピング デバイスのサポート」、「DMA 再マッピング デバイスの有効化」、および「PCI スタブ ドライバー」) を使用してカーネルを再コンパイルすることになっています。ただし、「DMA 再マッピング デバイスのサポート」と「DMA 再マッピング デバイスの有効化」がカーネル構成にありません。
次に、構成で「remap」を検索し、CONFIG_IRQ_REMAP、CONFIG_DMAR_TABLE、CONFIG_IOMMU_SUPPORT、CONFIG_SWIOTLB、CONFIG_PCI_IOV などのいくつかのオプションを有効にしてみました。次に、これらのオプションを有効にしてカーネルを再コンパイルし、amd_iommu=fullflush iommu=force
カーネル コマンド ラインでシステムを起動し、前述のガイドに従って、カーネル メッセージで「AMD-Vi」を探すことで、システムで IOMMU が実行されているかどうかを確認しました。
dmesg | grep AMD-Vi
カーネル ログには AMD-Vi に関する何も表示されません。
さらに、PCIデバイスを接続した仮想マシンをvirt-managerで起動しようとすると、次のようなメッセージが表示されます。「ドメインの起動エラー: サポートされていない構成: ホストはホスト PCI デバイスのパススルーをサポートしていません」。
私が見つけたものはほとんどすべて、Fedora、Ubuntu、Debian 用で、IOMMU は明らかにそのままで動作します。これは、マザーボードと CPU がサポートしていないからではないと思います。BIOS にオプションがあり、数年前に Debian で IOMMU 付きの VirtualBox VM を実行できたことを覚えているからです (ただし、IOMMU を介して VM で GPU を使用するには 2 枚のグラフィック カードが必要だとはその時は思っていなかったので、その後は調べませんでした)。
すでに試してみたがうまくいかなかった方法は次のとおりです:
- 強化されたカーネルの代わりに標準カーネルを使用します。
- 有効化デバイス ドライバー >> IOMMU ハードウェア サポート、AMD IOMMU サポート、DMA 再マッピングデバイスを使用した Intel IOMMU のサポート、割り込み再マッピングのサポートそしてバスオプション(PCI など) >> PCI スタブ。
- 最新のカーネルを使用しており、現在は 4.4.8-hardened-r1 にアップグレードされています。
これはカーネルを起動するために使用しているコマンドラインです。便宜上、各パラメータは別々の行にあります。
root=/dev/ram0
crypt_root=/dev/disk/by-uuid/c1ce6456-4c6a-4a64-8027-5ec4fdc0f344
dolvm
real_root=/dev/mapper/cryptgentoo-raiz
rootfstype=jfs
real_init=/sbin/init
root_keydev=/dev/disk/by-partuuid/086194de-e476-4abb-82da-9744e6fb0257
root_key=luks-key.gpg
keymap=la
amd_iommu=on
iommu=on
カーネル構成オプションがまだ不足していますか?
アップデート:うっかりして誤って を発行してしまいps -ef | grep -i iommu
、こんなことになってしまった...
rockshooter ~ # ps -ef | grep iommu
root 66 2 0 02:57 ? 00:00:00 [amd_iommu_v2]
カーネル スレッドが表示されれば、IOMMU を実行できる可能性があると思いますが、カーネルでは何も表示されません。単なる推測ですが、先に進んで使用してみることにします。
答え1
IOMMU の主なオプション
試すDevice Drivers >> IOMMU Hardware Support
:
AMD IOMMU
次に有効にしますAMD IOMMU support
。
DMA 再マッピング
有効にするSupport for Intel IOMMU using DMA Remapping Devices
オプション: IRQ の再マッピング
有効にするSupport for Interrupt Remapping
オプション: バージョン 2 サポートを有効にする
AMD IOMMU Version 2 driver
PCI オプション
Bus options (PCI etc.) >> PCI Stub
grep
設定ファイルは使用せず、常にキーmenuconfig
と/
キーを使用して必要なオプションを検索してください。リンクしたガイドには 3 つの問題があります。
- Fedora/Redhat ユーザー向けにカスタマイズされています。
- #1 のため、カーネルのバージョンが異なるため、オプションは別の場所にあります。
- Gentoo のカーネルは、ガイドで使用されているカーネルよりも新しいです。
アップデート
私のマザーボードは PCI パススルーをサポートするには古すぎますが、オプションが適切に有効になっていることを確認していただきたいと思います。指示したとおりのオプションを使用します。
IOMMU の主なオプション
AGP: Checking aperture...
[ 0.000000] AGP: No AGP bridge found
[ 0.000000] AGP: Node 0: aperture [bus addr 0xc4000000-0xc5ffffff] (32MB)
[ 0.000000] Aperture pointing to e820 RAM. Ignoring.
[ 0.000000] AGP: Your BIOS doesn't leave an aperture memory hole
[ 0.000000] AGP: Please enable the IOMMU option in the BIOS setup
[ 0.000000] AGP: This costs you 64MB of RAM
[ 0.000000] AGP: Mapping aperture over RAM [mem 0xc4000000-0xc7ffffff] (65536KB)
...
[ 0.959270] PCI-DMA: Disabling AGP.
[ 0.959337] PCI-DMA: aperture base @ c4000000 size 65536 KB
[ 0.959338] PCI-DMA: using GART IOMMU.
[ 0.959340] PCI-DMA: Reserving 64MB of IOMMU area in the AGP aperture
...
[ 1.375277] AMD IOMMUv2 driver by Joerg Roedel <[email protected]>
[ 1.375277] AMD IOMMUv2 functionality not available on this system
答え2
結局、何度も泣き叫び、文句を言い、頭を殴りつけた後、ようやく何が起こっているのかが分かりました。
それが判明したとして、IOMMU はずっと動作していましたが、カーネル ログにはそれが表示されていませんでした。しかし、IOMMU ドライバーは存在し、動作していたので、次のようps -ef
に誤って入力したときに偶然に気付きました。dmesg
rockshooter ~ # ps -ef | grep -i iommu
root 66 2 0 04:19 ? 00:00:00 [amd_iommu_v2]
カーネル スレッドが動作しているのを見て、IOMMU が実際に動作しているのではないかと思いました。そこで、以前 Debian で行ったのと同じ構成手順を実行したところ、なんと 1 時間後には、グラフィック カードに接続された仮想マシンでゲームをプレイしていました。
このスレッドは今後の参考のために保存しておいてください。この問題を理解するのに 3 週間ほどかかりました。それでも、この問題の設定とテストに手間をかけた他の投稿者に、当然の +50 の評判を与えました。