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”.
¿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.
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 inactivos,
idle,
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.
A 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.
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__.