PCIパススルーを使用して、古いビデオカード(Radeon 4770)を仮想マシンに接続しようとしています。Linux-KVMを使用して、仮想マシンをDebian Linux(Wheezy、3.2.0-4-amd64)ホストで実行しています。
質問
明確にするために、Linux KVMでPCIパススルーを実装するための正しい「パス」が何かはわかりません。この段階で、私は正しいアクションがしている疑いの追加CONFIG_DMAR
、CONFIG_DMAR_DEFAULT_ON
およびCONFIG_PCI_STUB
「バスオプション(PCIなど)、」カーネルソースと再コンパイルのセクションに。
しかし、これが再コンパイルする前に必要な追加の完全なリストであるかどうかはわかりません。または、カーネルの再コンパイルが必要な場合-おそらくより簡単な方法がありますか?
私が参照したガイドの中で、linux-kvm.orgのみがコンパイルが必要であると明確に述べています。Linux-KVMはすでにインストールされており、ハイパーバイザーとして機能しています。
研究
この時点で、私の問題はカーネルに関連していると思います。私の主なリソースはlinux-kvm.org(http://www.linux-kvm.org/page/How_to_assign_devices_with_VT-d_in_KVM)のガイドです。ただし、(特定の)ディストリビューション固有のわずかに異なる方法を示す他のリソースを見つけました。
Fedora- https: //docs.fedoraproject.org/en-US/Fedora/13/html/Virtualization_Guide/chap-Virtualization-PCI_passthrough.html
SUSE-"openSUSE:KVMによる仮想化"(関連性が低く、2リンク制限のためリンクは省略されています)
Fedoraガイドは、setsebool
RedHat固有と思われる参照まで機能します。SUSEガイドは、グラフィックカードの割り当てがSUSEでサポートされていないことを示していますが、CONFIG_DMAR_DEFAULT_ON
/ boot / config-`uname -r`内で文字列を検索する必要があることを示しているので、それも参照します。linux-kvm.orgサイトも参照CONFIG_DMAR_DEFAULT_ON
するので、これが表示されますが、共通して必要な要素であると。
注: FedoraまたはDebianのガイドでは、グラフィックカードの制限は見つかりませんでした。参照されているSUSEドキュメントの日付は2006〜2013です。
CONFIG_DMAR_DEFAULT_ON
システムの/ boot / config-`uname -r`で見つかりません。さらなる研究は、そのことを示唆しているCONFIG_DMAR
、CONFIG_DMAR_DEFAULT_ON
とCONFIG_PCI_STUB
の指示に関連するLinuxカーネルの設定項目ですlinux-kvm.org。そのため、ホストのカーネルをこれらの3つの(少なくとも)カーネル構成項目で再コンパイルする必要があると思います。intel_iommu=on
ホストOSのカーネルパラメータとしてを使用した起動では不十分なようです。
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"
VT-d / IOMMU / KVMサポートの確認
私の調査によると、PCIパススルーにはVT-dのCPUとマザーボードの両方のサポートが必要です。
VT-d
私のプロセッサー、k以外の INTEL i7-3770(ark.intel.com/products/65719ごと)がVT-dをサポートしていることを確認しました。
ダイレクトI / O向けインテル®バーチャライゼーションテクノロジー(VT-d)‡はい
私のAsrock Z77 Extreme4マザーボードはVT-dもサポートしています(ユーザーマニュアルの62ページ):
VT-dこれを使用して、インテル®VT-dテクノロジー(ダイレクトI / O向けインテル®仮想化テクノロジー)を有効または無効にします。この機能のデフォルト値は[Disabled]です。
IOMMU
私のシステムがIOMMUをサポートしていることを確認しました:
dmesg | grep -e DMAR -e IOMMU | grep -e "DRHD base" -e "enabled"
[ 0.000000] Intel-IOMMU: enabled
KVM
KVMがインストールされ、PCIパススルーサポート以外に機能します。
lsmod | grep kvm
kvm_intel 121968 0
kvm 287749 1 kvm_intel
マザーボードのBIOSでVT-dが有効になっていることを確認しました。したがって、VT-dの使用を妨げるハードウェア/ BIOSの問題を疑うことはありません。いずれにしても、ビデオカードをホストから正常に切り離して仮想マシンに再度割り当てることができません。
おわりに
最後に、私もテストを試みたことを述べておきます。
echo "8086 10b9" \> /sys/bus/pci/drivers/pci-stub/new_id
echo "0000:01:00.0" \> /sys/bus/pci/devices/0000:01:00.0/driver/unbind
echo "0000:01:00.0" \> /sys/bus/pci/drivers/pci-stub/bind
echo "8086 10b9" > /sys/bus/pci/drivers/pci-stub/remove_id
kvm -m 512 -boot c -net none -hda debian-7.1.0-amd64-netinst.iso -device pci-assign,host=01:00.0
ターゲットVMを作成しようとした後、次のエラーが発生しました:
Failed to assign device "(null)" : Device or resource busy
*** The driver 'pci-stub' is occupying your device 0000:01:00.0.
***
*** You can try the following commands to free it:
***
*** $ echo "8086 10b9" > /sys/bus/pci/drivers/pci-stub/new_id
*** $ echo "0000:01:00.0" > /sys/bus/pci/drivers/pci-stub/unbind
*** $ echo "0000:01:00.0" > /sys/bus/pci/drivers/pci-stub/bind
*** $ echo "8086 10b9" > /sys/bus/pci/drivers/pci-stub/remove_id
***
kvm: -device pci-assign,host=01:00.0: Device 'pci-assign' could not be initialized
これは、ホストがまだビデオカードの制御を放棄しないためであり、適切な構成項目でカーネルがコンパイルされていないことが原因である可能性があります。
これは私にとって新しい領域なので、私の未経験を許してください。私が正しい軌道に乗っているという単なる確認であっても、どんなフィードバックでも大いに感謝します。私が目を見張るような見落としをしたり、考えすぎたりしている場合は、お知らせください。私の質問に対する建設的な批判も歓迎します。「私を助ける」のに十分な情報を提供しなかった場合(または、私があまりに多く含まれている場合)にお知らせください。質問をより明確に、または簡単に回答できるようにお手伝いさせていただきます。
前もって感謝します、