Passagem da GPU KVM

1

agora eu sei que esse assunto já foi mencionado antes, mas esses tópicos já estão antigos e um pouco fora de moda.

Por isso, tenho acompanhado recentemente alguns guias diferentes para que esse sistema funcione, principalmente;

link
link

Até agora não estou tendo sorte. Meu sistema consiste em:

Intel Xeon e3-1230V2 with VT-d
Asrock Fatal1ty Pro z77 with VT-d enabled
A nvida 9800gt - for main host
a gtx 780 for windows vm
a gtx 750ti for windows vm

usando o segundo guia eu sou capaz de obter os cartões que eu quero como "reivindicada por stub", mas me deparo com um problema ao tentar executar o vm.

Atualmente, meu sistema está agrupando meu 780 (dispositivo 0000: 01: 00.0) com meu 9800gt (dispositivo 0000: 02: 00.0) juntos, o que me diz que não posso executar o vm, pois não aloquei todo o grupo .

Eu tenho visto mencionar que instalar um patch de substituição acs pode funcionar dividindo os dispositivos em grupos menores para permitir que eu passe a GPU, mas até agora cada tutorial ou tópico apenas diz "compile o patch" ou "add this linha para o cmd ".

Eu não vi em nenhum lugar explicar como instalar o patch no ubuntu 14.04 ou se eu precisar fazer qualquer outra coisa.

Alguém mais conseguiu fazer tudo funcionar?

Toda ajuda é muito apreciada e, se possível, por favor, tente explicar as coisas da maneira mais simples possível. Embora eu conheço o linux, eu não o sei do topo da minha cabeça

Nota: a 9800gt é na verdade a segunda placa do sistema e a disposição não pode ser alterada, então o dispositivo de exibição padrão atualmente vai para o 780

Editar

Acabei de encontrar estes guias para o debian

Patch

#!/bin/bash
# patch --dry-run --verbose -p 1 -i re_xxxxxxxxxxxxx

echo
echo ... PATCHING ... VGA Arbiter
patch -b -p 1 -i re_patch_01_i915_313rc4.patch
echo
echo ... PATCHING ... acs override
patch -b -p 1 -i re_patch_02_override_for_missing_acs_capabilities.patch
echo
echo ... PATCHING ... memleak
patch -b -p 1 -i re_patch_03_fix_memleak.patch
echo
echo ... PATCHING ... read DR6
patch -b -p 1 -i re_patch_04_fix_reading_of_DR6.patch
echo
echo ... PATCHING ... debug registers - has problem, needs to follow DR6 patch
patch -b -p 1 -i re_patch_05_debug_registers.patch
# patch -b -p 1 -i re_debug_registers_RE.patch   # Corrected to add additional lines before DR6 patch runs
echo
echo ... PATCHING ... kernel__gcc
patch -b -p 1 -i re_patch_06_kernel-38-gcc48-2.patch

Compilando

To compile a new kernel
https://wiki.ubuntu.com/Kernel/BuildYourOwnKernel
https://help.ubuntu.com/community/Kernel/Compile
https://wiki.ubuntu.com/KernelTeam/KernelMaintenance
https://www.debian.org/releases/stable/i386/ch08s06.html.en

architecture is "amd64" or "x86_64"

1) download the source into the current directory using "apt-get source linux-image-xxxxx"  where xxxx is the name of the version eg. apt-get source linux-image-3.13.0-32-generic

This should download the tarball(s) and extract the source code into a directory (which should be renamed immediately because all versions use the same directory name !!!)

2) Open the new directory, clean up and prepare
  chmod a+x debian/scripts/*
  chmod a+x debian/scripts/misc/*
  fakeroot debian/rules clean

  and generate the required config by either -
  a) editing using "fakeroot debian/rules editconfigs"  (for all targets, one after another) ... or 
  b) "make menuconfig" and work through the various options. Remember to save before exit
  c) copy the current config from the boot directory as ".config" in the root direcotry for the new kernel and then use  "make oldconfig" ... which will ask a question for the value of each new config option

  Required config options are
    CONFIG_VFIO_IOMMU_TYPE1=y     in Device Drivers. 2 pages back from end
    CONFIG_VFIO=y
    CONFIG_VFIO_PCI=y
    CONFIG_VFIO_PCI_VGA=y
    CONFIG_PCI_STUB=y             in Bus Options, second page down
    HZ_1000=y                     in Processor Type & Features (last page)
    PREEMPT=voluntary

3) apply any patches /// remember to verify that they worked ok (look for fail)
   "sh re_apply_patches.sh > re_output_patch.txt"

4) "fakeroot debian/rules clean"   to remove any old build information / files

5) Ignore modules not created with new parameters ... copy re_modules.ignore to ...debian.master/abi/<previous-version>/modules.ignore

   and ignore other ABI errors by copying re_prevrelease_arch_ignore (rename to  "ignore") to debian.master/abi/<previous-version>/<arch>    eg. to debian.master/abi/3.13.0-32.56/amd64/

6) "DEB_BUILD_OPTIONS=parallel=3 skipmodule=true fakeroot debian/rules binary-headers binary-generic  > re_output_compile.txt"   to generate the deb files which can be installed (second thoughts don't pipe the poutput to a file - it will prevent selection of the CPU type)

7) Install all the Debs with command "sudo dpkg -i linux*<ver>*.deb
eg.   sudo dpkg -i linux*3.13.0-32_3.13.0-32.57*.deb
      sudo dpkg -i linux*3.13.0-32-generic_3.13.0-32.57*.deb

8) go into Synaptic and lock all the newly installed elements (linux-image*, linux-header*, linux-tool*, linx-cloud-tool*) - to prevent the new kernel and components being overwritten in the next upgrade

Não tenho certeza se isso funcionaria no Ubuntu?

    
por jamie evans 01.10.2014 / 10:35

1 resposta

1

Eu sei que este segmento está na verdade perto dos três anos de idade, mas o patch de substituição do ACS está obsoleto porque ele foi compilado no kernel do Ubuntu 4.8. Atualmente instalando o kernel mais novo em um Ubuntu Xenial 16.04 LTS via apt-get install linux-generic-hwe-16.04 você obtém o kernel 4.10 que divide completamente todos os dispositivos PCI em um grupo IOMMU separado. Assim, passar através de cartões gráficos um a um para várias VMs agora é possível com muita facilidade.

    
por Felix H 25.07.2017 / 17:02