Publi

Gráficos híbridos en GNU/Linux. Nvidia + Intel, poco a poco vamos avanzando.

Hace 6 años escribí un post con mi indignación acerca de los gráficos híbridos. Es decir, cuando un portátil o un sobremesa tiene dos chips gráficos. Normalmente, uno malillo, que puede ser un Intel, integrado en el procesador (aunque últimamente no son tan malillos) y uno mucho mejor, que puede ser un Nvidia o ATI que, sobre todo, para el procesamiento 3D o para aplicaciones GPGPU va a funcionar mucho mejor.

La semana que viene, publico un post con una guía para instalar Bumblebee con algunos detalles sobre problemas que me he encontrado con mi hardware y cómo lo solucioné.

Resumiendo un poco. Los chips se han abaratado muchísimo, y la tendencia desde hace unos años es reducir el consumo energético de los dispositivos. Así que muchos ordenadores nuevos (sobre todo portátiles, que deberían tener la mayor autonomía posible) tienen una GPU integrada dentro de la CPU. Ese chip gráfico funciona muy bien para gráficos 2D y le puedes pedir también que pinte cosas en 3D. Hace años, la capacidad 3D era muy limitada, aunque ahora es bastante decente, pero no alucinante. Eso sí, cuando te compras un equipo, puedes hacerlo con una gráfica dedicada que puede ser una Nvidia o una ATI, marcas que han demostrado tener gráficas muy potentes. Así que, la idea es tener la GPU dedicada (llamémosle discreta, en el sentido de separada) dormida siempre que sea posible, porque nada más alimentar y tener activa esta GPU va a consumir mucha energía. Por lo tanto, sólo la encenderemos cuando vayamos a hacer algo pesado y la GPU integrada no sea suficiente, es decir, cuando estemos tirando de juegos, procesamiento 3D, etc. Porque la GPU integrada no nos va a proporcionar la calidad que necesitamos ni los fps que requerimos.

El principio de los principios

La teoría es perfecta. Es todo fantástico y maravilloso. Al principio, la implementación era por BIOS. Cuando querías utilizar la tarjeta integrada (digamos, la Intel), entrabas, elegías que querías la Intel, iniciabas el sistema operativo y cuando querías utilizar la discreta, reiniciabas, entrabas en BIOS, elegías la otra y arrancabas de nuevo. El problema es que reiniciar da una pereza tremenda. Así que al final dejas siempre encendida la discreta y listo, ya no hay ahorro de energía.

Por cierto, según he leído, aún hay BIOS actuales que te dejan activar y desactivar la tarjeta discreta. Con alguna que otra manera de hacer ahorro energético. Incluso algunas BIOS actuales te dejan elegir a qué gráfica va conectada la salida a monitor. Ya veremos cómo eso es interesante.

Nvidia Optimus

Desde 2010, Nvidia sacó una tecnología para no tener que estar reiniciando todo el tiempo y que teóricamente podías tener aplicaciones corriendo con la tarjeta Intel y al mismo tiempo en alguna ventana podría haber gráficos tirando de la GPU Nvidia que estará sólo trabajando en esa región de la pantalla y durante el tiempo que está la aplicación funcionando. Mientras, la Nvidia se desactiva y no consume corriente. Así conseguimos ahorrar energía y, si no estamos haciendo nada muy potente, la gráfica pesada no funcionará, estaremos siendo más eficientes energéticamente, el ordenador se calentará menos, los ventiladores irán más despacio y si estamos con batería, ésta durará más.

Lo malo fue la implementación inicial. Hasta en Windows daba problemas, se podía colgar al arrancar o apagar la gráfica, aunque con el tiempo lo terminaron solucionando y no va mal del todo.

Nvidia + GNU/Linux

El problema vino con GNU/Linux. Aunque teníamos el driver privativo de Nvidia, que sigue siendo el que mejor funciona. La empresa no facilitó soporte para Optimus, ni pensaban implementarlo a corto plazo (aunque la noticia es de 2011, a estas fechas, 21 de Agosto de 2017 no hay una implementación a nivel de Windows).

¿Qué hacemos? A día de hoy tenemos varias posibilidades. Tenemos el driver libre nouveau, que sigue en desarrollo activo. Pero aún queda mucho por hacer, no es lo suficientemente estable con modelos nuevos de las gráficas Nvidia o con procesadores Intel muy nuevos. Aunque, gracias al driver nouveau y a algunos módulos del kernel, nos dejarán activar o desactivar la gráfica. El problema es que tienes que tener suerte, que coincida y funcione en tu equipo y con tu configuración, además de que, aunque el driver nouveau está muy bien, y es libre, hay cosas que no funcionan y tiene un rendimiento menor, pero es capaz de conmutar entre la tarjeta integrada y la discreta.

