Archive

Posts Tagged ‘nvidia’

C.I. XVII: Historia de C por Denis Ritchie, tareas elefante, Raspberry PI, NVIDIA y la Linux Foundation, sed, urandom en python

11 marzo, 2012 1 comment

Mucho tiempo sin una sección de estas, y traigo contenidos muy variados:

Gráficos híbridos, Linux, la cabezonería de los fabricantes y el reinado de Microsoft

16 marzo, 2011 6 comments

Desde hace años el diseño de hardware informático ha ido consumiendo más y más energía; cuando hace años, un ordenador funcionaba con una fuente de alimentación de 200W, hoy en día, es fácil encontrar hardware para el que se recomiendan 700W. Como es lógico, tal como están las cosas en cuestión energética y con el fin de hacer una informática más verde, los fabricantes se esmeran en buscar soluciones hardware y software que nos permitan hacer que nuestros equipos informáticos consuman menos electricidad.

Antes de nada decir que aunque Hybrid Graphics sea una tecnología de ATI, me referiré como gráficos híbridos a la coexistencia de dos sistemas gráficos en un mismo ordenador, poco a poco iremos matizando.

En el terreno sobremesa

En el terreno gráfico, es muy fácil ver una GPU con cerca de 2000 millones (dos mil millones) de transistores en su interior (este año saldrán modelos con 6000 millones de transistores), y aunque sólo estén en pleno funcionamiento durante la ejecución de juegos, contenido 3D o procesamiento GPGPU, los chips gráficos por sí solos tienen un consumo que va creciendo a medida que se complican los circuitos (sin contar la memoria asociada y la circuitería periférica). Existen tecnologías como el escalado de la frecuencia (la circuitería consume algo menos, los chips se calientan menos y ahorramos más energía en ventilación), o desactivación de algunas partes de la GPU, aunque cuando estamos realizando un trabajo con poca carga gráfica, es inevitable que mucha potencia se consuma por culpa de la GPU y no la estamos aprovechando.

Gracias a la inclusión de chips gráficos en placas base, a la reciente (desde primeros de 2009), inclusión de chips gráficos en procesadores Intel (este enlace es un ejemplo), y la nueva generación de APUs de AMD (AMD Fusion, que aunque llevan desde 2006 desarrollándolas acaban de salir), en el terreno energético, vemos que vamos a tener un chip gráfico asegurado, tal vez no sea lo más potente del mundo, pero nos permite poner imágenes en un monitor; así que, si no compramos una tarjeta gráfica, podremos utilizar esa GPU como gráfica, habrá una circuitería interna para generar una salida para monitor y podemos salir del paso, además, no consumirá demasiado. Ahora bien, si compramos una gráfica aparte, querremos utilizarla (normalmente tendrá una GPU más potente, más memoria y consumirá más), en este caso tendremos dos “tarjetas gráficas” trabajando a la vez y consumiendo energía.

La idea de la tarjeta gráfica integrada viene de lejos, recuerdo que en el año 97, se podía comprar un hardware similar, con un chip gráfico integrado en placa base; la diferencia de precio de modelos con y sin chip gráfico no era demasiada, por lo que no debemos esperar mucho de esa tarjeta. Eso sí, la placa base tenía su salida de monitor, y si pinchábamos una tarjeta, ésta tendría su salida aparte; también era una forma barata de poder conectar dos monitores, aunque como la mayoría de los mortales de la época trabajábamos con un monitor, si queríamos conectar una gráfica externa, era recomendable desactivar el hardware gráfico integrado en placa desde BIOS, por un lado, por problemas de compatibilidad y por otro, para no tener chips trabajando de forma innecesaria. (Aunque no recuerdo si se dejaban de alimentar los chips gráficos con esa configuración, no creo).

