20130624

Cómo mejora el consumo energético de OS X 10.9

Cómo mejora el consumo energético de OS X 10.9

Centro de notificaciones, Apple Maps, pestañas en el Finder, nuevo Safari, pantallas múltiples, integración con Twitter, iBooks, animaciones bonitas, stunning, amazing, beautiful… realmente más que jugosas novedades, lo que nos dejó la WWDC 2013 fue fríos e indiferentes. Nos presentaron lo mismo de siempre, lo esperado, e intentaron vendérnoslo como si fuese una revolución. Sin embargo, lo que sí me llamó la atención fue la mejora de consumo energético de OS X 10.9, bautizado como Mavericks rompiendo con la tradición de la nomenclatura felina. En los únicos detalles en los que entró la compañía de la manzana sobre esto fueron en los de siempre: “mirad qué geniales somos y lo que hemos hecho”.
mac-book-pro-mavericks
¿Pero cómo lo han hecho? Me sorprende que no se haya hablado apenas de ello, pero quizá sea consecuencia de que no sea un tema fácil de explicar de una manera sencilla. Para entenderlo, hay que buscar una documentación un poco más técnica que los brillantes mundos de Oz que nos vende Apple en su página oficial. Yo lo he hecho, y aquí os traigo el resultado. La mayoría de los enlaces conducen a Wikipedia, donde podréis ampliar información si hay algún concepto sobre el que queráis profundizar.

Timer Coalescing

En tu ordenador ahora mismo hay un montón de procesos funcionando. Es decir, un montón de código en ejecución, para lo cuál necesita básicamente dos cosas. Memoria, en la cual guardar no sólo el código sino los datos sobre los que se trabaja, y una CPU o procesador que ejecute este código. Y esto es así, ya sea en OS X o en el Minix de Tanenbaum. Pero una CPU sólo puede ejecutar un proceso al mismo tiempo, y nosotros tenemos la sensación de que en el ordenador pasan muchas cosas de manera simultánea. Mientras escribimos podemos estar escuchando música y bajando algún archivo de Internet. ¿Cómo es esto posible? Repartiendo el uso de la CPU de manera muy rápida entre los distintos procesos de una manera más o menos equitativa. Así, aunque la sensación es de que todo funciona a la vez, en realidad cada proceso avanza un poquito cada unidad de tiempo (por ejemplo, cada millonésima de segundo). El encargado de que cada proceso pueda ejecutarse en la CPU en un plazo de tiempo razonable es otro programa, construido directamente en lo más profundo del Sistema Operativo, llamado Planificador de CPU. De entre los procesos que están esperando en una cola a ejecutarse escoge uno, le da un poco de tiempo de ejecución y después lo echa para que otro pueda entrar.

planificacion-procesos

Esta teoría es válida tanto si tenemos un procesador como si tenemos 8. Por supuesto, si tenemos 8 entonces sí podremos realmente hacer ocho cosas de manera simultánea, y es aquí donde actúa OS X 10.9 para mejorar el consumo de energía. Ejecutar una instrucción requiere electricidad, y mantener continuamente todas las CPU ocupadas, mucha más. El nuevo planificador intenta mantener simultáneamente tantos procesadores como sea posible inactivosidle, y cuando no se pueda retrasar más la planificación, se intentarán ejecutar simultáneamente tantos procesos como podamos. Si a esto le sumamos retrasar tareas del Sistema Operativo tales como la búsqueda de actualizaciones o la escritura en disco retardada, tendremos Timer Coalescing, un concepto que no es nuevo (ya lo trajo Microsoft en 2009, aunque tampoco fuese nuevo por aquel entonces), pero que hace aparición por primera vez en OS X. Los siguientes gráficos ilustran el concepto.

timer-coalescingA la izquierda, sin Timer Coalescing. A la derecha, con él.

Se puede apreciar (aunque seguro que edulcorado por Apple, pues los gráficos están sacados de su documentación oficial) la reducción del consumo cuando ordenamos los procesos para que se ejecuten a la vez.

App Nap