Nvidia Prime

Nvidia sacó Prime. Puede conmutar entre la tarjeta discreta y la integrada, es decir, entre Nvidia e Intel, pero funcionará a nivel de sistema, para toda la pantalla. Y si queremos cambiar entre una y otra tarjeta tendremos, mínimo, que cerrar la sesión y volvera a abrirla para cambiar el driver que controla la pantalla, el sistema OpenGL, etc. El problema no es sólo de Nvidia, es cómo está planteado Xorg, porque hace mas de 25 años, supongo que no se imaginaron que en el futuro se iba a hacer esto. Por si fuera poco, algunas veces el módulo de Nvidia no se lleva bien con algunas tarjetas, o, por algún problema la gestión de energía no va bien cuando haces el cambio… por lo que al final, resulta más seguro reiniciar el ordenador. Aunque el problema no es sólo Prime, o reiniciar, es cómo están enchufadas las gráficas. Esto puede ser complicado, el caso es que una de las configuraciones más utilizadas es que la gráfica discreta está conectada a la interna y ésta a la salida; hay más elementos en la ecuación, lo importante es que cuando la tarjeta discreta está activa hay opciones de monitor que no funcionan (además, los nombres de las pantallas son muy raros… HDMI-1-1, HDMI-1-2…). Mi principal problema surgió con la rotación de pantalla. Nvidia soporta rotación, Intel soporta rotación, pero cuando están las dos juntas, no hay rotación de pantalla. Por otro lado, al final terminas siempre utilizando la tarjeta discreta (porque para eso te la has comprado) y no ahorramos energía.

Luego tenemos el proyecto Bumblebee. Lo malo es que hay forks, de varias personas, guías contradictorias y características que van y vienen. Lo de las guías contradictorias no es problema de quién las escribe, la semana que viene publico yo una, es porque al tener características que van y vienen, configuraciones que dejan de servir y máquinas que no siempre son compatibles con según qué cosas, al final toca probar y, tirar mucho de terminal, y arrancar el ordenador totalmente a oscuras y rehacer configuraciones… Y hablaremos un poco más de él.

Usar solo la Intel

Bueno, es una opción. Ignoramos por completo que tenemos la tarjeta Intel y, utilizando el módulo del kernel que mejor nos funcione: bbswitch o vga_switcheroo. Desactivamos la tarjeta discreta para siempre. Aunque claro, tu ordenador tiene una tarjeta discreta que va a estar muerta de risa todo el tiempo, y da pena no utilizarla.

Podríamos, por ejemplo, cargar el módulo de nvidia y activar la tarjeta discreta a mano cuando queramos hacer algún procesamiento GPGPU, utilizando CUDA u OpenCL. Aunque algunos programas, antes de utilizar estas tecnologías, preguntan al servidor X qué tarjeta tienes y, claro, el servidor X les va a decir que tienes una Intel y no van a hacer uso del driver de Nvidia. Otros programas mejor hechos sí que detectan que tenemos una nvidia, el módulo funcionando y hacen el procesamiento GPGPU sin problema. Una vez hecho esto, puedes desactivar la tarjeta discreta y listo.

Bumblebee

Bumblebee, supuestamente, nos trae el mundo maravilloso de Optimus a GNU/Linux. Aunque tampoco es tan maravilloso, es una solución muy válida para nuestros equipos, por el momento, mientras Nvidia saca un mejor soporte de Optimus, mientras nouveau alcanza un rendimiento y estabilidad mayor o mientras las GPU de Intel alcanzan mayor nivel.
El principal problema que veo es la falta de manteinimiento y versiones. La última versión es de 2013, aunque hay algún cambio menor de mantenimiento o para la distribución de 2015. Parece que el equipo no se mueve, pero luego se ve movimiento en la wiki de Github o algún proyecto asociado.

Otro problema es el rendimiento de los gráficos. Aunque va bastante bien, lo que hace Bumblebee es automatizar la activación/desactivación de la tarjeta discreta e iniciar una sesión X invisible con dicha tarjeta y luego comunica toda la información de la aplicación a la sesión actual. Esto es, además de la generación de gráficos, implica un transporte que, a veces trae también compresión y descompresión, etc, por lo que al final puede haber pérdida de fotogramas por segundo y un poco más de uso de CPU cuando tenemos aplicaciones abiertas utilizando la GPU discreta.

Al final, este proyecto nos permite tener una sesión iniciada con la tarjeta integrada, con lo que la CPU no se calienta tanto que teniendo la GPU discreta encendida y nos permite iniciarla cuando iniciamos un programa que la necesita. Tenemos que ejecutar el programa de forma especial, podemos conigurar accesos directos a los programas para que se ejecuten utilizando la tarjeta discreta pero es incómodo. Además, al estar utilizando principalmente la gráfica integrada no tendremos problemas a la hora de rotar el monitor.

Con Bumblebee, también podríamos solucionar el problema de los programas que hacen uso de CUDA y no detectan bien la tarjeta, diciéndoles que se ejecuten con la tarjeta discreta.

La semana que viene…

La semana que viene publicaré la guía de cómo configuré Bumblebee en mi portátil, con muchos consejos de configuración, métodos para transportar la imagen y detalles de lo que me he ido encontrando.

También podría interesarte...

There are 13 comments left Ir a comentario

  1. Pingback: Gráficos híbridos en GNU/Linux. Nvidia + Intel, poco a poco vamos avanzando. | PlanetaLibre /

  2. nasciiboy /
    Usando Mozilla Firefox Mozilla Firefox 55.0 en Fedora Linux Fedora Linux

    por pobre, tengo un caso mas rocanbolesco, dos monitores vga uno conectado a la dedicada del un celeron y otro a la envidia mas barata y pasiva que encontre, una 210.
    solo noveau sobre freidora hace funcionar el asunto en alguno u otro kernel, a veces con las actualizaciones deja de funcionar, principal razon para no saltar a fedora 26 y actualizar solo de ves en cuando, como jugando a la ruleta rusa.

    1. Gaspar Fernández / Post Author
      Usando Mozilla Firefox Mozilla Firefox 55.0 en Ubuntu Linux Ubuntu Linux

      ¡Tremendo y espeluznante! Lo malo es que algún día tendrás que actualizar. Estaría bien revisar la configuración que te funciona: módulos del kernel cargados, /etc/X11/xorg.conf o alguna configuración xrandr, así como ver qué errores te da cuando no funciona (si te da, porque a veces es un cuelgue tal cual), mirar los logs de Xorg o el dmesg a ver si arrojan algo de luz.

      ¡Suerte!

      Por cierto, yo también compré esa tarjeta nvidia para un ordenador, porque era pasiva, acabé harto porque con la anterior que tenía quedé con la cabeza loca del ruido del ventilador y tampoco utilizaba gráficos muy complicados.

      1. nasciiboy /
        Usando Mozilla Firefox Mozilla Firefox 55.0 en Fedora Linux Fedora Linux

        la placa del computador es una mini ixt con el celeron soldado, este traia un pequeño ventilador “mosquito” mas molesto que un ventilador ancho. Su consumo no es muy alla asi que varias veces lo deje sin nada… he, ya con la compra de la grafica le puse dos ventiladores amplios y desde hace un año y medio funciona sin complejos de temperatura y poco sonido

        cuando el kernel no esta apto, simplemente se cuelga, lo extraño del asunto es que en fedora 23 se seponia iba con xorg y en 25 va con waylan, antes en debian intente hacerlo funcionar tocando el xorg.conf, teniendo en uno monitor el entorno grafico y el otro un tty, aunque funcionaba uno u otro. Luego seguio un peregrinaje por distros con resultados insatisfactorios, o prendia un solo monitor, o uno si y el otro quedaba “obscuro” o se reiniciava una y otra ves el servidor grafico o drectamente se congelaba

        en los foros, directamente decian que la configuracion era imposible, o que manocear la configuracion de las x ya era obsoleto, en fin informacion confusa y escasa

        de sistema, poco domino, mas el tormento de freidora, en no pocas veces me ha planteado aprender a compilar un kernel y tirarme de lleno con algun arch, para descubir el motivo de la magia de los de red hat, que por lo general hace funcionar los dos monitores

        1. Gaspar Fernández / Post Author
          Usando Mozilla Firefox Mozilla Firefox 55.0 en Ubuntu Linux Ubuntu Linux

          A mí se me ocurre que puede ser cosa del ACPI de la placa base, hay muchas que son un poco caprichosas con eso. Sería meter una línea en la inicialización del kernel: “acpi_osi=Windows_2009” por ejemplo. Pero vamos, es ir probando con tu modelo de placa y eso.

          Por lo de comentas de /etc/X11/xorg.conf dirán que es obsoleto, de hecho es una configuración muy estática, pero la tarjeta gráfica no vas cambiándola todo el rato, hay configuración sobre la aceleración que conviene dejarla fija si tienes algún problema con los módulos más nuevos. Eso sí, si usas los drivers de Nvidia, habrá que asegurarse de la versión utilizada, porque la 210 creo que ya es vieja y no funcionará con los últimos drivers oficiales. (Si usas los oficiales asegúrate de tener en blacklist los de nouveau).

          Pero vamos, es cosa de probar. Por lo que dices de compilar un kernel, es ponerse, aunque las distribuciones suelen tener muchas cosas precompiladas, y sólo hay que cargarlas. Aunque si te compilas el kernel y lo ajustas a tu configuración te va a funcionar muy bien el ordenador. Eso sí, te puedes tirar mucho tiempo hasta tener un kernel fino, y tendrás que leer mucho sobre muchos módulos. (Pero bueno, tenemos el make menuconfig que es más o menos fácil)

          1. nasciiboy /
            Usando Mozilla Firefox Mozilla Firefox 55.0 en Fedora Linux Fedora Linux

            ahora que lo mencionas, si aparece acpi por algun lado cuando las cosas van mal, con un cat-grep a la configuracion del kernel en /boot, no sale nada de acpi_osi, por la tarde estaba decidido a instalar un arch facilon gnomero, por la pista que me has dado, mejor hago pruebas previas… total si se rompe, la reinstalacion es lo de menos

            el tiempo de estar con freidora, ha hecho daño mas alla de varios desastres de la distro en si, mas luego de estar un tiempo con wayland (diferencia inperceptible, todo sea dicho) y programas relativamente nuevos regresar a xorg, da una sensacion desagrabable, mas cuando el cambio generalizado esta a la vuelta de la esquina

            en fin, gracias por la ayuda, ya habra tiempo para dedicarle unas lecturas a los modulos del kernel, parametros de arranque y quiza compilaciones

  3. Mart /
    Usando Google Chrome Google Chrome 60.0.3112.101 en Linux Linux

    Yo uso Arch Linux con Gnome, desde que lo reinstalé por última vez, decidí usar wayland siempre. El problema es que al parecer Bumblebee no tiene soporte para wayland, pues me arroja un error al usar optimus.

    1. Gaspar Fernández / Post Author
      Usando Mozilla Firefox Mozilla Firefox 55.0 en Ubuntu Linux Ubuntu Linux

      Bumblebee hasta donde yo sé es para Xorg simulando un display virtual, así que no creo que funcione en Wayland. Por otro lado tengo entendido que los drivers privativos de Nvidia no funcionan en Wayland y eso me tira un poco para atrás, pero espero que todo avance 🙂 Lo que sí que podría funcionar en Wayland es el hecho de activar y desactivar la tarjeta discreta, que tal vez con noveau sí que vaya bien.

  4. G /
    Usando Google Chrome Google Chrome 60.0.3112.78 en Ubuntu Linux Ubuntu Linux

    En mi caso, tengo una laptop con optimus, pero desde ubuntu 17.04 junto a prime + kernel 4.10.X + xorg server 1.19.3, todo funciona como corresponde, sin screen tearing, enchufando un monitor externo sin problemas. De todas maneras casi todo el tiempo estoy en modo NVIDIA y aunque consuma mas bateria de lo debido, usualmente la mantengo enchufada.

    1. Gaspar Fernández / Post Author
      Usando Mozilla Firefox Mozilla Firefox 55.0 en Ubuntu Linux Ubuntu Linux

      Hola G,
      Gracias por tu comentario, ¿puedes dejarnos tu modelo de portátil? Puede ser interesante y los usuarios sabrán que funciona bien 🙂

      1. G /
        Usando Google Chrome Google Chrome 60.0.3112.78 en Ubuntu Linux Ubuntu Linux

        El modelo es este: http://www.dell.com/ie/p/inspiron-15-7567-laptop/pd?oc=cn56703&model_id=inspiron-15-7567-laptop

        Dell Inspiron gaming 7000 (7657)
        Lo compre hace 1 mes aproximadamente, instale Ubuntu 17.04 gnome literalmente sin ningun problema.

        1. Gaspar Fernández / Post Author
          Usando Mozilla Firefox Mozilla Firefox 55.0 en Ubuntu Linux Ubuntu Linux

          Qué pasada de portátil

  5. Pingback: Configuración Nvidia Optimus con driver privativo y Bumblebee. – Poesía Binaria /

Leave a Reply