Videocard passthrough - andyceo/documentation GitHub Wiki
В этой статье описывается, как настроить пробос видеокарты в виртуальную машину.
-
Сначала необходимо включить в ядре поддержку IOMMU. Нужные опции ядра зависят от производителя процессора:
sudo nano /etc/default/grub # затем добавьте опцию "intel_iommu=on" в параметр GRUB_CMDLINE_LINUX_DEFAULT: # GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"
Create virtual machine with ICH9 chipset! Install the Oracle advanced pack VBoxManage modifyvm "Windows XP SP3 for Games" --pciattach 01:00.0
Установка qemu-kvm (http://www.howtogeek.com/117635/how-to-install-kvm-and-create-virtual-machines-on-ubuntu/)
sudo apt-get install qemu-kvm libvirt-bin bridge-utils virt-manager
потом пакеты system потом перелогиниться, иначе прав не хватает потом создать вирутальную машину
enabling vfio (Virtual Finction I/O) sudo nano /etc/modules, adding following:
vfio
vfio_iommu_type1
vfio_pci
затем Grub:
sudo nano /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on vfio_iommu_type1.allow_unsafe_interrupts=1 pci-stub.ids=10de:0fd2 pcie_acs_override=downstream kvm.ignore_msrs=1"
sudo update-grub
пишем скрипт для запуска машины: vm.sh
Ссылки:
- https://bbs.archlinux.org/viewtopic.php?id=162768&p=1
- https://pve.proxmox.com/wiki/Pci_passthrough
- http://habrahabr.ru/post/211909/
- http://www.pugetsystems.com/labs/articles/Multiheaded-NVIDIA-Gaming-using-Ubuntu-14-04-KVM-585/#Step1EdittheUbuntumodulesandbootloader
- http://vfio.blogspot.nl/2014/08/iommu-groups-inside-and-out.html
- http://ubuntovod.ru/instructions/probros-videokarty-v-kvm-iz-pod-ubuntu.html
-
Создал файл
/etc/modprobe.d/kvm.conf
и в нем написал:options kvm allow_unsafe_assigned_interrupts=1
-
В файле
/etc/default/grub
, обновил параметр GRUB_CMDLINE_LINUX_DEFAULT:GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on vfio_iommu_type1.allow_unsafe_interrupts=1 rootdelay=10 scsi_mod.scan=sync"
Было:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"
Запустил
update-grub
-
В файл
/etc/initramfs-tools/modules
добавил строчку:pci_stub ids=10de:0fd2
Потом запустил
update-initramfs -u
-
Создал с муками виртуальную машину с чипсетом Q35
-
Установил в нее Windows 7 Ultimate 64 bit
-
Поставил паравиртуальные драйвера для сети, balloon
-
Скачал драйвер с сайта NVIDIA. Провел некоторые подготовительные действия: см. http://club.dns-shop.ru/expert/330983/ Установил драйвер.
Однако, после установки, показывает: недостаточно свободных ресурсов, код 12.
Дальше нужно экспериментировать с vfio-vga: https://bbs.archlinux.org/viewtopic.php?id=162768
Источники:
- http://ubuntovod.ru/instructions/probros-videokarty-v-kvm-iz-pod-ubuntu.html
- https://pve.proxmox.com/wiki/Pci_passthrough
-
Создал файл
/etc/modprobe.d/kvm.conf
и в нем написал:options kvm allow_unsafe_assigned_interrupts=1
-
Добавил модули в /etc/modules:
pci_stub vfio vfio_iommu_type1 vfio_pci vfio_pci_vga kvm kvm_intel
-
В файл
/etc/initramfs-tools/modules
добавил строчку:pci_stub ids=10de:0fd2
-
Запустил
sudo update-initramfs -u
-
Перезагрузился. Проверить, что видеокарта использует драйвер pci-stub:
dmesg | grep pci-stub
-
Создадим диск для виртуальной машины:
qemu-img create -f raw -o size=16G Win7.img
-
Создаем скрипт
vfio-bind
для подключения устройства к VFIO-PCI.#!/bin/bash modprobe vfio-pci for dev in "$@"; do vendor=$(cat /sys/bus/pci/devices/$dev/vendor) device=$(cat /sys/bus/pci/devices/$dev/device) if [ -e /sys/bus/pci/devices/$dev/driver ]; then echo $dev > /sys/bus/pci/devices/$dev/driver/unbind fi echo $vendor $device > /sys/bus/pci/drivers/vfio-pci/new_id done
Запускаем его с параметрами тех устройств, которые будем пробрасывать:
sudo ./vfio-bind 0000:01:00.0
-
Создаем скрипт
vmstart
запуска виртуалки:#! /bin/sh #init kvm-qemu sudo qemu-system-x86_64 \ -boot menu=on \ -enable-kvm \ -M q35 \ -m 2048 \ -cpu host \ -rtc base=localtime \ -smp 1,sockets=1,cores=1,threads=1 \ -bios /usr/share/qemu/bios.bin \ -acpitable file=/usr/share/seabios/q35-acpi-dsdt.aml \ -device ioh3420,bus=pcie.0,addr=1c.0,multifunction=on,port=1,chassis=1,id=root \ -device ahci,bus=pcie.0,id=ahci \ -drive file='/var/lib/libvirt/images/Win7.img',if=none,id=Win7,format=raw \ -device ide-hd,bus=ide.0,drive=Win7,id=ide-hd,bootindex=2 \ -drive file='/media/data/ISO/Win7.SP1.x86-x64.Rus-Eng.18in1.Activated.v3/ru-en_win7_sp1_x86-x64_18in1_activated_v3.iso',if=none,id=drive-ide0-1-0,readonly=on,format=raw \ -device ide-cd,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0,bootindex=1 \ -drive file='/media/data/ISO/virtio-win-drivers-20120712-1.iso',if=none,id=drive-ide0-2-0,readonly=on,format=raw \ -device ide-cd,bus=ide.2,unit=0,drive=drive-ide0-2-0,id=ide0-2-0 \ -device vfio-pci,host=01:00.0,bus=root,addr=00.0,multifunction=on \ -vnc 127.0.0.1:0 # с этими параметрами, не получается загрузиться #,x-vga=on \ #-vga none \ #-nographic \
-
Запускаем и устанавливаем виртуалку. Это можно сначала сделать, не пробрасывая карту в виртуалку.
-
Пробрасываем видеокарту. В Винде в свойствах устройства должно быть:
PCI\VEN_10DE&DEV_0FD2&SUBSYS_0957152D
-
Устанавливаем драйвера и все такое. После установки и перезагрузки виртуалки, все равно код 12 (не хватает ресурсов для использования вируталки).