DebianでのLinux-KVMによるPCIパススルーの実装


10

PCIパススルーを使用して、古いビデオカード(Radeon 4770)を仮想マシンに接続しようとしています。Linux-KVMを使用して、仮想マシンをDebian Linux(Wheezy、3.2.0-4-amd64)ホストで実行しています。

質問

明確にするために、Linux KVMでPCIパススルーを実装するための正しい「パス」が何かはわかりません。この段階で、私は正しいアクションがしている疑いの追加CONFIG_DMARCONFIG_DMAR_DEFAULT_ONおよびCONFIG_PCI_STUB「バスオプション(PCIなど)、」カーネルソースと再コンパイルのセクションに。

しかし、これが再コンパイルする前に必要な追加の完全なリストであるかどうかはわかりませんまたは、カーネルの再コンパイルが必要な場合-おそらくより簡単な方法がありますか?

私が参照したガイドの中で、linux-kvm.orgのみがコンパイルが必要であると明確に述べています。Linux-KVMはすでにインストールされており、ハイパーバイザーとして機能しています。

研究

この時点で、私の問題はカーネルに関連していると思います。私の主なリソースはlinux-kvm.orghttp://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ガイドは、setseboolRedHat固有と思われる参照まで機能します。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_DMARCONFIG_DMAR_DEFAULT_ONCONFIG_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

これは、ホストがまだビデオカードの制御を放棄しないためであり、適切な構成項目でカーネルがコンパイルされていないことが原因である可能性があります。

これは私にとって新しい領域なので、私の未経験を許してください。私が正しい軌道に乗っているという単なる確認であっても、どんなフィードバックでも大いに感謝します。私が目を見張るような見落としをしたり、考えすぎたりしている場合は、お知らせください。私の質問に対する建設的な批判も歓迎します。「私を助ける」のに十分な情報を提供しなかった場合(または、私があまりに多く含まれている場合)にお知らせください。質問をより明確に、または簡単に回答できるようにお手伝いさせていただきます。

前もって感謝します、


ビデオカード自体をホストに接続させないようにします(たとえば、ビデオカードをホストに接続せずに起動します。ドライバーを提供/無効化しないか、カーネルの起動パラメーターを使用して、起動中にスキップされます)。 ?
Hennes、2014

回答:


1

PCIパススルーについて言及されている記事、カーネル構成が必要です

make menuconfig
set "Bus options (PCI etc.)" -> "Support for DMA Remapping Devices" to "*"
set "Bus options (PCI etc.)" -> "Enable DMA Remapping Devices" to "*"
set "Bus options (PCI etc.)" -> "PCI Stub driver" to "*"

optional setting: 
set "Bus options (PCI etc.)" -> "Support for Interrupt Remapping" to "*"

ただし、これらのオプションは「バスオプション」ではなく、「デバイスドライバー-> IOMMUハードウェアサポート」では見つかりませんでした。

上記の記事に従っても、ゲストマシンの起動に問題があり、「デバイス 'pci-assign'を初期化できませんでした」というエラーが発生しました。私はそれを実行することによってそれを起動させることができました:

 echo 1 > /sys/module/kvm/parameters/allow_unsafe_assigned_interrupts

それでも問題が解決しない場合は、次の記事を参照してください。http//spica-and-roid.blogspot.com.au/2012/07/howto-kvm-passthrough.html

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.