¿Que es prefetching y SuperFetch?

Compartir

A menudo hemos oído hablar de esta característica de Windows  que mejora ostensiblemente el rendimiento del mismo durante su uso diario pero quizá no sepamos muy bien en qué consiste. Hablo del prefetching.

¿CÓMO FUNCIONA REALMENTE ESTA CARACTERÍSTICA?

Durante el uso de un ordenador se produce un traspaso secuencial de partes de código (páginas) del disco duro a la memoria, páginas de 4 KB en la arquitectura x86 que son utilizadas por los programas y por el propio sistema operativo al trabajar. Microsoft se dio cuenta de que, aun utilizando discos duros rápidos y de baja latencia, el rendimiento del sistema se veía penalizado (más aún si los archivos necesarios para una aplicación estaban, por ejemplo, en zonas alejadas en el disco). Para mitigarlo, implementó en XP un sistema de "precarga" que reduce el tiempo que tarda el sistema operativo en cargar los archivos que una aplicación le demanda. Pero… ¿cómo funciona realmente? 

Este proceso se aplica principalmente a dos escenarios distintos, que son

  • El arranque de Windows: Tras el tercer arranque sucesivo de Windows, el sistema operativo toma nota de los archivos cargados durante el inicio y su posición en el disco. ¿Y cómo sabe su posición? Pues todo está en la MFT (Master File Table) del sistema de ficheros NTFS. Concretamente la parte metadata (los 15 primeros registros de la MFT, estando del 12 al 15 reservados para usos futuros) contiene todos estos datos: árbol de directorios, posición, clústers inválidos, descriptores de seguridad, etc. Tras ello,  Windows crea un fichero denominado "NTOSBOOT-B00DFAAD.pf" que aloja en el directorio X:\Windows\Prefetch (podéis comprobarlo en vuestro Windows).
  • Durante el arranque de servicios y aplicaciones: Concretamente XP monitoriza o bien el primer minuto tras la inicialización de los servicios, o bien los 30 primeros segundos tras la carga de la interfaz gráfica; lo que ocurra primero. Además, monitoriza también los 10 primeros segundos de arranque de cualquier aplicación. El verdadero responsable de todo esto es la aplicación Cache Manager (Administrador de caché) de Windows XP que, una vez ha recabado toda esta información, invoca al Programador de tareas para que registre en la carpeta X:\Windows\Prefetch un archivo .pf de la forma APLICACION.EXE-HASH.pf. En vuestro directorio Prefetch encontraréis bastantes ejemplos de esto.  

Ahora bien, ¿cómo se produce el acceso a estos archivos y cómo influye este sistema en el rendimiento global?

 

Cuando XP arranca o cuando se inicia una aplicación, Cache Manager comprueba si hay posibilidad de prefetching. Para ello revisa el directorio X:\Windows\Prefetch en busca de un fichero de "precarga" de la aplicación que se va a ejecutar (o del fichero con la traza del arranque si hablamos del inicio de XP). Si lo encuentra, hace que Memory Manager (Administrador de memoria) de XP lea de forma asíncrona los datos de la(s) traza(s) necesaria(s) y, cuando ha finalizado, permite que el inicio de la aplicación continúe.

 

Al realizar esta "precarga" desde un directorio (y además todo a la vez), se reducen ostensiblemente los movimientos de la cabeza del disco duro, lo que repercute positivamente en el rendimiento global del sistema. Asimismo, cada 3 días Windows crea un listado de las aplicaciones más usadas y las guarda en el fichero "Layout.ini" del directorio X:\Windows\Prefetch. Tras esto, durante los tiempos de inactividad en el sistema, XP realiza una defragmentación en segundo plano de únicamente los archivos listados en dicho fichero. Así, cuando el sistema tenga que “precargar” datos de nuevo lo hará mucho más rápido ya que los ficheros están físicamente contiguos en el disco. La ganancia en rendimiento es considerable.

 

¿DEBO BORRAR EL CONTENIDO DEL DIRECTORIO PREFETCH?

No, debe ser el propio Windows el que maneje dicha carpeta. Pese a que haya bastantes ficheros el rendimiento no se verá afectado, al contrario, si borramos su contenido veremos cómo las aplicaciones tardan más en iniciarse (hasta que se regenera el contenido de la carpeta de nuevo).

Si queremos desactivar dicha función en Windows  (*desaconsejado*), simplemente creamos un valor DWORD denominado EnablePrefetcher con valor 0 en la rama HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters  del Registro de Windows.

 

El valor EnablePrefetcher admite los siguientes valores:

 

0 = Deshabilitado.

1 = Habilitado Prefetching en carga de aplicaciones. 

2 = Habilitado Prefetching en el arranque del sistema 

3 = Habilitado Prefetching para aplicaciones y durante la carga del sistema (valor recomendado)

Prefecthing en Windows 7. SuperFetch

A partir de Windows Vista esta característica se ve mejorada mediante SuperFetch. SuperFetch, extiende las capacidades de Prefecthing, incrementado el rendimiento de las aplicaciones que se utilizan más frecuentemente, para ello hace una cache de los archivos a los que más frecuentemente accede esa aplicación. Además en Windows 7, SuperFech se habilita o deshabilita según el rendimiento del disco duro: En unidades de disco duro que tengan una baja puntuación en el test de rendimiento efectuado por el sistema operativo y que obtengan un bajo rendimiento se habilitará superfech por defecto y se deshabilita automáticamente para todas aquellas unidades de almacenamiento que obtenga una puntuación alta en dicho test. Es decir, que en Windows 7 no es recomendable modificar el comportamiento por defecto de esta tecnología. Para deshabilitar  SuperFetch simplemente tendremos que deshabilitar el servicio relacionado.

 

Daniel Martín, 2004

Revisión: 12 (25 de Julio de 2012) by webmaster

Compartir