Gentoo カーネルを AMD IOMMU 用にコンパイルするにはどうすればいいですか?

Gentoo カーネルを AMD IOMMU 用にコンパイルするにはどうすればいいですか?

私は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 枚のグラフィック カードが必要だとはその時は思っていなかったので、その後は調べませんでした)。

すでに試してみたがうまくいかなかった方法は次のとおりです:

  1. 強化されたカーネルの代わりに標準カーネルを使用します。
  2. 有効化デバイス ドライバー >> IOMMU ハードウェア サポートAMD IOMMU サポートDMA 再マッピングデバイスを使用した Intel IOMMU のサポート割り込み再マッピングのサポートそしてバスオプション(PCI など) >> PCI スタブ
  3. 最新のカーネルを使用しており、現在は 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

IOMMU オプション

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 つの問題があります。

  1. Fedora/Redhat ユーザー向けにカスタマイズされています。
  2. #1 のため、カーネルのバージョンが異なるため、オプションは別の場所にあります。
  3. 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 の評判を与えました。

関連情報