27 de Julio, 2014

Compositing y rendimiento

Alex llevaba tiempo quejándose de que su portátil no movía Minecraft con suficiente suavidad y la verdad es que, calidad de drivers aparte, no es que la máquina fuera corta de recursos (la GPU no es una pasada, pero la máquina tiene 4GB de RAM y... ¡es solo Minecraft!).

Se me ocurrió que podría probar con Openbox en lugar de Unity, y hay una gran diferencia (ella trabaja con Ubuntu Precise, que ya va siendo viejo... es verdad). Había leído por ahí que correr un gestor de ventanas minimalista puede mejorar los FPS que se consiguen en Linux en juegos 3D más o menos exigentes.

En mis experimentos con pyglet he notado que hay un problema similar en GNOME, y está relacionado con gestores de ventanas que implementan compositing (en inglés).

La idea básica es que en lugar de dibujar en el display, el gestor de ventanas que hace composición (traducción libre) proporciona un buffer para cada ventana a donde se redirigen las operaciones de dibujado de una forma transparente para la aplicación.

Una vez se tiene ese buffer listo, el gestor de ventanas enviará la información al display, realizando muchas veces un post-proceso para proporcionar todos los effectos a los que nos han ido acostumbrando los escritorios modernos.

Esto ni que decir tiene que tienen un coste, especialmente alto con tarjetas gráficas poco potentes o en las que el driver para Linux no es especialmente bueno.

En el caso de Alex, el gestor de ventanas Openbox no realiza composición, con lo que Minecraft se ejecuta mucho más suave al eliminar el trabajo extra que realiza Unity y que cuando ella juega al juego es completamente innecesario.

Aunque esos efectos que esperamos en un escritorio moderno son importantes (si los Mac y Windows lo hacen, hay una presión importante en el mercado para que las distribuciones Linux siguan la tendencia), es frecuente que causen problemas si quremos jugar ocasionalmente en Linux sin invertir en el hardware específico que nos daría el rendimiento necesario.

Es bastante habitual desactivar la redirección en juegos que se ejecutan en pantalla completa, con varios hacks que no terminan de funcionar en todas partes, y con el nuevo y prometedor _NET_WM_BYPASS_COMPOSITOR, que nos permitirá informar al gestor de ventanas que no queremos su buffer ni la redirección.

Hay otros factores que pueden afectar al rendimiento de los juegos en Linux (drivers, la versión de Mesa 3D), pero el compositing es el que más dolores de cabeza me ha dado, y no podemos esperar que todos los usuarios de nuestros juegos utilizen un gestor de ventanas minimalista :(.

Anotación por Juan J. Martínez, clasificada en: programming, linux.

Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 30 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.

Algunas anotaciones relacionadas: