Prefetcher — компонент Microsoft Windows , представленный в Windows XP . [1] Это компонент диспетчера памяти , который может ускорить процесс загрузки Windows и сократить время, необходимое для запуска программ. Он достигает этого путем кэширования файлов, необходимых приложению, в ОЗУ при запуске приложения, тем самым объединяя операции чтения с диска и сокращая операции поиска на диске. Эта функция была защищена патентом США 6,633,968. [2] [3]
Начиная с Windows Vista , Prefetcher был расширен SuperFetch и ReadyBoost . SuperFetch пытается ускорить время запуска приложений, отслеживая и адаптируясь к шаблонам использования приложений в течение определенного периода времени, а также кэшируя большинство файлов и данных, необходимых им, в памяти заранее, чтобы к ним можно было получить доступ очень быстро, когда это необходимо. ReadyBoost (если включен) использует внешнюю память, например USB-флеш-накопитель, для расширения системного кэша за пределы объема оперативной памяти, установленной на компьютере. ReadyBoost также имеет компонент под названием ReadyBoot, который заменяет Prefetcher для процесса загрузки, если в системе 700 МБ или более оперативной памяти. [4]
При загрузке системы Windows компоненты многих файлов должны быть считаны в память и обработаны. Часто разные части одного и того же файла (например, кусты реестра) загружаются в разное время. В результате значительное количество времени тратится на «прыжки» из файла в файл и обратно много раз, хотя один доступ был бы более эффективным. Предварительная выборка работает, отслеживая, к каким данным осуществляется доступ во время процесса загрузки (включая данные, считываемые из главной таблицы файлов NTFS ), и записывая файл трассировки этой активности. Загрузочная выборка будет продолжать следить за такой активностью до тех пор, пока не пройдет 30 секунд после запуска оболочки пользователя, или до тех пор, пока не пройдет 60 секунд после завершения инициализации всех служб, или до тех пор, пока не пройдет 120 секунд после загрузки системы, в зависимости от того, что истечет раньше.
Последующие загрузки могут использовать информацию, записанную в этом файле трассировки, для загрузки кода и данных более эффективным способом (т. е. путем переупорядочивания операций чтения с диска, чтобы минимизировать или исключить необходимость многократного доступа к одному и тому же файлу, тем самым минимизируя перемещения головки диска).
Предварительная выборка приложений работает аналогичным образом, но вместо этого локализована для запуска одного приложения. Отслеживаются только первые 10 секунд активности. [1] : 458
Prefetcher хранит свои файлы трассировки в папке "Prefetch" внутри папки Windows (обычно C:\Windows\Prefetch
). Имя файла трассировки загрузки всегда NTOSBOOT-B00DFAAD.PF
, а файлы трассировки приложения представляют собой конкатенацию имени исполняемого файла приложения, дефиса, шестнадцатеричного представления хеша пути, по которому находится файл, и расширения ".pf". Приложения, которые размещают другие компоненты (например, Microsoft Management Console или Dllhost), также включают имя загруженного компонента в вычисленный хеш; это приводит к созданию разных файлов трассировки для каждого компонента.
Обратите внимание, что Task Scheduler — это процесс, отвечающий за анализ данных трассировки, собранных prefetcher, и запись файлов в каталог prefetcher. В результате prefetcher не будет работать правильно, если служба Task Scheduler не запущена.
Для дальнейшего улучшения времени доступа планировщик заданий вызывает дефрагментатор диска Windows каждые три дня. Когда машина простаивает, обрабатываются списки файлов и каталогов, которые были использованы во время процесса загрузки и запуска приложений. [1] : 461–462 Обработанный результат сохраняется в Layout.ini
каталоге Prefetch и впоследствии передается дефрагментатору диска, который дает ему команду переупорядочить эти файлы в последовательные позиции на физическом жестком диске.
Это еще больше повысит производительность за счет минимизации расстояния, которое необходимо преодолеть головкам жесткого диска от одного файла до другого.
Эту переупорядоченность можно запустить (запустив «Defrag.exe %systemdrive% -b» из командной строки) без запуска полной дефрагментации. [ необходима цитата ]
Если система установлена на твердотельном диске , ReadyBoost отключен.
Конфигурация Prefetcher хранится в реестре Windows по адресу HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters
. Значение EnablePrefetcher может быть установлено одним из следующих: [5]
Рекомендуемое значение — 3. [ 5] Значения выше 3 не увеличивают производительность, а изменение значения на 2 не ускорит загрузку Windows. [5]
Часто в Интернете [7] можно найти твик приложения "/prefetch:1", [8] который является допустимым, но неправильно понимаемым переключателем. Он используется для различения различных режимов работы исполняемого файла в случае, если эти различные режимы будут иметь существенно отличающиеся следы предварительной выборки. [9]
Второй миф заключается в том, что пользователь должен удалить содержимое папки prefetch, чтобы ускорить работу компьютера. Если это сделать, Windows придется заново создавать все файлы prefetch, тем самым замедляя Windows во время загрузки и запуска программ, пока не будут созданы файлы prefetch, если только prefetcher не отключен. [10] [11] [12] Windows сохраняет файлы prefetch в папке Prefetch для 128 последних запущенных программ. [13]
Во-вторых, можно указать флаг /prefetch:# при запуске приложения. [...] Некоторые сайты догадались, что этот переключатель включает предварительную загрузку, и предлагают вам добавить его в каждый исполняемый файл, который вам нужен [...]
Обе догадки неверны
. Флаг /prefetch:# проверяется ОС, когда мы создаем процесс, однако у него есть одна (и только одна) цель. Мы добавляем переданное число в хэш. Зачем? [~snip~]
Во-первых, XP в любом случае просто пересоздаст эти данные; во-вторых, она в любом случае обрезает файлы, если их становится больше 128, чтобы не занимать место понапрасну.