lunes, 18 de enero de 2010

Readyboost

Windows Vista y Windows 7 tienen la posibilidad de usar una memoria flash como caché de la memoria virtual. Esto mejora los tiempos de respuesta cuando hay que leer datos del archivo de intercambio.

Desde hace mucho, las CPUs permiten usar memoria virtual para tener disponible para los programas más memoria que la RAM físicamente instalada. La idea es que normalmente solo usamos algunas unas pocas funciones de un programa, por lo que en cada momento basta con tener en RAM la parte del programa que estamos usando y el resto se puede dejar en un fichero de memoria virtual en el disco. Si cambiamos a otra parte del programa o a otro programa, puede ser necesario recuperar esas páginas del disco y ponerlas en la RAM para usarlas.

Esto es lo que se llama "pagging" y es lo que está haciendo cuando al cambiar de un programa a otro vemos el disco trabajando. Por eso, cuanta más RAM mejor, menos necesidad de usar memoria virtual, menos accesos al disco y más agilidad al trabajar con varios programas a la vez.

El impacto depende de la relacción entre la "carga de transacciones" y la cantidad de RAM instalada en el equipo. Todos sabemos que no es lo mismo un equipo con 1 GB de RAM y XP, que 1 GB de RAM y Windows Vista... En el segundo caso Readyboost puede ayudar en esos momentos que se accede mucho a la memoria virtual.

Conviene aclarar antes de nada el tema de las velocidades de acceso en dispositivos de almacenamiento. La clave del asunto está en acceso secuencial o aleatorio. Los discos duros son buenos en acceso secuencial, y las memorias flash en acceso aleatorio. Readyboost intenta combinarlos, dirigiendo los accesos secuenciales al disco duro, y los aleatorios a la copia almacenada en una memoria flash.

Los fabricantes, como siempre, suelen dar datos de las velocidades máximas posibles, pero eso es válido sólo en un caso en particular. Si estás leyendo un archivo grande, en sectores contiguos al principio del disco, pues si, puedes tener esos 70 o 80 MB/s. Pero a un disco duro lo que le va mal es tener que leer ficheros pequeños desperdigados por todo el disco. Suponiendo ficheros de 4 KB y un tiempo de acceso de 7 ms, tardaría 1.8 segundos en leer 1 MB (0.57 MB/s).

Esta es la razón tambien de que haya un programa de desfragmentación en Windows, lo que intenta es mover todos los trozos de cada fichero para que estén todos seguidos, y ahorrarle al disco duro esos movimientos saltando de un trozo al otro. En un disco SSD (hecho de memoria flash) no es necesario ya que tarda lo mismo en leer cada trozo esté al lado del anterior o no.

Una memoria flash puede tener un tiempo de acceso de 0.2 ms, por lo que haría lo mismo en 50 ms (20 MB/s). Así que para este tipo de cosas, la memoria flash es 35 veces más rápida que el disco duro. Y esta es la clase de accesos que hay al fichero de memoria virtual. Windows almacena páginas de 4 KB en él, y puede necesitar acceder a unos cuantos miles cuando quieres cargar una nueva parte de un programa. Ahí es donde Readyboost interviene para ir a buscar las páginas a la memoria flash en vez de al disco duro.

Tened en cuenta que en el tiempo que el disco duro encuentra la primera página (7 ms), de la memoria flash ya hemos podido leer 30 páginas de 4 KB.

Para poder usarla para ReadyBoost, una memoria flash debe tener unas características mínimas. Nos interesa el tiempo de acceso de la memoria flash, asi que si no es capaz de leer ficheros pequeños muy rápido, no nos sirve. Microsoft especifica 2.5 MB/s leyendo ficheros de 4 KB (o sea, 600 operaciones por segundo). Cuando insertáis un pen-drive en un equipo con Windows Vista o 7, hace esta prueba, si no es capaz de leer 2.5 MB/s no tendréis la posibilidad de usarlo para ReadyBoost.

Muchos pen-drives normales y baratos no llegan a eso, están pensados más bien para lectura y escritura secuencial, como un disco duro. Hay otros que ponen "Enhaced for Readyboost" y que está garantizado que cumplen los requisitos mínimos. Hay una tabla con ejemplos de que velocidades se tienen hoy en dia en esta web.

Microsoft recomienda dedicar a Readyboost entre 1 vez y 2.5 veces la cantidad de RAM en el sistema. El tamaño y la velocidad de la memoria flash a usar dependen de lo intensivo que vaya a ser el uso... En un equipo con una cantidad de RAM decente y que siempre está con uno o dos programas abiertos (un equipo de oficina por ejemplo) puede bastar con 1 o 2 GB de flash normal, que cumpla los requisitos mínimos. En un equipo en el que se usen programas que necesitan mucha memoria, como juegos o maquinas virtuales, podria ser necesario 4 GB o más de flash rápida (8 - 16 MB/s).

Algo que suele preocupar a la gente es que las memorias flash tienen un límite a la cantidad de escrituras que se pueden hacer en ellas. En el caso de las flash usadas en pen-drives y tarjetas, es MLC, asi que unos 10000 ciclos. Pero pensad lo que eso supone. Supone escribir todo el pen-drive 10000 veces. Si es un pen-drive de 4 GB, supone escribir 40 TB en él. Readyboost en realidad no escribe tanto como algunos piensan. Cuando lo empiezas a usar, tiene que copiar datos del fichero de paginación del disco al pen-drive, claro, pero luego típicamente solo son unos cuantos KB/s, si no estás todo el rato abriendo y cerrando programas. Usando el programa ReadyBoost Monitor, se pueden ver las estadísticas.



La escala son 10 MB/s. El primer pico (azul, lecturas), es al abrir un programa que ya habia abierto antes, por lo que las páginas ya están en la caché. El segundo pico es al abrir un programa que no habia abierto hasta entonces y ahí podeis ver como se guarda parte del programa en el pen-drive. El resto del tiempo apenas hay nada. Como podéis ver, Readyboost tiene actualmente 1.84 GB de datos guardados, comprimidos a 1.15 GB. Y lleva 6.20 GB escritos (en un dia y poco, de los cuales la mayoria fueron al principio, haciendo la copia inicial).

Este es otro ejemplo de lo que ocurre al abrir en el Internet Explorer una página web con bastante flash e imágenes. La escala son 2 MB/s de máximo en cada dirección. Aunque acabe escribiendo 4 GB cada dia, el pen-drive va a durar 10000 dias, que son 27 años. Mucho antes que eso habréis podido reemplazar el pen-drive por uno de más capacidad y más rápido. (¿Alguien recuerda los primeros pen-drive de 128 MB?)

En total es una opción fácil y barata hoy en dia. Si tenéis algun pen-drive, o incluso tarjeta de memoria por ahí sin usar, podeis probar a usarla para reducir los tiempos de acceso al disco duro. Esto se nota más en los portátiles, claro, típicamente con discos de 4200 o 5400 rpm y menos RAM. Podeis hacer el test de rendimiento para ReadyBoost en cualquier unidad con los siguientes comandos:

  • winsat disk –read –ran –ransize 4096 –drive X
  • winsat disk –write –ran –ransize 524288 –drive X

En la siguiente tabla teneis algunos ejemplos de velocidades que se consiguen, según los dispositvos que se utilicen. En el caso de las tarjetas de memoria no solo importa la tarjeta, sino tambien el lector.

No hay comentarios: