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つのグラフィックカードが必要だと思ったことがないからです)。
私が成功せずに試したことは次のとおりです。
- 強化コアの代わりに標準コアを使用してください。
- 〜できるようにするデバイスドライバ >> 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は常に動作しますが、カーネルログには表示されません。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クレジットを提供します。