Renderização remota fora da tela

10

Meu laboratório de pesquisa recentemente adicionou um servidor que possui uma placa gráfica NVIDIA robusta, que gostaríamos de usar para fazer cálculos científicos. Como não é uma estação de trabalho, teremos que executar nossos trabalhos remotamente, por meio de uma conexão ssh. A maioria de nossos aplicativos exige a renderização de opengl para um buffer fora da tela e, em seguida, a análise de imagem do resultado no CUDA.

Minha investigação inicial sugere que o encaminhamento do X11 é uma péssima idéia, porque a renderização do opengl ocorrerá na máquina cliente (ou melhor, no servidor X11 - que convenção de nomenclatura confusa!) E sofrerá gargalos de rede ao enviar nossas texturas maciças. Nunca precisaremos exibir a saída, portanto, parece que o encaminhamento do X11 não deve ser necessário, mas o Opengl precisa que o $ DISPLAY seja definido como algo válido ou nossos aplicativos não serão executados. Tenho certeza que existem fazendas de renderização que fazem isso, mas como isso é realizado? Acho que esse é provavelmente um problema simples de configuração do X11, mas não estou familiarizado com ele para saber por onde começar.

Estamos executando o servidor Ubuntu 10.04, sem gdm, gnome, etc instalado. No entanto, o pacote xserver-xorg está instalado.

redmoskito
fonte
Gostaria de tentar <code> x11vnc </ code>, mas é bastante improvável que o trabalho
Hubert Kario

Respostas:

6

Já faz um tempo desde que eu fiz essa pergunta, então pensei em mencionar a solução que finalmente usamos.

Seqüestrando a tela local do X

No final, acabei de executar os programas opengl remotos na tela X local do servidor. A máquina estava executando o Ubuntu server edition e não estava executando um xserver como padrão, então eu tive que configurar um xserver para executar na inicialização (acabei de instalar o pacote ubuntu-desktop do Ubuntu, matando um mosquito com uma marreta) e, em seguida, me dei acesso à tela X usando estes comandos como root: "export DISPLAY =: 0.0; xhost + local:". Então eu poderia ssh na máquina, chame "export DISPLAY =: 0.0" e execute meus programas opengl normalmente. Qualquer pessoa sentada na máquina remota veria uma janela e assistia ao meu programa em execução, mas não temos um monitor conectado, então isso não foi um problema.

É importante usar alguma forma de renderização fora da tela, porque a leitura de pixels diretamente do buffer de cores na tela pode resultar em dados de lixo se a janela ficar obscurecida por outra janela. Como você não pode ver a tela X, é difícil saber se isso aconteceu. A renderização fora da tela (por exemplo, objetos Framebuffer (fbo) ou pbuffers) não apresenta esse problema.

Seqüestrar o Xscreen local do servidor não é uma solução ideal, então, aqui estão algumas alternativas que encontrei ao longo do caminho:

Virtual Framebuffers

O Xvfb é uma opção, mas não funcionou para mim, porque o OpenGL não estava se beneficiando da aceleração de hardware e os objetos buffer de quadro não eram suportados, o que é necessário para a interoperabilidade do CUDA com o OpenGL. No entanto, essa pode ser uma opção viável onde o seqüestro da tela local não é aceitável ou o usuário não pode obter privilégios de xhost.

VirtualGL

No site do VirtualGL:

O VirtualGL é um pacote de código aberto que oferece a qualquer software de exibição remota Unix ou Linux a capacidade de executar aplicativos OpenGL com aceleração total de hardware 3D.

É exatamente isso que eu quero, e parece muito promissor, mas não tive tempo para lidar com uma nova dependência de biblioteca, por isso não a testei. Meu palpite é que essa é a solução ideal depois que eu puder compilá-la, instalá-la e configurá-la. É isso que o VirtualBox e alguns servidores VNC usam para oferecer suporte a 3D acelerado por hardware.

redmoskito
fonte
0

você pode executar um buffer de quadro virtual vfb na máquina, como um X11 fictício. Costumávamos executar aplicativos que tinham para abrir um Xwindow que nunca vimos e apenas instalamos o vfb e exportamos o $ DISPLAY para isso - como uma tela no cli HTH

Chris
fonte
2
Obrigado pela dica! Comecei a pesquisar no xvfb e parece que a renderização não usa hardware gráfico, mas é renderizada na memória virtual. Alguém pode confirmar / negar isso? Se for esse o caso, acho que essa solução não será boa, pois queremos aproveitar o poder da nossa placa de vídeo.
Redmoskito 6/10/10