Prefetcher

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

Prefetcher — компонент операционной системы Microsoft Windows, ускоряющий процесс её начальной загрузки, а также сокращающий время запуска программ. Prefetcher впервые появился в операционной системе Windows XP. Начиная с Windows Vista, он был дополнен технологиями SuperFetch и ReadyBoost.

Описание[править | править код]

Запуск Windows и приложений сопровождается чтением в память и обработкой огромного количества файлов. Зачастую один и тот же файл открывается по несколько раз для чтения различных сегментов. Такой нерациональный доступ к файлам занимает много времени. Гораздо эффективнее обращаться к каждому файлу только один раз, загружая информацию в оперативную память ещё до того, как она станет нужна программам. Prefetcher наблюдает за тем, какой код и данные (включая NTFS Master File Table) загружаются в процессе запуска операционной системы и приложений. Он накапливает эти сведения в файлах трассировки для оптимизации загрузки кода и данных при следующих запусках.

Prefetcher наблюдает за запуском каждого приложения в течение первых 10 секунд. Наблюдение за процессом загрузки системы ограничено по времени и прекращается в следующих случаях[1]:

  • по истечении 30 секунд с момента запуска пользовательской оболочки
  • по истечении 60 секунд с момента завершения инициализации всех служб
  • по истечении 120 секунд с момента начала загрузки системы

Файлы трассировки сохраняются в папке Prefetch корневого каталога Windows[2] (обычно C:\WINDOWS\Prefetch). Загрузка операционной системы трассируется в файл NTOSBOOT-B00DFAAD.pf. Запуск программ трассируется в отдельные файлы, имена которых состоят из названия исполняемого файла запускаемой программы, дефиса, шестнадцатеричного хеша пути к исполняемому файлу и расширения «.pf» (например: EXPLORER.EXE-082F38A9.pf). При запуске приложений, являющихся рабочей средой для других компонентов (например: DLLHOST.EXE, MMC.EXE, RUNDLL32.EXE), в хеш также добавляется имя загружаемого модуля, в итоге для разных компонентов создаются разные файлы трассировки (например: MMC.EXE-0B0171A2.pf, MMC.EXE-393F4B82.pf).

Важную роль в работе компонента Prefetcher играет служба «Планировщик заданий» (англ. Task Scheduler). «Планировщик заданий» анализирует данные, поступающие от Prefetcher, и записывает файлы трассировки в папку %SystemRoot%\Prefetch. Если служба не запущена, Prefetcher не будет работать правильно. «Планировщик заданий» также взаимодействует с программой дефрагментации диска Windows. Каждые три дня во время простоя компьютера в папке %SystemRoot%\Prefetch создается файл Layout.ini, в котором сохраняется список файлов и папок, использовавшихся при загрузке операционной системы и запуске программ. Дефрагментатор диска использует информацию из файла Layout.ini для оптимального физического размещения этих файлов на диске.

Настройка[править | править код]

Параметры Prefetcher хранятся в системном реестре в разделе HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters[3]. Параметр EnablePrefetcher (DWORD) может принимать одно из следующих значений:

  • 0x00000000 — компонент отключен
  • 0x00000001 — ускорение запуска приложений
  • 0x00000002 — ускорение загрузки системы
  • 0x00000003 — ускорение запуска приложений и загрузки системы

Изменение параметра EnablePrefetcher вступает в действие немедленно.

RootDirPath

Файл предварительной выборки системной, начальной загрузки расположен в каталоге %SystemRoot%\Prefetch и путь к нему задан именно этим параметром.

Значение по умолчанию = Prefetch

Мифы[править | править код]

Существует несколько распространенных мифов о Prefetcher:

  • Добавление ключа «/prefetch:1» в строку запуска приложения ускоряет его загрузку.
    Этот миф основывается на том факте, что после установки операционной системы в строке запуска Windows Media Player изначально указан ключ «/prefetch:1». В реальности данный ключ инструктирует систему сохранять и использовать данные Prefetch для конкретного приложения под разными именами в зависимости от числа, указанного в ключе после двоеточия.[4]
  • Удаление файлов из папки %SystemRoot%\Prefetch ускоряет работу компьютера.
    Этот миф основывается на предположении, что в папке %SystemRoot%\Prefetch скапливается слишком много файлов, поэтому Prefetcher начинает «тормозить» систему. В реальности очистка вышеуказанной папки приводит к замедлению работы компьютера до тех пор, пока трассировочные данные не будут снова накоплены[4].
  • Со временем папка %SystemRoot%\Prefetch начинает занимать много места на диске.
    В целях экономии дискового пространства максимальное количество трассировочных файлов ограничено 128[4]. Очистка папки %SystemRoot%\Prefetch не требуется, так как Prefetcher обслуживает себя автоматически без участия со стороны пользователя[2].

Примечания[править | править код]

  1. Windows XP: Kernel Improvements Create a More Robust, Powerful, and Scalable OS Архивная копия от 7 мая 2015 на Wayback Machine — From the December 2001 issue of MSDN Magazine.
  2. 1 2 What is the prefetch folder? Архивная копия от 29 мая 2016 на Wayback Machine — Windows Vista Help.
  3. Kernel Enhancements for Windows XP Архивная копия от 24 сентября 2010 на Wayback Machine — Windows Hardware Developer Central. 13 January, 2003.
  4. 1 2 3 Misinformation and the The Prefetch Flag Архивная копия от 15 августа 2021 на Wayback Machine — MSDN Blogs. 25 May, 2005.

См. также[править | править код]

Ссылки[править | править код]