web-dev-qa-db-ja.com

optimus対応ラップトップでのkvm / qemuを使用したvgaパススルー

私は_lspci -nn | grep "VGA|3D"_から次の出力を持つasusn550jvラップトップを持っています:

_00:02.0 VGA compatible controller [0300]: Intel Corporation 4th Gen Core Processor Integrated Graphics Controller [8086:0416] (rev 06)
01:00.0 3D controller [0302]: NVIDIA Corporation GK107M [GeForce GT 750M] [10de:0fe4] (rev ff)
_

windows 8.1のvmをvga-passthroughで実行したいので、デュアルブートする必要はありません。専用の出力ポートを備えたカードが必要だと読みましたが、理由がわかりません。フォーラムで、まだ機能する可能性があることを示す投稿がいくつかあります。

私はこのコマンドでvmを実行しようとしています:

_qemu-system-x86_64 -enable-kvm -M q35 -m 4096 -cpu Host \
-smp 4,sockets=1,cores=4,threads=2 \
-bios /usr/share/ovmf/OVMF.fd \
-usb -usbdevice tablet \
-soundhw hda \
-device ioh3420,bus=pcie.0,addr=1c.0,multifunction=on,port=1,chassis=1,id=root.1 \
-device vfio-pci,Host=01:00.0,bus=root.1,addr=00.0,x-vga=on \
-drive file=/home/duke/windows.img,id=disk,format=raw -device ide-hd,bus=ide.0,drive=disk \
-drive file=/home/duke/Downloads/windows.iso,id=isocd -device ide-cd,bus=ide.1,drive=isocd \
-vga vmware \
-boot menu=on
_

vga-passthroughを使用したいのですが、x-vgaに関するエラーが発生し続けます。

_qemu-system-x86_64: -device vfio-pci,Host=01:00.0,bus=root.1,addr=00.0,x-vga=on: vfio: Device does not support requested feature x-vga qemu-system-x86_64: -device vfio-pci,Host=01:00.0,bus=root.1,addr=00.0,x-vga=on: vfio: failed to get device 0000:01:00.0
qemu-system-x86_64: -device vfio-pci,Host=01:00.0,bus=root.1,addr=00.0,x-vga=on: Device initialization failed.
qemu-system-x86_64: -device vfio-pci,Host=01:00.0,bus=root.1,addr=00.0,x-vga=on: Device 'vfio-pci' could not be initialized
_

arch vgaで見つけました-パススルースレッド この情報

これは、a)カーネルがCONFIG_VFIO_PCI_VGAをサポートしていないか、b)デバイスがVGAデバイスではないことを意味します。 a)をテストするには:

$ grep CONFIG_VFIO_PCI_VGA/boot/config -_uname -r_

B)をテストするには:

$ lspci -s 2:00.0 | grep VGA

Intel Hostグラフィックスを使用している場合でも、カーネルにi915パッチが必要です。 Radeon Hostグラフィックスを使用する場合は、他のVGAアービターパッチが必要です。これらは両方とも、最後の数ページ、IIRCで参照されています。

(a)の_CONFIG_VFIO_PCI_VGA=y_を取得します。私の場合(b)は_lspci -s 1:00.0 | grep VGA_であり、nvidiaカードが「3dコントローラー」としてリストされているので何も出力されません。

  1. i915パッチまたはovmfは、3Dコントローラーとしてリストされているnvidiaカードをサポートしますか?

    • そうでない場合、nividaカードをvga互換として認識させる方法はありますか?
  2. ovmfは_-bios /usr/share/ovmf/OVMF.fd_を設定するのと同じくらい簡単ですか?

  3. なぜvgaの割り当てに_-vga=none_が必要なのですか?

    • _-vga=none_が本当に必要な場合、実際に画面を表示する他の方法はありますか?たとえば、nvidiaカードをhdmiポートにリダイレクトしたり、nvidiaカードでノートパソコンの画面を完全に引き継いだりできますか?

また、alsa/Pulseのエラーも発生します。それらの多くは、一般的に従う吐き出します

_alsa: Could not initialize ADCk
alsa: Failed to open `default':
alsa: Reason: Connection refused
Home directory not accessible: Permission denied
ALSA lib Pulse.c:243:(Pulse_connect) PulseAudio: Unable to connect: Connection refused
_

これは、rootがユーザーレベルのPulseにアクセスできないためですが、Pulseをシステムレベルで実行したくないためです。システムモードで起動せずにpulseaudioを動作させる方法はありますか?そうでない場合は、とにかくシステムモードを有効にするのに問題があります。説明があります ここ そして_pulseaudio --system_は機能しますが、Pulseサーバーにクライアントを接続できません。ALSA lib Pulse.c:243:(Pulse_connect) PulseAudio: Unable to connect: Access deniedのようなエラーが発生し続けます。

6
erp

専用のビデオ出力が必要な理由は、ホストOSがゲストOSに割り当てられたカードの出力フレームバッファーに現在アクセスできないためです。

VT-dは、ホストがグラフィックメモリに直接アクセス/メモリマッピングすることを制限します。

通常、変更されたドライバー(LinuxではNvidia OptimusまたはBumblebee)は、Nvidiaカードで実行されているウィンドウの結果をテクスチャとしてIntelグラフィックスに公開し、Intelグラフィックスがデスクトップ環境にブレンドします。

これには、両方のグラフィックカードのドライバを変更し、メモリを通信/共有する必要があります。これは、私が見つけた限りでは、ホストOSとゲストOSの間では不可能です。

専用の出力ポートを使用すると、仮想マシンに割り当てられたカードはこの仮想化のムンボジャンボを気付かずに認識できるようになり、通常のドライバーを使用して、裸で実行する場合と同様に、物理出力ポートに出力を表示できます。金属。

専用の出力ポートは、私が実際に遭遇した限り、デスクトップまたはデュアルグラフィックスを備えたLenovo ThinkPadでのみ利用可能です(後者は出力ポートの一部をNvidiaに直接配線し、LinuxでのBumblebeeサポートを台無しにします過程の中で)。

7
wvdschel

誤解する可能性がありますが、KVM現在、ディスクリートビデオカード(GT 750MはOptimusカード)でしか機能しません)は機能しませんか?

参照: http://www.linux-kvm.org/wiki/images/b/b3/01x09b-VFIOandYou-small.pdf

2
AlwaysLearning

あなたがしなければならないことについてあなたが言及しなかったことの1つは:

BIOSに移動し、 VT-d オプションを有効にします。 PCIデバイスを仮想マシンにパススルーするにはVT-dが必要です

http://kmpic.asus.com/images/2014/12/29/6bd4ef8d-62a3-4b0c-9674-5a2b0fa53c79.jpg

(これで問題が解決しない場合でも、ソリューションの一部になるため、有効のままにしておく必要があります。)

0
Michael Hampton