Representación remota fuera de pantalla

10

Mi laboratorio de investigación agregó recientemente un servidor que tiene una tarjeta gráfica NVIDIA robusta, que nos gustaría usar para hacer cálculos científicos. Como no es una estación de trabajo, tendremos que ejecutar nuestros trabajos de forma remota, a través de una conexión ssh. La mayoría de nuestras aplicaciones requieren renderizar opengl en un búfer fuera de la pantalla, luego hacer análisis de imagen en el resultado en CUDA.

Mi investigación inicial sugiere que el reenvío de X11 es una mala idea, porque la representación de opengl ocurrirá en la máquina del cliente (o más bien en el servidor X11, ¡qué convención de nomenclatura confusa!) Y sufrirá cuellos de botella en la red al enviar nuestras texturas masivas. Nunca necesitaremos mostrar la salida, por lo que parece que el reenvío X11 no debería ser necesario, pero Opengl necesita que $ DISPLAY se configure como algo válido o nuestras aplicaciones no se ejecutarán. Estoy seguro de que existen granjas de render que hacen esto, pero ¿cómo se logra? Creo que este es probablemente un simple problema de configuración de X11, pero no estoy familiarizado con él para saber por dónde empezar.

Estamos ejecutando el servidor Ubuntu 10.04, sin gdm, gnome, etc. instalado. Sin embargo, el paquete xserver-xorg está instalado.

redmoskito
fuente
Intentaría <code> x11vnc </code>, pero es poco probable que funcione
Hubert Kario

Respuestas:

6

Ha pasado un tiempo desde que hice esta pregunta, así que pensé en mencionar la solución que finalmente utilizamos.

Secuestro de la pantalla X local

Al final, acabo de ejecutar los programas de opengl remotos en la pantalla X local del servidor. La máquina ejecutaba la edición del servidor Ubuntu y no ejecutaba un servidor x por defecto, así que tuve que configurar un servidor x para que se ejecute al inicio (acabo de instalar el paquete ubuntu-escritorio de Ubuntu, matando a un mosquito con un martillo), y luego Me di acceso a la pantalla X usando estos comandos como root: "export DISPLAY =: 0.0; xhost + local:". Entonces podría ingresar a la máquina, llamar a "export DISPLAY =: 0.0" y luego ejecutar mis programas opengl de manera normal. Cualquiera que esté sentado en la máquina remota vería una ventana emergente y vería mi programa en ejecución, pero no tenemos un monitor conectado, así que esto no fue un problema.

Es importante utilizar alguna forma de representación fuera de pantalla, porque leer píxeles directamente desde el búfer de color en pantalla podría generar datos basura si la ventana queda oculta por otra ventana. Como no puede ver la pantalla X, es difícil saber si esto ha sucedido. El renderizado fuera de pantalla (por ejemplo, objetos Framebuffer (fbo) o pbuffers) no tiene este problema.

Secuestrar el Xscreen local del servidor no es una solución ideal, así que aquí hay algunas alternativas que encontré en el camino:

Framebuffers virtuales

Xvfb es una opción, pero no funcionó para mí, porque OpenGL no se estaba beneficiando de la aceleración de hardware, y los objetos framebuffer no eran compatibles, lo cual es necesario para la interoperabilidad de CUDA con OpenGL. Sin embargo, esta podría ser una opción viable donde el secuestro de la pantalla local no es aceptable, o donde el usuario no puede obtener privilegios de xhost.

VirtualGL

Desde el sitio web de VirtualGL:

VirtualGL es un paquete de código abierto que brinda a cualquier software de visualización remota de Unix o Linux la capacidad de ejecutar aplicaciones OpenGL con aceleración de hardware 3D completa.

Esto es exactamente lo que quiero, y parece muy prometedor, pero no tuve tiempo para lidiar con una nueva dependencia de la biblioteca, por lo que no la he probado. Supongo que esta es la solución ideal una vez que pueda compilarlo, instalarlo y configurarlo. Esto es lo que usan VirtualBox y algunos servidores VNC para soportar 3D acelerado por hardware.

redmoskito
fuente
0

puede ejecutar un búfer de trama virtual vfb en la máquina, es como un simulador X11. Solíamos ejecutar aplicaciones que TENÍAN que abrir una ventana X que nunca vimos y simplemente instalamos vfb y exportamos $ DISPLAY a eso, algo así como la pantalla en el cli HTH

Chris
fuente
2
¡Gracias por el consejo! Empecé a buscar en xvfb, y parece que el renderizado no usa hardware de gráficos, sino que se procesa en la memoria virtual. ¿Alguien puede confirmar / negar esto? Si este es el caso, creo que esta solución no será buena, porque estamos buscando aprovechar el poder de nuestra tarjeta gráfica.
redmoskito