Como usar o 3D com eficiência por meio de uma conexão remota?

11

Eu tenho um PC (cliente) fraco, mas com desempenho 3D aceitável, e um PC (servidor) forte, que deve ser capaz de executar um aplicativo usando o OpenGL duas vezes, ou seja, uma vez localmente e uma vez remotamente para o cliente. Atualmente, gosto ssh -Xdele, mas a saída do console do cliente indica a renderização do software e eu recebo apenas 3 quadros por segundo (fps). Na verdade, a criptografia do ssh não é necessária, pois é em uma LAN, mas é o que eu já sei para aplicativos remotos ...

Então, como o desempenho do cliente pode ser aumentado? Minhas idéias são

  • use a aceleração de hardware, mas a do servidor ou do cliente e como?
  • use algo diferente de ssh

Eu sei que, em resolução total e sem compactação sofisticada, uma LAN de 100 Mbit / s não produz mais fps, mas é uma aplicação em janelas de ca. 800x450, portanto teoricamente até 12 fps (a 24 bits / pixel) deve ser possível usando dados gráficos não compactados. E talvez seja possível algo melhor usando a GPU do cliente ou alguma compactação inteligente.

-

edit Acontece que o que eu quero é basicamente uma versão local do que, por exemplo, o onlive e o gaikai oferece. Existe algo parecido com isto para Linux (e possivelmente gratuito)?

-

edit2 O VirtualGL parece a melhor solução (embora atualmente não esteja funcionando para mim), mas gostaria de saber se é possível fazer renderização de hardware no cliente também

Tobias Kienzler
fonte
Acompanhamento, já que os PCs estão próximos um do outro, e me pergunto por que não usar um PC para dois usuários: Um PC pode ser usado por dois usuários ao mesmo tempo via monitor duplo?
Tobias Kienzler

Respostas:

6

Você pode conferir o VirtualGL junto com o TurboVNC e fornecer 20fps a 1280x1024 em 100 Mbit ( consulte a Wikipedia ).

Observe que ele pode não funcionar com todos os aplicativos, depende de como eles usam o OpenGL.

Gert
fonte
Marque com +1 este som exatamente como o que estou procurando, obrigado! (Eu vou aceitar a resposta depois (espero) testes bem-sucedidos)
Tobias KIENZLER
aww, meu Radeon parece não suportar pbuffer, o que é necessário :(
Tobias Kienzler
Agora tenho um novo PC que suporta pbuffer, mas infelizmente vglrun segfaults agora. Isso pode ocorrer porque o servidor é executado em 64 bits enquanto o cliente está em 32 bits?
Tobias Kienzler
(aceite uma vez que a resposta é correta ea segfault é uma questão separada)
Tobias KIENZLER
1

Esta é uma pergunta antiga, mas ainda é relevante. Há um manual passo a passo sobre como configurar e solucionar problemas da renderização 3D X11 do aplicativo remoto no hardware local: Aceleração do hardware OpenGL por meio da conexão remota x11 ssh

O jogo Chromium BSU é usado no artigo como exemplo. É executado com 5-8 FPS com renderização de software padrão por meio de conexão SSH, 30 FPS com renderização indireta de hardware e> 30 FPS com conexão TCP X11 não criptografada. Observe que ele funciona apenas para alguns aplicativos.

Breve resumo do artigo

A renderização indireta e as conexões TCP estão desabilitadas na configuração padrão do servidor X11. +iglx and -listen tcpparâmetros habilitá-los. Também existe uma LIBGL_ALWAYS_INDIRECT=1variável que força a renderização indireta no cliente X11.

evpo
fonte
Obrigado pela sua resposta. É muito apreciado observar a essência das postagens do blog aqui, caso o link acabe (embora você exija apenas "usar lightdmcom iglx" tal). No momento, não preciso mais disso, mas vou tentar na próxima vez;) Talvez alguém também ache suas descobertas úteis.
Tobias KIENZLER
Bom ponto. Eu adicionei os principais detalhes do artigo.
evpo
0

Isso pode ser verdade se você tiver dois PCs de mesa. Mas se você tem um laptop WiFi antigo que pode ser usado em qualquer lugar de sua casa (por exemplo, Ti5600 com Ubuntu 10.04 como seu cliente, e um PC de mesa com uma placa GTX junto com um roteador Wi-Fi sobressalente, é recomendável ter um cliente OpenGL remoto.

O problema está em obter um contexto OpenGL remoto (do lado do servidor). Você pode executar o ssh -X no seu cliente. Porém, se você executar o glxinfo no sistema remoto, obterá o seu cliente local, o que o colocará de volta onde você começou. Você pode definir sua variável de ambiente DISPLAY para esse host remoto e usar essa tela como um segundo monitor, o que ainda não ajuda.

Uma outra solução é escrever seus aplicativos de desktop para que eles possam usar um contexto GLX remoto:

http://arrayfire.com/remote-off-screen-rendering-with-opengl/

Keith
fonte
Obrigado. Então, existe uma alternativa para o protocolo X transmitir 3D? Desculpe, eu deveria ter colocado servidor e cliente entre aspas, só queria ter palavras mais curtas para o PC forte e fraco - ambos os PCs devem ser usados ​​como front-ends ao mesmo tempo como se fossem PCs de mesa, mas com todo o trabalho da CPU e acesso à RAM feito pelo melhor PC. O PC fraco não possui energia e CPU suficientes para executar o aplicativo em si
Tobias Kienzler 30/12/2010
Não que eu esteja ciente. O tipo de 3D em que você está pensando exige muita largura de banda.
Keith
isso é verdade :( OTOH, OnLive , Gaikai e outros afirmam isso é mesmo possível para os jogos através da Internet ...
Tobias KIENZLER
Ok, dei uma olhada. Também não acho que eles estejam transmitindo os quadros dessa maneira. Eles estão baixando e executando localmente, e apenas transmitindo informações de controle e atualização, exatamente como os jogos online existentes. Mesmo se o fizessem, teria que ser de baixa resolução para alta compactação.
Keith
Pelo que entendi, eles rodam o jogo remotamente e apenas transmitem um fluxo HD do vídeo enquanto recebem eventos de teclado e mouse. Mas é claro que não se pode transmitir 30 fps em HD através da internet sem qualquer compressão ...
Tobias KIENZLER