3dfx-voodoo-1Volviendo a la actualidad (por un momento) algo ha cambiado, y es que con la conciencia ecológica de los fabricantes, seguro que podemos dejar de alimentar los chips gráficos integrados, al menos gran parte de ellos. Pero si por ejemplo queremos dejar de lado el terreno energético podemos hacer que los chips gráficos trabajen en colaboración para una experiencia de usuario inigualable (no es más que procesamiento paralelo CPU+GPU+GPU). Todo esto, me hace sentir viejo, ya que me recuerda a la tarjeta Voodoo, esta tarjeta pionera en el furor del 3D, necesitaba una tarjeta gráfica adicional para todo lo que fuera 2D (la Voodoo tenía una salida y una entrada de monitor por fuera de la torre; la tarjeta gráfica 2D se conectaba con la Voodoo y ésta al monitor. Además, para algunos modelos posteriores permitía conectar dos tarjetas Voodoo con un interfaz interno para que éstas trabajaran en colaboración y trabajar 3D a más resolución (SLI, una idea de 1998 que, se abandonó y luego se volvió a poner en marcha en 2004/2005, en ATI se llamará la tecnología Crossfire).

En conclusión en este terreno la tecnología ha avanzado mucho; y normalmente con Linux puede que sólo haya una pequeña pega. Hablando de sobremesas, normalmente en la configuración de la BIOS encontramos opciones para desactivar la gráfica integrada (en placa base), desconozco si se podrá desactivar desde aquí cuando viene integrada en el procesador. Desde nuestro sistema operativo, depende de dónde conectemos el monitor, trabajaremos con una u otra gráfica, en Xorg configuramos con qué driver gráfico trabajar y con qué pantalla. El problema viene cuando queramos utilizar la potencia de las dos tarjetas, sólo a veces, es decir, cuando nos interese tirar de GPGPU sin importar el consumo energético, como tengo los dos chips gráficos activados, no hay problema, pero cuando termine de trabajar, sería muy efectivo poder dejar de trabajar con un chip y desactivarlo desde software, y este interruptor sólo está disponible en Windows. Aunque hay proyectos para ello, o si nos ponemos a jugar con ACPI podemos conseguirlo, los fabricantes no nos lo podrán fácil (estamos acostumbrados a ello, aunque [1]AMD lleva [2]liberando [3]especificaciones [4]unos [5]años) y así contribuyen a que Microsoft gane terreno en el campo energético (aunque podamos conseguir que un Linux sea más respetuoso con el sistema y el medio ambiente , no podremos lograr quitarle la corriente a un chip que se dedica a absorber potencia y producir calor, en algunos casos y cuando se logra, es necesaria una investigación previa y echar un día buscando por Internet.

En el terreno portátil

Casi todo lo explicado para la parte sobremesa nos vale aquí; aunque tenemos que pensar que un portátil pretende ser más eficiente energéticamente y de hecho necesitaremos que lo sea; personalmente cuando compré mi portátil (hace casi 5 años), logré extender las 2h y media de uso con batería en Windows a más de 4h y 30 minutos en GNU/Linux.

Y como tenía que ser, la inclusión de 2 GPUs en un mismo equipo portátil está presente desde el 2007 más o menos y siempre tendremos el caso de un chip malo (por así decirlo, es un chip barato, consume poco, pero también tiene pocas capacidades) y un chip bueno (un NVIDIA, un ATI con GPUs potentes). Aunque bueno, si nos compramos un portátil y no podemos desactivar una GPU, pues lo tenemos enchufado, o confiamos en que el fabricante saque algo para poder desactivarlo. En principio no sería un problema mayor.

Lo malo viene ahora, y es que en un portátil normalmente se economiza también el espacio y las conexiones, por lo que tendremos sólo una salida de pantalla y lo peor es que normalmente estará conectada a la gráfica “mala”, la integrada. Para un trabajo normal, no pasa nada, podemos  utilizar el ordenador perfectamente, pero siendo conscientes de que sólo podremos utilizar la gráfica menos potente y, aun teniendo una buena tarjeta gráfica al lado, para juegos, vídeo o tratamiento 3D, no podremos manejar la GPU más potente, vamos para todo lo que sea visualización, ya que al estar presente y conectada podemos aprovechar la potencia para GPGPU, pero sólo para eso, ya que si le decimos a Xorg que sólo utilice el chip gráfico “bueno” nos dirá que no tiene pantallas conectadas.

Ese es el gran problema, tenemos dos sistemas gráficos y una sola salida, y un conmutador software. Dado que los ordenadores portátiles no destacan por sus opciones en BIOS, estoy seguro al 90% que nuestro portátil con tecnología gráfica híbrida no tendrá la capacidad de desactivar por BIOS el sistema gráfico integrado, otra manera es con un interruptor hardware, es como la manera antigua y la manera que queda es con un driver y desde nuestro sistema operativo, vamos la forma modernita.

toshiba-a660-1emCuando tratamos este problema, mi primera toma de contacto con este tema fue al adquirir un portátil Toshiba A660-1EM. Dado que su sistema operativo principal era GNU/Linux me dispuse a su instalación, y pude comprobar rápidamente que después de una hora de uso (más o menos) con GNU/Linux se calentaba más que con Windows, y consumía más.

Este portátil trae una gráfica NVIDIA 33oM y la gráfica Intel que viene con el Core i5, los drivers de NVIDIA los instalé sin problema, por lo que supuse que todo iba bien hasta que comprobé qué controlador se estaba utilizando (bueno, también basta con arrancar nvidia-settings que te dice que no está funcionando). Fue cuando me puse a investigar sobre el tema. Además, este modelo trae una tecnología llamada Optimus que promete ser la panacea para el ahorro energético, es un controlador que cambia dinámicamente el sistema gráfico que se usa: si el ordenador piensa que necesitas potencia gráfica, conecta el chip gráfico bueno y si no, lo desconecta; sólo para Windows 7, y sin planes de dar soporte para Linux de esta tecnología, porque no les da la gana (dicen que en un futuro, pero si leéis los foros veréis que ponen a caldo a NVIDIA). Bueno, funciona en W7, y con software nuevo, hay quien ha reportado algún problema, muchos programas que no saben lo que es Optimus e identifiquen la salida gráfica activa, fallarán [1][2], incluso en el archicompatible Windows 7.

Es decir, la gráfica Intel funciona, la gráfica NVIDIA funciona pero no se ve, todo el sistema funciona perfectamente, y sólo falta la capacidad de un mísero sistema de conmutación entre la salida gráfica de la Intel a la NVIDIA.

Desde NVIDIA no dicen nada más, y no nos facilitan las cosas. Existen varios proyectos (que enlazo al final del post), hechos con ingeniería inversa y colaboración de muchos usuarios afectados para poder hacer que ese interruptor actúe y funciona en varios modelos de portátiles (aunque cada uno es de su fabricante y no es algo general y válido para todos); el método es algo artesano, requiere investigar un poco, además, se necesita el Kernel Mode Setting (KMS, más info), el gran problema es que los drivers oficiales de NVIDIA no soportan esta tecnología, y con una gráfica tan nueva, el driver nouveau, que sí soporta KMS, se queda un poco corto. Además, lo más fácil es desactivar la corriente de la GPU “buena” por lo que vale, no consume energía, pero me he gastado 200€ más en un portátil con una gráfica buena para no poder usarla, ya que muchas veces, si desactivamos el sistema gráfico integrado, el sistema deja de responder.

Por lo que, de momento, el hecho de comprar un portátil (para uso con GNU/Linux) con una tarjeta NVIDIA Optimus queda descartado, porque no vamos a poder usarla, aunque si lo que queremos es programar en CUDA, sí que vamos a poder. Aunque otro inconveniente que he encontrado en otros modelos, es que aunque no soportan Optimus, el conmutador que cambia la salida de la gráfica “buena” a la “mala” y viceversa es software y con un driver que no se encuentra en Linux (eché una mañana hablando con varios técnicos de Toshiba, sé que ellos sólo saben de Windows, pero al menos, saber si la gráfica se conmuta por software, por BIOS o por un interruptor sí que tienen que saberlo).

Con ATI la cosa va mejor, ya que Catalyst soporta KMS, y realiza la conmutación, y aunque no lo he probado hay mucha gente que lo ha conseguido, por ejemplo vemos información aquí, aunque el combo Intel/ATI suele funcionar, no lo hace el 100% de las veces, aunque hay mucho terreno recorrido, pero no del todo y de todas formas el modo colaborativo entre los dos chips gráficos es otra historia.

En conclusión

Lo realmente indignante, es que, aunque sea un sistema operativo minoritario (que no tanto), y aunque la culpa sea difícil de echar (NVIDIA? Intel? El fabricante de la placa base? El de la BIOS? Todos ellos?), no se haya desarrollado un estándar para esta conmutación en portátiles (al menos no lo he encontrado), o en su defecto, por parte de los fabricantes haberse desarrollado un parche para el kernel, que sabiendo cómo está hecho en pocos días de trabajo puede salir algo a la luz, eso les daría publicidad en muchos blogs/foros especializados y ganarían clientela; o al menos liberar las especificaciones de cómo lo han implementado.

Es una lástima perder el tiempo intentando lidiar con un problema parecido, aunque al menos en mi caso Toshiba perdió una venta (devolví el portátil), además, en el servicio técnico, me recomendaron que para mi problema podía comprar un Serie Qosmio (no recuerdo el modelo, pero cuando vi que costaba 1400€ cerré la página inmediatamente) y Asus también (porque estudié comprarme un portátil de esa marca), al final compré un sobremesa.

Para saber más

Linux Hybrid-Graphics . Tienen blog y una lista de correo en Launchpad.

ASUSM51Ta & Linux . Howto para este portátil con un combo ATI/ATI

airlied @ LiveJournal . David Airlie (de Red Hat) creó un módulo para el kernel que conmuta la energía para los chip GPU (vga_switcheroo)

VGA Switcheroo en Gentoo Wiki . A la manera Gentoo, mirando el kernel y paso a paso

Top