Usar a GPU NVidia da VirtualBox?

29

Como faço para que o convidado do VirtualBox use os gráficos da NVidia?

Configuração do host:

  • Windows 7 x64

  • NVidia Optimus

  • No Painel de controle da NVIDIA , selecionei explicitamente o processador NVIDIA de alto desempenho para:

     C:\Program Files\oracle\VirtualBox\VirtualBox.exe
     C:\Program Files\Oracle\VirtualBox\VBoxSVC.exe
    
  • Quando o VirtualBox está em execução, o software NVidia não o lista como aplicativo que usa a GPU NVidia. Portanto, presumo que o VirtualBox de fato não use a GPU Nvidia.

Hóspede:

  • Windows 7 x64 (ou seja, o mesmo que host)

  • Adições de convidados instaladas

  • Aceleração 3D ativada nas configurações do VirtualBox: Exibir / Vídeo / Ativar aceleração 3D

  • O que o Rhinoceros , um aplicativo compatível com OpenGL relata como adaptador de vídeo:

    Humper
    Chromium
    OpenGL version: 2.1 Chromium 1.9
    Render version: 2.0
    Shading Language: 1.40 - Intel Build 9.17.10.3517
    Driver Date: NA
    Driver Version: NA
    Maximum Texture size: 8192 x 8192
    Z-Buffer depth: 32bits
    Maximum Viewport size: 8192 x 8192
    Total Video Memory: 64 MB
    

    Para mim, parece que a máquina virtual usa a aceleração de hardware 3D do host, mas infelizmente a Intel.

feklee
fonte
2
As VMs não têm acesso direto ao hardware - elas recebem uma GPU virtual. . . pergunta relacionada: superuser.com/questions/395245/…
ernie
6
O @ernie VirtualBox pode oferecer aos hóspedes acesso direto à API OpenGL da GPU do host. Até onde eu sei, isso funciona na minha máquina. Somente o VirtualBox está usando a GPU Intel em vez da GPU NVidia. Cite o manual do VirtualBox : "Com esse recurso, se um aplicativo dentro de sua máquina virtual usar recursos 3D por meio das interfaces de programação OpenGL ou Direct3D 8/9, em vez de emulá-los em software (o que seria lento), o VirtualBox tentará usar hardware 3D do seu host ".
feklee
@feklee O título da pergunta é enganoso: você deseja usar a nVidia GPU for VBox. 'De' também é possível, mas significa sth diferente: Passagem de hardware, ie. acesse a GPU do host diretamente de dentro do VBox.
Larkey # 30/15
askubuntu.com/questions/139320/…
Ciro Santilli escreveu
Encontre sobre "virtualbox passthrough video".
e-info128 24/04

Respostas:

20

Sei que alguns anos se passaram, mas queria responder, já que este post aparece bastante alto quando você pesquisa no Google por "virtualbox 3d multiple GPU". No tempo que passou, as coisas ficaram muito mais simples e melhores.

As pessoas que se deparam com esse tópico provavelmente chegarão aqui porque têm um laptop ou PC com duas GPUs, o que é bastante comum atualmente - principalmente em laptops para jogos. A GPU Intel integrada é usada para renderizar janelas e aplicativos gerais, mas os aplicativos que utilizam a funcionalidade 3D da GPU devem fazer isso por meio da GPU Nvidia de melhor desempenho.

Hoje, eu estava construindo uma VM do Ubuntu no meu laptop para fazer algum desenvolvimento de plataforma cruzada, e tudo estava bem, exceto a VM convidada, que era extremamente lenta e não havia explicação para isso, porque CPU, memória e disco estavam mostrando baixa utilização.

Não demorou muito para descobrir que o desempenho do vídeo estava causando o problema. O lançamento de aplicativos, a maximização / minimização de janelas - tudo o que consideramos garantido em 2019, mas que precisa da aceleração 3D para funcionar a uma velocidade razoável - estava usando a GPU 0.

Foi fácil determinar isso porque o Windows 10 agora pode ver a utilização da GPU usando o "gerenciador de tarefas" e a guia "desempenho". E eu pude ver enquanto movia as janelas, maximizada, minimizada, o que estava sendo feito através da GPU no host. Essa GPU no host é a GPU Intel HD integrada e eu queria usar a NVidia GTX-1050ti, que era GPU1.

Depois de pesquisar, não encontrei nenhum lugar onde você pudesse especificar qual GPU usar. Mas esse tópico, e alguns outros, me lembraram que, nesse tipo de configuração, você precisa acessar o painel de controle da NVidia, depois "gerenciar as configurações 3d" e depois a guia "Configurações do programa".

Você provavelmente não encontrará "Virtualbox" na lista. Mas você pode pressionar o botão "Adicionar" e adicionar o virtualbox.exe. Talvez você precise detalhar a unidade / caminho onde está a instalação da sua caixa virtual. Depois de adicioná-lo, nas configurações abaixo, verifique se o item 2. "Selecione o processador gráfico preferido para este programa" está definido para a GPU que você deseja usar, que no meu caso foi "Processador NVIDIA de alto desempenho" .

Não defina como automático e certamente não como integrado. Obviamente, você precisa das configurações da VM definidas com a caixa de aceleração 3D marcada e das adições de convidado instaladas no host. Porém, depois de definir as configurações 3d do vídeo host, conforme descrito acima, desligue a VM convidada, saia da caixa virtual e, em seguida, reinicie o virtualbox e a VM.

Se você usa o gerenciador de tarefas | desempenho, observa o processo "gerenciador de caixas virtuais" e observa o que a GPU é usada quando você navega na interface do usuário da VM convidada, você deve vê-la usando a melhor GPU agora. Veja a imagem colada abaixo.

Tudo isso dito, não espere poder executar jogos em uma VM convidada. O passo de aceleração 3D ainda não está tão longe assim. Mas você pode esperar ter um SO e interface do usuário modernos em seu convidado e ter uma experiência aceitável. Seria possível jogar jogos mais antigos na VM convidada, como qualquer coisa baseada no directX9. Infelizmente, à medida que a capacidade de virtualizar a GPU evolui, a tecnologia de jogos em 3D evolui mais rapidamente.

Captura de tela

Thomas Carlisle
fonte
2
Fiz uma pequena pesquisa hoje sobre os recursos de aceleração 3D do VirtualBox e VMWare e, a partir de janeiro de 2019, se a aceleração da GPU na VM convidada é importante para você, então escolher o VMWare é sua melhor aposta - especialmente se o sistema operacional convidado for o Windows. Os recursos de aceleração de GPU do suporte do VirtualBox são um pouco menos desenvolvidos, pois você só pode fornecer à VM convidada um máximo de 128 MB de RAM de vídeo e no VMWare permite que até 2 GB sejam alocados na memória de vídeo. O VMWare suporta o DirectX 10 e o Virtualbox suporta o DirectX9. Como eu disse no post, o directx 9 é bastante antigo.
Thomas Carlisle
11
"" Selecione o processador gráfico preferido para este programa "está definido para a GPU que você deseja usar" Não vejo a opção acima. Vejo Ambinetn, Ansiotropic Filtering ... etc, mas nada em "selecionar processador de grapics preferido"
moondra 17/02
Você precisa da passagem do PCI, embora eu ainda não o tenha funcionado no Optimus, ainda acho que com alguns hacks é possível
kensai 03/04
Consegui fazer um truque semelhante para forçar a habilitação da placa nvidea para o virtualbox, mas nenhum dos três controladores gráficos disponíveis fornecidos pelo Virtualbox funcionou corretamente com o meu sistema operacional convidado do Neon KDE. Eu tenho enormes falhas na interface do usuário, portanto, usar a nvidea no meu caso não é uma opção. Graças à proposta de @ThomasCarlisle, tentarei jogar com o VMware.
Arkemlar 04/09
17

Não é possível conceder acesso total à GPU do convidado. Se uma máquina virtual tivesse acesso direto à sua GPU enquanto o host a estava usando, o Bad Things TM aconteceria porque compartilhar memória entre dois computadores efetivamente diferentes não é uma coisa; ponteiros e endereços e outros enfeites seriam muito diferentes entre eles. (Nenhuma placa disponível para o consumidor suporta a manutenção de dois computadores ao mesmo tempo.)

Existem, no entanto, algumas coisas que você pode tentar. Primeiro, defina o processador gráfico preferido como bom no Painel de controle da NVidia ( Configurações 3DGerenciar configurações 3DProcessador gráfico preferido ). Isso pode fazer o VirtualBox ir com a placa NVidia para OpenGL.

Se isso não ajudar, tente instalar o Guest Additions no modo de segurança no convidado.

Por fim, nos hosts Linux , você pode tentar passar a GPU para a máquina virtual, mas isso funcionará apenas para placas PCI e não consegui descobrir se a sua é PCI e, mesmo assim, você tem uma boa chance de arrancando a GPU do host ou causando outros problemas. Primeiro encontre o endereço PCI (barramento, dispositivo e função) da boa placa. Defina o chipset da sua VM como ICH9; isso não quebrou nada imediatamente quando eu tentei. Em seguida, use o utilitário VBoxManage para anexar o cartão:

vboxmanage modifyvm "Your VM Name" --pciattach BB:DD.F@bb:dd.f

Substitua Your VM Nameconforme apropriado. BBé o número do barramento da sua GPU no host; DDé o dispositivo; Fé a função Após o @, digite o slot PCI que estará no convidado. Por exemplo:

vboxmanage modifyvm "Windows 7 x64" --pciattach 01:[email protected]

Em geral, a passagem da GPU é mais provável em um host Linux. Consulte Como configurar uma máquina de jogos com passagem GPU .

Ben N
fonte
2
A premissa de que anexar uma GPU a uma VM é uma "coisa ruim" está incorreta; existe uma grande comunidade de pessoas que deseja fazer isso para criar VMs de jogos em hipervisores bare-metal. Se alguém quisesse fazer isso no Linux, seria necessário colocar na lista negra a GPU PCIe para que o kernel vá apenas para os gráficos do chipset; isso evita os problemas de "memória compartilhada". Evitar que o Windows pegue a placa é provavelmente o problema mais difícil de resolver para essa pergunta, e provavelmente exigiria a desativação do dispositivo ou a desinstalação do optimus e do driver da nvidia.
Tim G
@ TimG Bom ponto, eu esclarei meu post um pouco. Obrigado!
Ben N
@ BenN Ótima resposta, mas eu preciso de um ponto a ser esclarecido. Você já tentou isso em um host do Windows? O manual diz que isso está disponível apenas em hosts Linux ( virtualbox.org/manual/ch09.html#pcipassthrough ) e eu mesmo não tive sorte em trabalhar com um host Windows.
Baris Demiray 22/01
@BarisDemiray Se bem me lembro, o comando não relatou nenhum erro quando tentei, mas acho que não testei se a VM era capaz de usar o dispositivo. Foi há muito tempo, no entanto, desculpe.
Ben N
Olá @BenN, muito obrigado por reservar um tempo para responder. Foi exatamente o que aconteceu quando tentei, sem erros na linha de comando e ainda sem placa gráfica na VM.
Baris Demiray