Si bien el nuevo planificador de CPU de OS X 10.9 me parece la piedra angular de la nueva política de gestión energética, en Apple a lo que más bombo han dado ha sido a App Nap. Quizá porque sea lo más sencillo de explicar al gran público. Si Time Coalescing se encargaba del cuando, App Nap se encarga del cómo pasan los procesos por la CPU.
  • Reducción del temporizador: la frecuencia con la que un proceso se ejecuta, si este proceso no está al cuidado de algo que el usuario esté usando (por ejemplo, si tenemos su aplicación en el foco, o este proceso no se encarga de reproducir audio), se reduce. Es decir, deja de avanzar al mismo tiempo que los demás. Mirando la gráfica antes expuesta, el proceso D se ejecuta con menos frecuencia que el B.
  • Reducción de la entrada/salida: se reduce la frecuencia (y la prioridad) con la que un proceso en modo Nap puede leer o escribir en el disco duro, con el consiguiente ahorro energético.
  • Reducción de la prioridad: la prioridad de procesos es una característica heredada de UNIX, el corazón de OS X. Los procesos con prioridad alta una vez que consiguen la CPU para ellos la pueden retener más tiempo que los procesos con prioridad más baja. Si sumamos la reducción de prioridad a la reducción del temporizador, conseguimos que un proceso no solo tenga el procesador para él menos veces, sino que cuando lo tenga, lo deba liberar mucho más rápido. En el gráfico ya expuesto, los procesos con más prioridad tienen las bandas grises más anchas que aquellos con menos.

Memoria comprimida

Si tras aplicar Timer Coalescing y App Nap un proceso sigue teniendo que ejecutarse, requerirá no solo CPU sino memoria, donde guarda los datos que necesite. Sin embargo, hay procesos que pueden requerir más memoria de la que realmente tenemos, o puede que un proceso lleve tanto tiempo sin requerir una determinada parte de su memoria que la hayamos liberado para dársela a otro. En estos casos necesitaremos echar mano del gran almacén de datos, el disco duro. Pero esto es energéticamente costoso, pues primero tendremos que conseguir memoria (RAM) libre, quizá escribiendo lo que ahí se encontrase en el disco duro para no perderlo, y luego leer de este último y copiar los datos a memoria. La memoria comprimida trata de reducir las lecturas en el disco duro, comprimiendo los datos que no se estén usando para dejar hueco y descomprimiéndolos cuando sea necesario.
Antes y después de comprimir memoria.
Antes y después de comprimir memoria.
Esto, sumado a un algoritmo de compresión rápido, nos ahorrará energía ahorrándonos costosas lecturas de disco. Por poner un ejemplo, suponiendo que OS X 10.9 sea capaz de comprimir los datos a la mitad de su tamaño, con 8GB de memoria RAM podríamos obtener casi el mismo rendimiento que con 16GB. Por supuesto esto sería una situación ideal, pero espero que el concepto se entienda.

Básicamente la forma en la que se ahorra energía, tal y como era de esperar, es haciendo menos cosas, eso sí, sin que el usuario se vea afectado por ello. Quizá ninguno de los tres conceptos presentados sean novedosos en el campo de los Sistemas Operativos, pero sí me parece un gran paso por parte de Apple incluirlos por fin en la informática de consumo. Una cosa en particular (de tantas otras) que me saca de quicio de Windows es lo que hace cuando no estoy usando el ordenador. Podréis observarlo si dejáis solo a vuestro PC un rato. Se pone a leer y escribir en el disco duro como un loco, moviendo datos para que su lectura sea más rápida y creando y actualizando índices para mejorar la búsqueda. Si el ordenador es un sobremesa esto, dentro de lo que cabe, no es un inconveniente, pero cuando estoy con el portátil la batería se va volando. Y esto no sucede con prácticamente ninguna distribución de GNU/Linux. Por lo que, por lo que a mí respecta, estoy deseando que características como App Nap y Timer Coalescing aparezcan en el núcleo de Linux lo antes posible-

Espero que este artículo haya servido para despejar dudas y ampliar conocimientos, y que hayáis disfrutado leyéndolo tanto como yo escribiéndolo. Si queréis seguir profundizando sobre las tecnologías que incluye el núcleo de OS X, os dejo un enlace a una documentación un poquito pesada.

OS X Mavericks – Core Technologies Overview


Actualización (24/06/2013 12.54h): añadida información sobre el origen de Timer Coalescing, gracias al lector neu__.

No hay comentarios: