Skip to content

Videocard passthrough

andyceo edited this page May 4, 2015 · 3 revisions

В этой статье описывается, как настроить пробос видеокарты в виртуальную машину.

  1. Сначала необходимо включить в ядре поддержку 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

Ссылки:

Эксперимент от 26.04.2015

  1. Создал файл /etc/modprobe.d/kvm.conf и в нем написал:

     options kvm allow_unsafe_assigned_interrupts=1
    
  2. В файле /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

  3. В файл /etc/initramfs-tools/modules добавил строчку:

     pci_stub ids=10de:0fd2
    

    Потом запустил update-initramfs -u

  4. Создал с муками виртуальную машину с чипсетом Q35

  5. Установил в нее Windows 7 Ultimate 64 bit

  6. Поставил паравиртуальные драйвера для сети, balloon

  7. Скачал драйвер с сайта NVIDIA. Провел некоторые подготовительные действия: см. http://club.dns-shop.ru/expert/330983/ Установил драйвер.

    Однако, после установки, показывает: недостаточно свободных ресурсов, код 12.

Дальше нужно экспериментировать с vfio-vga: https://bbs.archlinux.org/viewtopic.php?id=162768

Источники:

Эксперимент от 30.04.2015

  1. Создал файл /etc/modprobe.d/kvm.conf и в нем написал:

     options kvm allow_unsafe_assigned_interrupts=1
    
  2. Добавил модули в /etc/modules:

     pci_stub
     vfio
     vfio_iommu_type1
     vfio_pci
     vfio_pci_vga
     kvm
     kvm_intel
    
  3. В файл /etc/initramfs-tools/modules добавил строчку:

     pci_stub ids=10de:0fd2
    
  4. Запустил sudo update-initramfs -u

  5. Перезагрузился. Проверить, что видеокарта использует драйвер pci-stub:

     dmesg | grep pci-stub
    
  6. Создадим диск для виртуальной машины:

     qemu-img create -f raw -o size=16G Win7.img
    
  7. Создаем скрипт 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

  8. Создаем скрипт 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 \
    
  9. Запускаем и устанавливаем виртуалку. Это можно сначала сделать, не пробрасывая карту в виртуалку.

  10. Пробрасываем видеокарту. В Винде в свойствах устройства должно быть:

    PCI\VEN_10DE&DEV_0FD2&SUBSYS_0957152D
    
  11. Устанавливаем драйвера и все такое. После установки и перезагрузки виртуалки, все равно код 12 (не хватает ресурсов для использования вируталки).

Sidebar is under construction

Clone this wiki locally