Prefetcher es un componente de Microsoft Windows que se introdujo en Windows XP . [1] Es un componente del Administrador de memoria que puede acelerar el proceso de arranque de Windows y acortar la cantidad de tiempo que lleva iniciar programas. Lo logra almacenando en caché los archivos que necesita una aplicación en la RAM a medida que se inicia la aplicación, consolidando así las lecturas del disco y reduciendo las búsquedas en el disco. Esta característica fue protegida por la patente estadounidense 6.633.968. [2] [3]
Desde Windows Vista , el Prefetcher se ha ampliado con SuperFetch y ReadyBoost . SuperFetch intenta acelerar los tiempos de inicio de las aplicaciones al monitorear y adaptarse a los patrones de uso de las aplicaciones durante períodos de tiempo, y almacenar en caché la mayoría de los archivos y datos que necesitan en la memoria con anticipación para que se pueda acceder a ellos muy rápidamente cuando sea necesario. ReadyBoost (cuando está habilitado) usa memoria externa como una unidad flash USB para extender la memoria caché del sistema más allá de la cantidad de RAM instalada en la computadora. ReadyBoost también tiene un componente llamado ReadyBoot que reemplaza al Prefetcher para el proceso de arranque si el sistema tiene 700 MB o más de RAM. [4]
Cuando se inicia un sistema Windows, es necesario leer los componentes de muchos archivos en la memoria y procesarlos. A menudo, se cargan diferentes partes del mismo archivo (por ejemplo, las secciones del Registro) en momentos diferentes. Como resultado, se pierde una cantidad significativa de tiempo "saltando" de un archivo a otro y viceversa varias veces, aunque un solo acceso sería más eficiente. El prefetcher funciona observando a qué datos se accede durante el proceso de arranque (incluidos los datos leídos de la Tabla maestra de archivos NTFS ) y registrando un archivo de seguimiento de esta actividad. El prefetcher de arranque continuará observando dicha actividad hasta 30 segundos después de que se haya iniciado el shell del usuario, o hasta 60 segundos después de que todos los servicios hayan terminado de inicializarse, o hasta 120 segundos después de que se haya iniciado el sistema, lo que transcurra primero.
Los futuros arranques pueden entonces usar la información registrada en este archivo de seguimiento para cargar código y datos de una manera más eficiente (es decir, reordenando las lecturas del disco para minimizar o eliminar la necesidad de acceder al mismo archivo varias veces, minimizando así los movimientos del cabezal del disco).
La precarga de aplicaciones funciona de manera similar, pero se localiza en el inicio de una sola aplicación. Solo se monitorean los primeros 10 segundos de actividad. [1] : 458
El prefetcher almacena sus archivos de seguimiento en la carpeta "Prefetch" dentro de la carpeta Windows (normalmente C:\Windows\Prefetch
). El nombre del archivo de seguimiento de arranque siempre es NTOSBOOT-B00DFAAD.PF
, y los archivos de seguimiento de la aplicación son una concatenación del nombre del ejecutable de la aplicación, un guion, una representación hexadecimal del hash de la ruta en la que reside el archivo y una extensión ".pf". Las aplicaciones que alojan otros componentes (es decir, Microsoft Management Console o Dllhost) también tienen el nombre del componente cargado incluido en el hash calculado; esto da como resultado que se creen diferentes archivos de seguimiento para cada componente.
Tenga en cuenta que el Programador de tareas es el proceso responsable de analizar los datos de seguimiento recopilados por el prefetcher y escribir archivos en el directorio del prefetcher. Como resultado, el prefetcher no funcionará correctamente si el servicio del Programador de tareas no está iniciado.
Para mejorar aún más los tiempos de acceso, el Programador de tareas llama al Desfragmentador de disco de Windows cada tres días. Cuando la máquina está inactiva, se procesan las listas de archivos y directorios a los que se hizo referencia durante el proceso de arranque y los inicios de aplicaciones. [1] : 461–462 El resultado procesado se almacena en Layout.ini
el directorio Prefetch y, posteriormente, se pasa al Desfragmentador de disco, que le ordena que reordene esos archivos en posiciones secuenciales en el disco duro físico.
Esto mejorará aún más el rendimiento al minimizar la distancia que deben moverse los cabezales del disco duro de un archivo al siguiente.
Es posible activar esta reordenación (ejecutando "Defrag.exe %systemdrive% -b" desde la línea de comandos) sin ejecutar una desfragmentación completa. [ cita requerida ]
Si el sistema está instalado en una unidad de estado sólido , ReadyBoost está deshabilitado.
La configuración de Prefetcher se almacena en el Registro de Windows en HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters
. El valor de EnablePrefetcher puede configurarse como uno de los siguientes: [5]
El valor recomendado es 3. [5] Los valores superiores a 3 no aumentan el rendimiento y cambiar el valor a 2 no hará que Windows arranque más rápido. [5]
En Internet [7] se encuentra a menudo el ajuste de aplicación "/prefetch:1", [8] que es un modificador válido pero mal entendido. Se utiliza para distinguir entre diferentes modos operativos de un ejecutable en caso de que esos diferentes modos tengan trazas de prefetch significativamente diferentes. [9]
Un segundo mito es que el usuario debería eliminar el contenido de la carpeta de prefetch para acelerar el equipo. Si se hace esto, Windows tendrá que volver a crear todos los archivos de prefetch, lo que ralentizará Windows durante el arranque y el inicio de los programas hasta que se creen los archivos de prefetch, a menos que el prefetcher esté deshabilitado. [10] [11] [12] Windows mantiene los archivos de prefetch en la carpeta Prefetch para hasta los 128 programas iniciados más recientemente. [13]
segundo lugar, se puede especificar un indicador /prefetch:# al iniciar una aplicación. [...] Algunos sitios han adivinado que este interruptor activa la precarga y sugieren que lo agregue a todos los ejecutables que le interesen [...]
Ambas suposiciones son incorrectas
. El sistema operativo observa el indicador /prefetch:# cuando creamos el proceso; sin embargo, tiene un (y solo un) propósito. Agregamos el número pasado al hash. ¿Por qué? [~snip~]
Por un lado, XP volverá a crear esos datos de todos modos; en segundo lugar, recorta los archivos de todos modos si hay más de 128 de ellos para no consumir espacio innecesariamente.