Como salvar o sistema de jogo do PC doméstico por meio da virtualização

Graças à competição e ao desenvolvimento do progresso científico e técnico, os PCs modernos permitem executar muitas tarefas simples e complexas ao mesmo tempo, por exemplo, reproduzir e reproduzir vídeos na TV, renderizar gráficos e ler notícias na Internet, distribuir torrents em paralelo etc. etc. Muitos vão além e usam vários PCs para trabalho e entretenimento. No entanto, com a ajuda das tecnologias de virtualização, por um lado, você pode expandir os recursos do seu PC e, por outro lado, economizar dinheiro, porque de fato, você pode executar vários sistemas operacionais no mesmo hardware ao mesmo tempo.


Este artigo terá configurações de host hospedadas especificamente para uso em "casa", ou seja, falar sobre GPU PASSTHROUGH .

1. Introdução


Primeiro, algumas palavras sobre virtualização em geral. De acordo com a Wikipedia :
A virtualização é o fornecimento de um conjunto de recursos de computação ou sua combinação lógica, abstraídos da implementação de hardware e, ao mesmo tempo, fornece isolamento lógico um do outro dos processos de computação em execução no mesmo recurso físico.
Isso é alcançado com a ajuda de aplicativos (por exemplo, VirtualBox, VMware) e no nível de sistemas que suportam a virtualização de hardware (por exemplo, KVM, ESXi, Hyper-V). No último caso, a perda de desempenho comparada aos sistemas nativos é mínima .

A seguir, o artigo descreverá as configurações do sistema de virtualização de código aberto Proxmox porque é moderadamente amigável, há acesso fácil ao console através de um formulário da web e também é baseado em um monte de Debian + kvm, que possui muitos guias e descrições na rede , ou seja, documentação incluindo e em russo

Requisitos de hardware


Vamos precisar de:

- processador e placa-mãe com suporte para VT-x, VT-d da Intel ou AMD-Vi, IOMMU da AMD. Não seja preguiçoso e especifique se sua cópia suporta esses requisitos.

Quanto às placas-mãe. Eu categoricamente não recomendo dirigir ferro com fiação medíocre na placa de alimentação. No Z270 e no Z390, ignore a zona laranja ou deixe-a trabalhar em estoque.

  • 2 placas de vídeo, um jogo (na rede, para menos problemas ao encaminhar para a máquina virtual, elogiam os vermelhos, mas, pessoalmente, tudo funcionou com a placa de vídeo das verdes), o segundo para o host. No meu caso, ele está integrado ao processador.
  • 1-2 monitores e cabos para eles, a fim de
  • um par de conjuntos de teclado + mouse para facilitar o trabalho e a configuração de sistemas
  • um segundo PC ou tablet conectado à rede local para fazer configurações através de um formulário da Web.

Instalação e configurações


Eu usei a seguinte configuração de jogo:

- O PC para a configuração do host foi construído longe de ser a melhor placa-mãe, mas nos fóruns em inglês é muito elogiado por essa empresa porque seu hardware é mais adequado para essas coisas:
Processador - i7 8700k
Mãe - ASRock Z390M Pro4
Placa de vídeo - INNO3D GeForce GTX 1070 iChill X4
- segundo PC (Morefine-M1s Mini-PC),
- 2 ratos,
- 1 teclado no host, em outros dispositivos que usei software,
- 3 conexões com o monitor Dell U2713HM (VGA - para a placa de vídeo integrada, HDMI - para a GTX1070, no DVI existe um Mini-PC. A alternância entre os sinais de vídeo foi realizada através do menu do monitor)

Estágio 0 - Na placa-mãe, ative VT-d: Ativar, Tecnologia de virtualização Intel: Ative, adaptador Graphx primário: VGA, acima de 4G Decodificação: Ative. Se possível, selecione aquele em que o host funcionará, ou seja, placa gráfica mais fraca e mude para ela.

1º estágio - Instale o Proxmox no host. Para fazer isso:

1.1 Faça o download da imagem do disco no site oficial

1.2 Gravamos a imagem na unidade flash usando programas especiais

1.3 Inicializamos a partir da unidade flash USB e executamos a instalação indicando qual disco rígido instalar, inserimos a senha do futuro usuário root e também definimos explicitamente as configurações de rede.

2º estágio - Conecte-se através de uma rede através de uma interface da web usando um segundo PC ou
tablet (no meu caso, era um Mini-PC) para o host e configure o Proxmox para este guia através de um console de texto.

imagem

Há uma pequena nuance que pode custar software, mas eu decidi que mudar a placa-mãe anterior seria mais fácil, porque O conselho da Gigabyte não atendeu a esse requisito:
1) Execute o "dmesg | comando grep ecap ».

2) Nas linhas da IOMMU, o valor hexadecimal após "ecap" indica se há suporte para o remapeamento de interrupção. Se o último caractere desse valor for 8, 9, a, b, c, d, e ou f, o remapeamento de interrupção será suportado. Por exemplo, "ecap 1000" indica que não há suporte para remapeamento de interrupção. "Ecap 10207f" indica suporte a remapeamento de interrupção, pois o último caractere é um "f".

