AMD IOMMU用のGentooカーネルをコンパイルする方法は?

AMD IOMMU用のGentooカーネルをコンパイルする方法は?

IOMMUをサポートするマザーボードを備えたAMD A4-5300 CPUがあり、KVM仮想マシンでグラフィックカードを使用するためにGentoo Hardened 4.3.3-r4カーネルでIOMMUを有効にしようとしています。 ~によるとこのガイドはここにあります、提供されているオプションの一部(「DMA再マッピングデバイスのサポート」、「DMA再マッピングデバイスの有効化」、および「PCIスタブドライバ」)を使用してカーネルを再コンパイルする必要があります。ただし、「DMA再マッピング装置のサポート」および「DMA再マッピング装置の有効化」はカーネル構成にありません。

その後、設定で「再マッピング」を検索し、CONFIG_IRQ_REMAP、CONFIG_DMAR_TABLE、CONFIG_IOMMU_SUPPORT、CONFIG_SWIOTLB、CONFIG_PCI_IOVなど、いくつかのオプションを有効にしてみました。その後、これらのオプションを有効にしてカーネルを再コンパイルamd_iommu=fullflush iommu=forceし、カーネルコマンドラインからシステムを起動し、上記のガイドに従ってカーネルメッセージRun on the systemで「AMD-Vi」を見つけて、カーネルにIOMMUがあることを確認しました。 :

dmesg | grep AMD-Vi

私のカーネルログにはAMD-Viの何も表示されません。

また、virt-managerでPCIデバイスが接続されている仮想マシンを起動しようとすると、次のメッセージが表示されます。「ドメイン起動エラー:サポートされていない設定:ホストはホストPCIデバイスへのパススルーをサポートしていません。」

私が見つけたほとんどすべては、IOMMUがデフォルトで提供されているFedora、Ubuntu、およびDebianで動作します。私のBIOSにオプションがあり、数年前にDebianでIOMMUを使用してVirtualBox VMを実行できたことを覚えているので、マザーボードとCPUがそれをサポートしていない問題だとは思いません。もはや持っていません)(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は常に動作しますが、カーネルログには表示されません。ps -efしかし、IOMMUドライバがあり、動作していますdmesg

rockshooter ~ # ps -ef | grep -i iommu
root        66     2  0 04:19 ?        00:00:00 [amd_iommu_v2]  

カーネルスレッドが実行されるのを見たとき、私のIOMMUが実際に動作しているのではないかと思いました。それで、私は以前Debianで行ったのと同じ設定手順を実行し、1時間後にグラフィックカードに接続されている仮想マシンでいくつかのゲームをプレイしていました。

この問題を解決するのに3週間かかりましたので、後で参考にするためにこのスレッドを保存してください。私はまだこの問題を設定してテストするのが難しいことについて他のポスターに+50クレジットを提供します。

関連情報