Ankalima


Por qué vendemos tan barata nuestra libertad ?? Por qué no perseguimos nuestros sueños con más ahínco ?? Por qué no amamos más ??

sábado, abril 14, 2012

COMO: Usar Optimus de Nvidia en GNU/Linux

Aspecto de un escritorio GNU/Linux Mint 12 Lisa con MGSE

Hace algún tiempo que no publicábamos ningún HOWTO y hemos decidido que ya era ora de retomar esa otra faceta que hace años estaba más presente en este blog. Es cierto que nunca hemos dejado de hablar de los sistemas operativos UNIX y tipo UNIX, sobre todo de los sistemas GNU/Linux; pero últimamente lo hemos hecho desde un punto de vista más filosófico y divulgativo. Hoy vamos a publicar unas sencillas y muy prácticas instrucciones para instalar una utilidad con la que podremos usar "una parte" de la tecnología Optimos de las GPU de la marca nVidia, para aprovechar toda su potencia y al mismo tiempo optimizar el consumo de batería en computadoras portátiles que corren OS GNU/Linux. 


Antes de entrar con las instrucciones específicas; queremos anotar que la instalación se ha hecho sobre una computadora portátil Mountain Performance con un microprocesador (CPUIntel i7; que dispone de gráficos integrados: concretamente una Intel Corporation 2nd Generation Core Processor Family Integrated Graphics Controller (i915), y una GPU dedicada nVidia, concretamente una GeForce GT 555M. El sistema operativo instalado es un OS GNU/Linux basado en GNU/Debian y en Ubuntu; concretamente un OS Linux Mint 12 (Lisa) 64 bits. En este caso el escritorio configurado es Gnome Shell + MGSE, unas extensiones adaptadas por el equipo de Linux Mint: MGSE, que solucionan cualquier problema que Gnome Shell pueda presentar, incluida la desorientación de los usuarios. 


En este punto hemos de aclarar que, aunque la instalación que vamos a describir se realizó sobre este hardware y es software mencionado, cualquier otro puede servir. Lo único imprescindible es disponer de un microprocesador Intel con gráficos integrados y una gráfica dedicada de la marca nVidia que disponga de la tecnología Optimus. Explicaremos un poco por encima, pues no es el objetivo de este "COMO", en que consiste la tecnología Optimus, que por otra parte, ya está sobradamente probada, pues nVidia la incorporó a sus terjetas gráficas a principios del año 2009. Optimus, es una implementación de las gráficas nVidia que permite alternar entre la gráfica discreta y la dedicada según la demanda, o sea, si hacemos correr un Videojuego el sistema automáticamente activa la gráfica dedicada en cambio si estamos viendo una película  usara  la gráfica discreta. Es decir, durante la mayor parte del tiempo Optimus hará que la gráfica dedicada (en este caso la GeForce GT 555M) esté en reposo y que los gráficos sean gestionados por la integrada (Intel i915). Y esto será así hasta que ejecutemos una aplicación que someta a la gráfica integrada a una determinada carga (por lo general elevada); en ese momento la gráfica dedicada entrará en funcionamiento y la dedicada pasará a estar en reposo. En principio nVidia implementó esta tecnología para optimizar al máximo el consumo de energía en las computadoras portátiles. Es bien sabido que sus gráficas dedicadas ofrecen un alto rendimiento, sobre todo en la ejecución de juegos, gracias al procesamiento paralelo que provee la tecnología CUDA(Arquitectura de Dispositivos de Cómputo Unificado) que intenta explotar las ventajas de las GPU frente a las CPU de propósito general utilizando el paralelismo que ofrecen sus múltiples núcleos, que permiten el lanzamiento de un altísimo número de hilos simultáneos. Por ello, si una aplicación está diseñada utilizando numerosos hilos que realizan tareas independientes (que es lo que hacen las GPU al procesar gráficos, su tarea natural), una GPU podrá ofrecer un gran rendimiento en campos que podrían ir desde la biología computacional a la criptografía por ejemplo; pero también es cierto que este rendimiento conlleva un elevado consumo de energía y a veces, niveles también altos de disipación de calor. 


Bien... las gráficas de la marca nVidia provén tanto CUDA como Optimus desde el año 2009 y esto es estupendo; cual es entonces el problema y por qué es necesario un COMO para explicar como configurar el uso de estas modernas tecnologías en GNU/Linux ?? En la parte que concierne a CUDA, poco podemos hacer. Es una labor de los programadores de aplicaciones. Son ellos los que tienen que tener en cuanta las ventajas de los núcleos múltiples y el procesamiento paralelo optimizado de las GPU. Si los programas están construidos teniendo en cuenta CUDA, no hemos de hacer nada, las gráficas se ocuparán de utilizar esa tecnología. El caso de Optimus es diferente. Nvidia solo ha lanzado soporte oficial Optimus para Windows 7. Y aquí entramos en la parte en que la empresa nVidia no está dispuesta a facilitar las especificaciones técnicas de sus GPU y los programadores de drivers para sistemas operativos GNU/Linux se ven forzados a usar la ingeniería inversa y otros "trucos" para aprovechar todas las funcionalidades de este hardware. nVidia si provee unos drivers binarios (y privativos) optimizados para que el kernel Linux pueda cargar estos módulos y aprovechar mejor las tarjetas gráficas, pero hasta ahí ha llegado su colaboración. No queremos hoy entrar en discusiones acerca del Software Libre, del Open Source y del software privativo para hardware también privativo. Suponemos que la reciente entrada de nVidia en la Linux Foundation, producirá nuevos frutos y algún cambio significativo en la colaboración de nVidia con la Linux Foundation. Mientras esto sucede, vamos a hacer lo posible por exprimir al máximo nuestro hardware aprovechando el trabajo de la comunidad. 


Para ello echaremos mano del proyecto bumbleeBumblee es un proyecto NO OFICIAL para dar soporte a la tecnología Optimus en Linux. Para los usuarios con conocimientos de sistemas operativos GNU/Linux, en la web del proyecto Bumblee, están las instrucciones para instalar este software desde los fuentes pre-configurando y compilando. Así como las instrucciones para instalar Bumblee en las distribuciones: Debian, Ubuntu, ArchLinux y Gentoo, para los usuarios menos avanzados es para los que hemos preparado este pequeño "como se hace". Qué conseguiremos al hacer esta instalación y configuración?? El escenario será este: Si no hacemos nada, todas las aplicaciones incluido el servidor gráfico X.Org Server, utilizarán la gráfica integrada (Intel i915) y cuando decidamos que un programa cualquiera utilice la gráfica dedicada (GeForce GT 555M) y ponga la integrada en reposo, podremos hacerlo. Es decir, en Windows 7, son el controlador de nVidia y el sistema operativo quienes deciden cuando utilizar una gráfica u otra; en GNU/Linux seremos nosotros quienes decidamos con que programas queremos usar la gráfica dedicada o la integrada¡! no hay mal que por bien no venga. Eso si, hemos de estar dispuestos a perderle el miedo a "la consola", pero después de este HOWTO seguro que ya se lo habremos perdido. Vamos allá. A continuación iremos añadiendo capturas de pantalla en las que se pueden ver los comandos y órdenes que es necesario ejecutar y sus resultados.


COMO: Usar Optimus de Nvidia en GNU/Linux


En primer lugar es necesario saber si nuestro sistema operativo GNU/Linux detecta la gráfica dedicada. La integrada de Intel es seguro que si. En la instalación de Linux Mint 12 tampoco hemos tenido problemas con las gráficas nVidia. Pero para tenerlo claro, abrimos un terminal; con el que trabajaremos en los próximos minutos, y tecleamos la orden que se indica: lspci -vnnn | grep -i VGA




Como se puede ver en la captura, tenemos "activas" las dos gráficas. Es decir, el sistema operativo (y el kernel) las detecta y pueden manejarlas. 
Explicación de los comandos, opciones y argumentos usados en la ordenlspci -vnnn | grep -i VGA: el comando "lspci" nos mostraría todo el hardware conectado a los canales PCI. Las opciones -vnnn le indican al comando que nos muestre información detallada pero sin pasarse. El caracter "|", indica que queremos hacer una tubería (es decir, no queremos que nos muestre en pantalla la información de la orden "lspci -vnnn", sino que preferimos pasársela a otro comando". "grep" es un comando que busca cadenas de caracteres en una entrada de texto que le damos o en un fichero (en este caso los buscará en el resultado de la salida de la orden que está entes de la tubería "|". La opción -i que le pasamos al comando "grep" le indica que muestre las líneas que contengan los caracteres que la pasamos como argumento "VGA" y lo haga independientemente de si están en mayusculas o minúsculas.
Una vez que sabemos que podemos usar la gráfica dedicada, vamos a instalar Bumblee. En primer lugar en el mismo terminal, tecleamos la orden: sudo add-apt-repository ppa:bumblebee/stable 




Como saben los usuarios habituales de sistemas operativos basados en GNU/Debian; al menos los que usan habitualmente la consola, la el comando "add-apt-repository", sirve para añadir una línea al archivo "/etc/apt/sources.list" o un archivo que contiene un repositorio entero en /etc/apt/sources.list.d/ (en este caso: bumblebee-stable-oneiric.list). Al final nos pedirá confirmación, debemos pulsar ENTER y seguimos con la instalación.
Explicación de los comandos, opciones y argumentos usados en la ordensudo add-apt-repository ppa:bumblebee/stable: el comando "sudo" es el que se utiliza en Ubuntu y en sus derivadas (de hecho viene configurado así por defecto) para ejecutar comandos y órdenes para las que necesitaríamos tener permisos del administrador "root", pero puede ser usada en cualquier otro sistema operativo GNU/Linux. El comando "add-apt-repository" sirve para añadir un "repositorio" (una nueva fuente de software) y el argumento "ppa:bumblebee/stable", indica el nombre y la rama del repositorio que tiene que añadir. Si no reporta ningún error, después de aceptar la confirmación, lo habrá añadido al directorio /etc/apt/sources.list o a alguno de sus subdirectorios. Esto quiere decir que disponemos de los paquetes y programas que los desarrolladores guardan en ese directorio para ser usados por la comunidad. 
Una vez terminada esta orden, seguimos con la instalación, tecleando otra orden: sudo add-apt-repository ppa: ubuntu-x-swat/x-updates




Con esta orden añadimos los repositorios en los que se encuentran las últimas versiones de los drivers (módulos) del sistema gráfico. Es conveniente lanzar esta orden si el sistema operativo que tenemos instalado es anterior a Linux Mint 12 (Lisa), o hace algún tiempo que no actualizamos esos controladores. Nos pedirá confirmación, pulsamos ENTER y el repositorio quedará instalado. 
Explicación de los comandos, opciones y argumentos usados en la orden;
sudo add-apt-repository ppa:ubuntu-x-swat/x-updates: es la misma que la de la orden anterior, sólo cambia el repositorio que le pasamos como argumento; en este caso es: ppa:ubuntu-x-swat/x-updates
Una vez terminada esta orden, seguimos con la instalación ejecutando esta otra: sudo apt-get update




Cuando acabe de ejecutarse, si no ha encontrado ninguna dificultad, en nuestra consola debe aparecer "Hecho" o "Done".
Explicación de los comandos, opciones y argumentos usados en la orden;
sudo apt-get update: dejando a un lado el comando "sudo" que ya hemos explicado antes; la orden "apt-get" con el argumento "update"; lo que hace es actualizar el contenido de todos los repositorios que figuran en el directorio /etc/apt/sources.list (y en sus subdirectorios). Es decir, toma nota de todo el software disponible en los repositorios y cambia las versiones antiguas por las más actuales de los paquetes que ya tenía indexados. En este caso, lo que ha hecho es actualizar los paquetes que contienen los repositorios que añadimos en los dos pasos anteriores: sudo add-apt-repository ppa:bumblebee/stable y sudo add-apt-repository ppa: ubuntu-x-swat/x-updates
Entonces, ahora que ya disponemos de los paquetes, vamos a instalarlos. Para ello tecleamos la orden: sudo apt-get install bumblebee bumblebee-nvidia 




Cuando la orden acabe de ejecutarse tendremos algo muy especial¡! y lo habremos hecho en un sólo paso.
Explicación de los comandos, opciones y argumentos usados en la orden; 
sudo apt-get install bumblebee bumblebee-nvidia: ya sabemos el significado del comando "sudo". El comando "apt-get" seguido de la opción "install" se explica por si mismo, instalará o actualizará el paquete que le pasemos como argumento a continuación. En este caso son dos: "bumblebee" y "bumblebee-nvidia". El primero es el programa "bumblebee" y el segundo es el driver propietario de nVidia integrado en el programa "bumblebee". Es decir, que independientemente del driver que tengamos instalado en nuestro sistema operativo (para manejar gráficas nVidia existe un driver libre que se llama "noveau" y que funciona muy bien), ahora tenemos también el driver de nVidia que al estar embebido en el paquete "bumblebee" no producirá ningún conflicto con otros drivers. A continuación veréis por qué. Con estos dos paquetes se han instalado varios programas que no vamos a describir porque no es el objetivo de este tutorial. 
Estamos a punto de terminar, pero antes debemos de teclear esta otra orden: sudo usermod -a -G bumblebee $USER




Si la orden se ejecuta sin problemas. Es decir, si en la pantalla del terminal no dice nada; algo que en los sistemas UNIX se entiende como: "no ha habido problema, nada que decir"; habremos terminado.
Explicación de los comandos, opciones y argumentos usados en la orden; 
sudo usermod -a -G bumblebee $USER: Después de "sudo" hemos tecleado el comando "usermod" con las opciones -a -G y los argumentos bumblebee y $USER. Bien... el comando "usermod" se utiliza para manejar los grupos de usuarios que figuran en el directorio /etc/group. Esto es, para crear grupos de usuarios en ese directorio y añadir o quitar usuarios a esos grupos. En este caso, la orden: sudo usermod -a -G bumblebee $USER lo que ha hecho es añadir al grupo bumblebee (que ya se había creado al instalar el programa bumblebee) al usuario: $USER. Hay que tener cuidado con este argumento porque se trata de una "variable". No explicaremos aquí ahora que es una variable; baste saber a los que este tutorial siguen que la variable "$USER" se refiere al nombre de usuario que está ejecutando todas las órdenes que hemos venido explicando hasta ahora


Más fácil, si utilizáis Linux Mint y esta consola, veréis que en la línea de comandos, justo antes de la orden que hemos tecleado, aparece algo como: thingol@darkstar:~$ Esto es un "prompt", siempre encabeza cualquier línea de comandos y el de la imagen superior significa: "usuario=thingol"@"nombre del sistema operativo=darkstar":en que directorio estamos "~"=/home/thingol "$"=usuario común. Por tanto; la variable "$USER", en este caso se refiere al usuario "thingol", que es el que aparece a la izquierda y el que está introduciendo los comandos.


Lo importante es: al añadir al usuario "thingol" al grupo "bumblebee", este usuario tiene permisos para usar el programa bumblebee y los asociados a ese grupo. Esta es una característica de los sistemas operativos UNIX y forma parte importante de la distribución de la carga de trabajo y de la seguridad del sistema operativo. Por hoy baste saber que si queremos que otros usuarios que tengan cuenta en el mismo sistema puedan usar "bumblebee" hemos de añadirlos su grupo. La orden sería: sudo usermod -a -G bumblebee usuario (donde usuario sería el nombre que el usuario tiene en el sistema).


Ahora tendremos que "reiniciar el sistema operativo". En realidad no es imprescindible, pero es más largo explicar como se hace para no tener que reiniciar que teclear un simple "reboot". Esto es para que al inicio del sistema, el usuario se asocie con el grupo para toda la sesión y también para que el kernel carge los drivers (módulos) que hemos instalado desde el principio. En cuanto el sistema se haya levantado de nuevo vamos a probar si "bumblebee" funciona correctamente. Para ello tecleamos el siguiente comando: glxspheres 




Explicación de los comandos, opciones y argumentos usados en la orden; 
glxspheres: se trata de un comando que prevé el programa "bumblebee" parecido al comando "glxgears". Tanto uno como otro sirven para tener una referencia básica del rendimiento de la aceleración por hardware de las gráficas. Si os fijáis en la consola de la izquierda veréis que está usando OpenGL y la biblioteca Mesa DRI para acelerar los gráficos que aparecen en la derecha. También se ve que está usando la gráfica integrada Intel Sandybridge; así como el número de frames y megapíxeles por segundo. 
Ahora probaremos con la gráfica dedicada. Para ello tecleamos la orden: optirun glxspheres 




Explicación de los comandos, opciones y argumentos usados en la orden;
optirun glxspheres: El comando "optirun" es el que deberemos de recordar de ahora en adelante. Es el comando que pone en marcha el entorno de "bumblebee". Si os fijáis en la consola de la izquierda veréis que ahora está usando OpenGL y la gráfica dedicada nVidia Gforce GT 555M; para ejecutar el mismo programa "glxspheres". También se puede ver que tanto en número de frames como de megapíxeles por segundo, se han duplicado. Bien... esta es la prueba de que nuestra instalación ha terminado bien y que todo funciona. 
Y ahora qué ??
A partir de ahora, nosotros decidimos cuando queremos que el sistema operativo utilice la gráfica integrada (que será la mayoría del tiempo... o no) y cuando queremos que utilice la gráfica dedicada. Si no hacemos nada especial, el sistema operativo usará la gráfica integrada. Cuando queramos que un programa determinado (un juego, un programa de diseño gráfico o edición de vídeo, cualquier programa que renderice imágenes al estilo Cad, como Blender, o incluso si queremos ver una película), tenemos que abrir una consola y lanzar el programa con el comando "optirun" delante. Haremos una prueba. Lanzamos "Chromium" con la gráfica dedicada, porque vamos a cargar páginas llenas de imágenes: fotografías y vídeos, y queremos que se encargue la gráfica más potente. En ese caso, en lugar de pulsar el icono de "Chromium" (o Google Chrome o Firefox) que tendremos en el escritorio o en el menú deplegable, abrimos una consola y escribimos: optirun chromium-browser, optirun firefox, optirun vlc, optirun totem, optirun gimp... o cualquier otro




Teclando en la consola la orden: optirun chromium-browser &, el navegador Chromium se abrirá normalmente y podremos navegar por Internet sin notar diferencia alguna... O si. Si después de lanzar esa orden y una vez que el navegador está ejecutándose, en la misma consola lanzamos la orden: "ps -ef", veremos lo que muestra la captura de arriba. Si os fijáis en el centro de la captura de arriba aparece el proceso: thingol   3220  2312  0 Apr13 pts/0    00:00:01 optirun chromium-browser y a continuación el proceso: root 3222  1268 0 Apr13 ? 00:00:58 Xorg :8 -config /etc/bumblebee/xorg.conf.nvidia -sharevts -nolisten tcp -noreset -verbose... 




Explicación de los comandos, opciones y argumentos usados en la orden; 
ps -ef: El comando "ps" con las opciones -ef nos muestra todos los procesos que están ejecutándose en ese momento en el sistema operativo. En este caso muestra que el navegador Chromium ha sido lanzado por el usuario "thingol" con optirun. Y en la línea siguiente muestra otro proceso en este caso, lanzado por el usuario "root" (el administrador del sistema) que modifica la configuración del servidor gráfico Xorg, para que utilice la gráfica nVidia
Así pues tenemos que el sistema gráfico utiliza ahora la gráfica dedicada para el navegador Chromium. Puede que a mucha gente le parezca exagerado usar la gráfica dedicada para algo tan trivial como un navegador web. Y probablemente lo sea, pero lo cierto es que a día de hoy, cuando entramos en Internet no sabemos exactamente cuantas pestañas del navegador vamos a tener abiertas; ni a que webs vamos a acceder. Puede que empecemos consultando el correo electrónico y conectándonos a nuestra red social favorita (o a varias) y terminemos viendo una película en streaming¡! y en este caso, si no nos preocupa la duración de la batería (bien porque está a plena carga o bien porque tenemos a mano una toma eléctrica); agradeceremos que sea la gráfica dedicada quien tire de la película. 




Otro motivo por el que viene bien utilizar la gráfica dedicada de vez en cuando; es el de "descargar de trabajo al microprocesador". Al pasarle el trabajo de mover los gráficos a la gráfica dedicada, la integrada está en reposo y la temperatura de la CPU bajará unos grados. En definitiva; si estamos en casa y tenemos la computadora conectada a la red eléctrica, podemos usar la gráfica dedicada sin problemas. Y además, como ya hemos dicho "nosotros decidimos cuando la utilizamos y cuando no", y esto es algo que los usuarios de Windows 7, a pesar de tener un controlador específico para la tecnología Optimus, no pueden decidir. Es el sistema quien decide por ellos. 


Hasta aquí el pequeño HOWTO ilustrado que hemos que hemos querido publicar en esta ocasión. Los usuarios avanzados lo encontrarán demasiado simple, pero no está escrito para ellos. Los usuarios noveles, a los que va dedicado, esperamos que lo encuentren útil y que puedan instalar "bumblebee" y usar nVidia Optimus sin ningún problema.


Fuentes


Bumblebee Project 
Qué es nVidia Optimus 
nVidia en español 
GNU Linux Mint



rain is coming,
would do well to fear it...


2 comentarios:

MianSBA dijo...

Muchas gracias men alfin logre hacer funcionar esto del bumblebee. un saludo.

Unknown dijo...

De nada :-)
En unos días lo reedito porque con las nuevas versiones de Bumblebee y los nuevos drivers libres Nouveau la instalación ha cambiado un poco. Y de paso añadiré los cambios necesarios para hacer funcionar bien Bumblebee en Linux Gentoo.

Un saludo.