¿Cómo usar eficientemente 3D a través de una conexión remota?

11

Tengo una PC (cliente) débil pero con un rendimiento 3D aceptable, y una PC (servidor) fuerte que debería ser capaz de ejecutar una aplicación usando OpenGL dos veces, es decir, una vez localmente y otra remotamente para el cliente. Actualmente, me ssh -Xgusta, pero la salida de la consola del cliente indica que se usa el procesamiento de software y solo obtengo 3 cuadros por segundo (fps). En realidad, el cifrado de ssh no es necesario ya que está en una LAN, pero es lo que ya sé para aplicaciones remotas ...

Entonces, ¿cómo se puede aumentar el rendimiento del cliente? Mis ideas son

  • usa aceleración de hardware, pero ¿la del servidor o la del cliente y cómo?
  • usar algo diferente a ssh

Lo sé, en resolución completa y sin compresión sofisticada, una LAN de 100 Mbit / s no producirá más fps, pero es una aplicación en ventana de aprox. 800x450, por lo que teóricamente, hasta 12 fps (a 24 bits / píxel) deberían ser posibles utilizando datos gráficos sin comprimir. Y quizás algo mejor sea posible usando la propia GPU del cliente o alguna compresión inteligente.

-

editar Resulta que lo que quiero es básicamente una versión local de lo que, por ejemplo, ofrece onlive y gaikai . ¿Hay algo como esto para Linux (y posiblemente gratis)?

-

edit2 VirtualGL parece la mejor solución (aunque actualmente no funciona para mí), pero me pregunto si también es posible hacer renderizado de hardware en el cliente

Tobias Kienzler
fuente
Seguimiento, ya que las PC están una al lado de la otra de todos modos y me pregunto por qué no usar una PC para dos usuarios: ¿pueden usar una PC dos usuarios al mismo tiempo a través de un monitor dual?
Tobias Kienzler

Respuestas:

6

Puede consultar VirtualGL junto con TurboVNC que debería proporcionarle 20 fps a 1280x1024 en 100 Mbit ( consulte wikipedia ).

Tenga en cuenta que puede no funcionar con todas las aplicaciones, depende de cómo utilicen OpenGL.

Gert
fuente
+1 suena exactamente como lo que estoy buscando, ¡gracias! (Aceptaré la respuesta después (con suerte) de una prueba exitosa)
Tobias Kienzler
aww, mi Radeon no parece admitir pbuffer que se requiere :(
Tobias Kienzler
Ahora tengo una nueva PC que admite pbuffer, pero desafortunadamente vglrun ahora se daña . ¿Podría ser esto porque el servidor se ejecuta en 64 bits mientras que el cliente está en 32 bits?
Tobias Kienzler
(aceptado ya que la respuesta es correcta y la segfault es una pregunta separada)
Tobias Kienzler
1

Esta es una vieja pregunta pero sigue siendo relevante. Hay un manual paso a paso sobre cómo configurar y solucionar problemas de renderizado 3D X11 de aplicaciones remotas en hardware local: aceleración de hardware OpenGL a través de conexión remota ssh x11

El juego Chromium BSU se usa en el artículo como ejemplo. Funciona con 5-8 FPS con representación de software predeterminada a través de conexión SSH, 30 FPS con representación indirecta de hardware y> 30 FPS con conexión TCP X11 sin cifrar. Tenga en cuenta que solo funciona para algunas aplicaciones.

Breve resumen del articulo

La representación indirecta y las conexiones TCP están deshabilitadas en la configuración predeterminada del servidor X11. +iglx and -listen tcplos parámetros los habilitan. También hay una LIBGL_ALWAYS_INDIRECT=1variable que fuerza el renderizado indirecto en el cliente X11.

evpo
fuente
Gracias por tu respuesta. Sin embargo, es de agradecer observar la esencia de las publicaciones de blog vinculadas aquí en caso de que el enlace se bloquee (incluso si, por ejemplo, simplemente dice "usar lightdmcon iglx"). Actualmente ya no necesito esto, pero lo intentaré la próxima vez;) Quizás alguien más también encuentre útiles sus hallazgos.
Tobias Kienzler
Buen punto. Agregué los detalles principales del artículo.
evpo
0

Eso podría ser cierto si tiene dos PC de escritorio. Pero si tiene una vieja computadora portátil WiFi utilizable en cualquier lugar de su hogar (por ejemplo, Ti5600 con Ubuntu 10.04 como su cliente, y una PC de escritorio con una placa GTX junto con un enrutador Wi-Fi de repuesto, tener un cliente OpenGL remoto parece una buena idea.

El problema es obtener un contexto OpenGL remoto (del lado del servidor). Puede ejecutar ssh -X en su cliente. Pero si ejecuta glxinfo en el sistema remoto, obtiene su cliente local, que lo devuelve a donde comenzó. Puede configurar su variable de entorno DISPLAY en ese host remoto, y puede usar esa pantalla como un segundo monitor, que todavía no ayuda.

Otra solución es escribir sus aplicaciones de escritorio para que puedan usar un contexto GLX remoto:

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

Keith
fuente
Gracias. Entonces, ¿hay una alternativa para que el protocolo X transmita 3D? Lo siento, debería haber entre comillas al servidor y al cliente, solo quería decir palabras más cortas para la PC fuerte y débil: ambas PC deberían usarse como front-end al mismo tiempo que si fueran PC de escritorio pero con todo el trabajo de CPU y acceso a RAM realizado por la mejor PC. La PC débil no tiene suficiente potencia de CPU y RAM para ejecutar la aplicación en sí misma
Tobias Kienzler
No que yo sepa. El tipo de 3D en el que está pensando requiere MUCHO ancho de banda.
Keith
eso es cierto :( OTOH, onlive , gaikai y otros afirman que esto es incluso posible para juegos en Internet ...
Tobias Kienzler
Ok, eché un vistazo. Tampoco creo que estén transmitiendo las tramas de esa manera. Están descargando y ejecutando localmente, y solo transceden información de control y actualización, al igual que los juegos en línea existentes. Incluso si lo hicieran, tendría que ser de baja resolución para una alta compresión.
Keith
Según tengo entendido, ejecutan el juego de forma remota y solo transmiten una transmisión HD del video mientras reciben eventos del teclado y el mouse. Pero, por supuesto, uno no podía transmitir 30 fps en HD a través de Internet sin ninguna compresión ...
Tobias Kienzler