Nvidia Optimus y el kernel Linux 3.13

En este último par de días he hecho algunas pruebas con el kernel 3.13 en mi ordenador. La mayoría de novedades de esta versión no me afectan demasiado, pero hay una que sí: por fin mi ordenador puede manejar la salida HDMI en GNU/Linux 🙂
No obstante, no todo es ideal y como Asus implementó Optimus de una forma un tanto exótica, hay varios detalles a tener en cuenta…

Lo primero que hice fue desinstalar los drivers propietarios de nvidia, bumblebee y primus. A continuación, instalé la última versión del Kernel y reinicié el equipo.
Arrancó sin problemas y el rendimiento del escritorio parecía correcto, tanto en la pantalla integrada del portatil como en el monitor externo conectado por un cable VGA.
Obviamente, en 3D no me esperaba nada del otro mundo, ya que ahora dependía de los drivers libres “Nouveau” y Gallium 0.4; con los que simplemente hice una prueba testimonial: World of Warcraft parecía arrancar y funcionar con un rendimiento “aceptable” pero no ideal. Por supuesto, para que WoW arrancase sobre la gráfica dedicada, había que lanzarlo de una forma especial:
$ DRI_PRIME=1 wine wow/Wow.exe
Usar este prefijo hace que los gráficos se generen en la gráfica dedicada, pero a diferencia de Bumblebee, opera con ella directamente, en lugar de ir copiando buffers de un chip en otro. Es un incordio que para renderizar una aplicación (tanto en una solución como en la otra) haya que anteponer un comando, y no exista una forma más transparente de lograrlo como sí sucede en Windows (por ejemplo mediante una opción en el menú contextual, que sería lo más cómodo).

De todos modos, lo interesante estaba en la conexión HDMI, que ahora sí que estaba habilitada. Desgraciadamente su rendimiento es desastroso, los gráficos se corrompen a los pocos segundos de comenzar a trabajar y no pude enviar audio a la TV a través de la misma conexión.
Sospecho que se debe en parte a que Asus implementó Optimus de una forma poco común en este modelo: conectando la salida HDMI directamente al chip Nvidia, mientras que la VGA y el panel integrado lo están al chip Intel. Lo normal hubiese sido conectar las tres posibles salidas al chip Intel, y así la conexión HDMI hubiese funcionado desde un principio, pero desconozco porqué no lo hicieron así.
Esto sería un detalle menor si al menos pudiésemos ejecutar el kernel 3.13 con el driver propietario y que fuese este el encargado de manejar la GPU dedicada en lugar de Nouveau. ¡Error! Aunque los drivers se pueden instalar, no se puede luego mostrar el escritorio. He probado diferentes configuraciones y no hay manera.

La gestión de energía se hace de forma más o menos correcta. Basta con echar un vistazo al siguiente archivo para saber si se ha apagado la gráfica dedicada:
$ sudo cat /sys/kernel/debug/vgaswitcheroo/switch
En reposo, su salida es:
0:IGD:+:Pwr:0000:00:02.0
1:DIS: :DynOff:0000:04:00.0

Mientras que si lo haces al mismo tiempo que ejecutas una aplicación con DRI_PRIME=1 la salida es:
0:IGD:+:Pwr:0000:00:02.0
1:DIS: :DynPwr:0000:04:00.0

Donde queda bien a la vista cuando la gráfica discreta (“DIS“) está apagada (“DynOff“) o encendida (“DynPwr“).

En conclusión, parece que por fin las configuraciones Optimus tienen ya un soporte aceptable en el propio kernel, lo cual afortunadamente incluye a quienes tenemos implementaciones poco comunes de esta tecnología. Esto se traduce en que a partir de ahora, instalar una distro con un kernel reciente (o actualizarse a él) no requerirá pasos adicionales para soportar los gráficos discretos; aunque aun necesitamos que haya la opción de manejar estos chips con el driver propietario.
El rendimiento en 3D sería mucho mejor al no tener que pasar por algunos cuellos de botella que la aproximación de bumblebee implica y Nouveau aun no es la opción ideal, porque el driver propietario es todavía muy superior.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s