O remapeamento de interrupção será ativado apenas se todo IOMMU suportar.
Se a condição for atendida, continue.

Portanto, as configurações são:

Abrimos o arquivo com um comando do console (você não precisa inserir o símbolo de rede dupla, portanto separarei os comandos do texto no texto do arquivo)

## nano /etc/default/grub 

faça a substituição

 GRUB_CMDLINE_LINUX_DEFAULT="quiet" 

para processadores Intel

 GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on" 

para processadores AMD

 GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on" 

Em seguida, damos o comando

 ## update-grub 

então reinicializamos o host pela interface da web

Arquivo grub do PC no artigo
 # If you change this file, run 'update-grub' afterwards to update # /boot/grub/grub.cfg. # For full documentation of the options in this file, see: # info -f grub -n 'Simple configuration' GRUB_DEFAULT=0 GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="Proxmox Virtual Environment" GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on" GRUB_CMDLINE_LINUX="" # Disable os-prober, it might add menu entries for each guest GRUB_DISABLE_OS_PROBER=true # Uncomment to enable BadRAM filtering, modify to suit your needs # This works with Linux (no patch required) and with any kernel that obtains # the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...) #GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef" # Uncomment to disable graphical terminal (grub-pc only) #GRUB_TERMINAL=console # The resolution used on graphical terminal # note that you can use only modes which your graphic card supports via VBE # you can see them in real GRUB with the command `vbeinfo' #GRUB_GFXMODE=640x480 # Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux #GRUB_DISABLE_LINUX_UUID=true # Disable generation of recovery mode menu entries GRUB_DISABLE_RECOVERY="true" # Uncomment to get a beep at grub start #GRUB_INIT_TUNE="480 440 1" 


Adicione os drivers necessários ao arquivo de configuração

 ## nano /etc/modules 

 # /etc/modules: kernel modules to load at boot time. # # This file contains the names of kernel modules that should be loaded # at boot time, one per line. Lines beginning with "#" are ignored. vfio vfio_iommu_type1 vfio_pci vfio_virqfd 

Escrevemos no console

 ## lspci 

Uma lista de dispositivos disponíveis para encaminhamento será exibida na tela; encontraremos a unidade com a placa de vídeo que nos interessa; no meu caso, são 2 dispositivos no grupo de placas de vídeo e soam nos endereços 01: 00.0 e 01: 00.1, para registrar imediatamente o grupo.

 ## nano /etc/pve/qemu-server/vmid.conf 

 hostpci0: 01:00 

Escrevemos um comando no console para determinar o modelo e seu ID

## lspci -n -s 01:00
01: 00.0 0300: 10de: 1b81 (rev a2)
01: 00.1 0403: 10de: 10f0 (rev a1)

Agora edite o arquivo para nossa placa de vídeo (no seu caso, o ID será diferente)

 ## nano /etc/modprobe.d/vfio.conf 

 options vfio-pci ids=10de:1b81,10de:10f0 

Colocamos a folha preta do motorista

 ## nano /etc/modprobe.d/blacklist.conf 

 blacklist radeon blacklist nouveau blacklist nvidia 

Agora criamos através da interface da web e editamos o arquivo de configurações da máquina virtual através do console. Aqui a linha "args:" resolve, porque sem ele, o driver da placa de vídeo detectará a virtualização, mas alterando o nome do equipamento, mais precisamente, hv_vendor_id = willitwork, removemos o problema com o erro 43 , que o driver de vídeo do dispositivo pode gerar. Há um número de máquina virtual no proxmox usado como um nome.

 ## nano /etc/pve/qemu-server/<vmid>.conf 

 args: -cpu 'host,+kvm_pv_unhalt,+kvm_pv_eoi,hv_vendor_id=willitwork,kvm=off' ..... bios: ovmf ..... hostpci0: 01:00.0,pcie=1 ..... machine: q35 

Arquivo de configurações da máquina virtual do PC no artigo
 args: -cpu 'host,+kvm_pv_unhalt,+kvm_pv_eoi,hv_vendor_id=willitwork,kvm=off' bios: ovmf boot: dcn bootdisk: sata0 cores: 8 cpu: host hostpci0: 01:00.0,pcie=1 ide2: local:iso/ru-en_windows_10_1803_x86-x64.iso,media$ machine: q35 memory: 16384 net0: e1000=EA:20:FA:6A:D6:A0,bridge=vmbr0 numa: 0 ostype: win10 sata0: local-lvm:vm-100-disk-0,size=120G scsihw: virtio-scsi-pci smbios1: uuid=751edeca-d249-4c0d-9ded-b59d929df0f1 sockets: 1 usb0: host=1-8.4 usb1: host=1-8.3 vmgenid: b75aeb27-3102-458d-8e23-18cd27796dc1 


Agora, reinicie o host e inicie a máquina virtual.

3ª etapa - Por meio do Remote Video Console, instale o Windows e os drivers. No meu caso, o Windows primeiro reconheceu o driver de vídeo proxmox por trabalhar no console de vídeo, depois encontrou o driver para o GTX1070 e, após a atualização pela Internet (pesquisa forçada de drivers na rede), baixou e instalou o driver necessário para a placa de vídeo do jogo.

4º estágio - Reinicie a máquina virtual, alterne a exibição do fluxo de vídeo no monitor para o conector da placa de vídeo e ... no meu caso, tudo funcionou imediatamente, sem erros 43 ... Ao mesmo tempo, a área de trabalho é definida como o número 2.

Tentei lançar o vídeo Blue-ray - não há problema, não houve atrasos e frisos com a sequência de vídeo, lancei o Warhammer online - ele foi iniciado e era confortável jogar em PvP, lancei o GTA5, a história apareceu, filmei com bastante facilidade. Visualmente, não há perdas de desempenho.

Se precisarmos encaminhar todo o disco rígido, no arquivo de configurações da máquina virtual, precisamos adicionar a linha:
ide0: volume = / dev / sda

ou
sata0: volume = / dev / sda

Especificamente, qual sda / sdb / sdc / etc. pode ser especificado na interface da web.

imagem

PS

Para um barril de mel, há uma mosca na pomada. O som integrado não pode ser emitido separadamente, pois em seu grupo há outros dispositivos que, depois de encaminhar a placa de som para a máquina virtual, desaparecem para o host até a próxima sobrecarga do host. No meu caso é

00: 1f.0 ponte ISA: Intel Corporation Device a305 (rev 10)
00: 1f. 3 Dispositivo de áudio: Intel Corporation Device a348 (rev 10)
00: 1f.4 SMBus: Dispositivo Intel Corporation a323 (rev 10)
00: 1f.5 Controlador de barramento serial [0c80]: Dispositivo Intel Corporation a324 (rev 10)
00: 1f.6 Controlador Ethernet: Intel Corporation Device 15bc (rev 10)

I.e. através de um cabo de vídeo para um monitor ou placa de som externa. As portas USB são roteadas sem problemas. Infelizmente, atualmente não está resolvido. Existe a opção de conectar remotamente de outro PC ao jogo, via RDP ou SPICE . Nesse caso, tudo ficará bem

Nem sempre o encaminhamento da placa de vídeo funciona perfeitamente, como no meu caso, o erro 43 ou algo mais atrapalha. Outras configurações que podem ajudar estão descritas aqui . Idealmente, você precisa procurar na rede por configurações bem-sucedidas e focar nelas, como esta era para mim. Além disso, também há uma lista de hardware que me permite obter o mesmo que eu, mas não está completa.

UPDATE1:
Algumas notas na periferia:
1. Como obter o teclado da porta PS / 2 para a VM:
primeiro insira o comando no console
## dmesg | entrada grep
Estamos à procura de um texto no texto
...
input: AT Translated Set 2 keyboard as / devices / platform / i8042 / serio0 / input / input 2
...
Lembre-se do número 2 no final, pode ser diferente. Em seguida, no arquivo de configurações da VM, adicione à linha:
args: -object 'input-linux, id = kbd, evdev = / dev / input / evento 2 , grab_all = ativado, repita = ativado'
inserindo 2 no final do evdev = / dev / input / event 2

Para um mouse - da mesma forma.

2. Por USB:
Quanto aos dispositivos USB, tudo é mais simples, os dispositivos são rolados diretamente do formulário da Web por ID ou você pode totalmente portar a porta. No entanto, há uma nuance - se, por algum motivo, você não puder, como eu, lançar um dispositivo de áudio na VM, porque ele está contido em um grupo com controladores de chave sem os quais o host não pode funcionar completamente; o encaminhamento da porta / dispositivo via USB resolve esse problema, mas o som pode começar a cair após algum tempo, assobios / zumbidos e outros ... etc., ao mesmo tempo no nativo tudo será ótimo para o sistema. Nesse caso, é necessário encaminhar não a porta / dispositivo, mas o próprio controlador USB como dispositivo PCIe, de acordo com o método especificado no artigo. E tudo vai melhorar drasticamente. Mas, ao mesmo tempo, após iniciar a VM com essas configurações, não será mais possível encaminhar outros dispositivos desse controlador pelo host.

3. Os discos rígidos podem ser encaminhados através de um controlador como um dispositivo PCIe, de acordo com o método especificado no artigo (não recomendo encaminhar o controlador integrado à placa-mãe, apenas conectado ao PCIe) ou diretamente:
vá para
## cd / dev / disk / by-id
através de dir olhamos lista ...
copiamos linhas no formato ata-WDC_WD40EFRX-68WT0N6_WD-WCC4E1AC9SX9, no qual a interface de conexão, marca e número de série do disco rígido são registrados. Em seguida, abra o arquivo de configuração da VM e escreva:
sata1: volume = / dev / disco / por-ID / ata-WDC_WD40EFRX-68WT0N6_WD-WCC4E1AC9SX9
e tudo funciona, mantendo em mente que sata0-sata5, ou seja, para uma VM, o número de discos assim conectados, incluindo os virtuais, não pode exceder 6pcs.

Source: https://habr.com/ru/post/pt437598/


All Articles