Prefetcher
Prefetcher — компонент операційної системи Microsoft Windows, що прискорює процес її початкового завантаження, а також скорочує час запуску програм. Prefetcher уперше з'явився в операційній системі Windows XP. Починаючи з Windows Vista, його було доповнено технологіями SuperFetch і ReadyBoost.
Опис
Запуск Windows і застосунків супроводжується читанням у пам'ять і обробкою великої кількості файлів. Часто один і той самий файл відкривається декілька разів для читання різних сегментів. Такий нераціональний доступ до файлів займає багато часу. Набагато ефективніше звертатися до кожного файлу лише один раз, завантажуючи інформацію до оперативної пам'яті ще до того, як вона стане потрібною програмам. Prefetcher спостерігає за тим, який код і дані (включно з головною файловою таблицею NTFS) завантажуються у процесі запуску операційної системи та застосунків. Він накопичує ці відомості у файлах трасування для оптимізації завантаження коду та даних при наступних запусках.
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 відіграє служба «Планувальник завдань». «Планувальник завдань» аналізує дані, що надходять від 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». У реальності додавання цього ключа саме по собі не дає жодного ефекту, а в деяких випадках застосунок може відмовитися запускатися зовсім[4].
- Видалення файлів із папки
%SystemRoot%\Prefetch
прискорює роботу комп'ютера. - Цей міф засновується на припущенні, що в папці
%SystemRoot%\Prefetch
накопичується забагато файлів, тому Prefetcher починає «гальмувати» систему. В реальності очищення вищезазначеної папки спричинює сповільнення роботи комп'ютера доти, доки трасувальні дані не будуть знову накопичені. - З часом папка
%SystemRoot%\Prefetch
починає займати багато місця на диску. - У більшості випадків це можна розглядати як міф. Із метою економії дискового простору максимальна кількість трасувальних файлів обмежена 128. Очищення папки
%SystemRoot%\Prefetch
не вимагається, так як Prefetcher обслуговує себе автоматично без участі з боку користувача.
Примітки
- Windows XP: Kernel Improvements Create a More Robust, Powerful, and Scalable OS [Windows XP: Поліпшення ядра створили надійнішу, потужнішу та масштабованішу ОС]. MSDN Magazine (англійською). грудень 2001.
- What is the prefetch folder? [Що таке папка prefetch?]. Windows Vista Help (англійською). Архів оригіналу за 29 травня 2016. Процитовано 17 грудня 2018.
- Kernel Enhancements for Windows XP [Покращення ядра для Windows XP]. Windows Hardware Developer Central. 13 січня 2003. Архів оригіналу за 24 вересня 2010. Процитовано 17 грудня 2018.
- Misinformation and the The Prefetch Flag [Дезінформація та прапорець Prefetch]. MSDN Blogs. 25 травня 2005. «Funny, It Worked Last Time»