понедельник, 13 августа 2007 г.

Оптимизация Windows: загрузка

Как и обещал, начинаю цикл статей по тонкой настройке и оптимизации Windows. Правило Парето никто не отменял, поэтому я буду иметь в виду в основном Windows XP, так как на данный момент это лучше всего поддающаяся настройке система из линейки Windows.
Сегодня я постараюсь обобщить свой опыт по настройке системы с целью ускорения загрузки. Оценка того, что мы сделали, будет выражаться во времени, которое нужно системе, чтобы загрузить оболочку - то есть с момента старта компьютера и до появления значков на рабочем столе. Понятно, что загрузка на этом не заканчивается - продолжают подгружаться какие-то приложения, службы, но система уже готова реагировать на действия пользователя.
Консерваторы могут проводить все измерения с помощью секундомера, но я бы порекомендовал не пренебрегать веяниями прогресса и воспользоваться специальным трассировщиком загрузки - Bootvis. Программа эта в высшей степени полезная и наделавшая немало шума своим появлением. Кроме отображения хода и временных характеристик загрузки, она также может запускать встроенные механизмы оптимизации. Но об этом позже.
Процесс загрузки Windows - довольно сложная штука. Если вам непременно нужно знать все в подробностях, почитайте какую-нибудь статью, а лучше даже умную книгу. Но нам пока хватит упрощенного описания, согласно которому загрузка происходит в четыре этапа:
  1. Загрузка NTLDR и основных файлов, выбор конфигурации.
  2. Загрузка ядра, инициализация устройств, загрузка драйверов.
  3. Инициализация подсистем, запуск LSASS и WINLOGON.
  4. Запуск оболочки (EXPLORER), служб и дополнительных программ.
Между пунктами 3 и 4 отображается окно входа в систему, а пользователь вводит пароль. Любой системный программист меня за такое описание запрезирает, но я ведь не для них пишу, правда? Самое главное, что необходимо понять из приведенного выше списка - что с жесткого диска в память считывается масса данных, причем чтение осуществляется не последовательно а, так сказать, "из разных концов диска" - откуда требуется, оттуда и грузим. На это уходит львиная доля времени загрузки. Но так было в Windows 2000. Разработчики XP внедрили два средства повышения скорости загрузки, про которые многие забывают.
Первое называется prefetching - упреждающее чтение. В основу этого способа лег тот факт, что процесс загрузки происходит каждый раз примерно одинаково. Система пытается определить этот порядок, чтобы за одно обращение к диску считать не только требуемый в настоящий момент блок данных, но и данные, которые понадобятся на более поздних этапах. Свои наблюдения за загрузкой Windows помещает в папку %windir%\Prefetch, создавая свой профильный файл для каждого приложения и службы, а итог своих наблюдений располагает в файле layout.ini.
По умолчанию prefetching в Windows включен, так можно по этому поводу не беспокоиться. Если же вы имели несчастье пользоваться всякими "твикерами", то стоит проверить: параметр в реестре HKLM\System\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters\EnablePrefetcher должен иметь значение 3.
Второе средство борьбы со временем загрузки - BootDefrag - дефрагментация для ускорения загрузки. Суть такова - расположить на диске файлы, требуемые при загрузке, так, чтобы время доступа к ним было минимально. Дефрагментация происходит автоматически, если после загрузки Windows пользователь не совершал никаких действий в течение минут этак 20. Про это мало кто из непродвинутых пользователей знает, поэтому преполезнейшая эта возможность остается невостребованной. Проверить, прошла ли дефрагментация, можно по ключу HKLM\Software\Microsoft\Dfrg\BootOptimizeFunction\OptimizeComplete. Если ключ равен "Yes", стало быть, дефрагментация имела место.
Теперь немного практики. Все приведенные ниже действия буду работать, если не отключена служба планировщика заданий. Запустим упомянутую уже программу Bootvis, и выберем в меню Trace пункт Next Boot. Компьютер автоматически перезагрузится, и через некоторое время после окончания загрузки запустится Bootvis и отобразит протокол загрузки. Маркер в виде палки с квадратом на конце отмечает время окончания запуска оболочки - это и будем считать временем окончания загрузки. В моем случае после первого использования Bootvis это время составляло 36 секунд.
Теперь выбираем пункт Optimize System в меню Trace. Снова произойдет перезагрузка, после которой будет принудительно запущен механизм BootDefrag. Затем нужно снова запустить трассировку из Bootvis, выбрав Next Trace. На этот раз мой результат составил 26 секунд. Неплохо, да?
Продолжим изыскания. Некоторые авторитетные для меня источники утверждали, что упреждающее чтение в некоторых ситуациях не увеличивает производительность, а уменьшает ее! Посему я решил отключить prefetching и по новой выполнить загрузочную дефрагментацию. Вот что я сделал (не торопитесь делать то же самое):
  1. Удалил файл %windir%\Prefetch\ntosboot-b00dfaad.pf - это профиль загрузки.
  2. Упомянутый выше ключ EnablePrefetcher установил в 0.
  3. В ветке HKLM\Software\Microsoft\Dfrg\BootOptimizeFunction установил ключи LcnStartLocation и LcnEndLocation равными 0, а OptimizeComplete - "No".
  4. Принудительно запустил загрузочную дефрагментацию командой defrag c: -boot (здесь "c" - имя раздела, с которого происходит загрузка). Дефрагментация заняла пару минут, после чего ключи LcnStartLocation и LcnEndLocation получили новые значения, а OptimizeComplete стал "Yes".
  5. Перезагрузился через Bootvis. Получил 27 секунд.
Как видим, манипуляции ничего не дали - стало только хуже (слегка). По-моему, этот хак работал только до выхода SP2.
Итак, я вернул EnablePrefetcher=3 и два раза перезагрузился, получив, соответветственно, 25 и 24 секунды. Мораль: Prefetching можно не отключать, зато иногда полезно запустить дефрагментацию.
AutoRunsТеперь, когда мы более-менее справились с оптимизацией качественной, самое время приступать к оптимизации количественной. А именно - избавиться от ненужных служб и программ, которые запускаются при загрузке, но совершенно нам не нужны и только тратят драгоценное время.
Я мог бы долго и нудно рассказывать, где прячутся автозагружаемые приложения и компоненты, но сам воспользовался для этого (и всем рекомендую) бесплатной программкой AutoRuns от Sysinternals (спасибо aumakua).
Итого: я получил 23 секунды загрузки. Это время можно еще уменьшить, автоматизировав (ценой безопасности) вход в систему, но это отдельный разговор.

10 коммент.:

Ivan комментирует...

Тоесть BootVis 1.3.37.0 ставлю и у меня быстрее грузиться винда начинает?

Ivan комментирует...

А если у меня на компе несколько пользователей(притом неопытных) ничего не произойдет?
Сам процесс, который я на экране вижу остается таким же?

Flegmatic комментирует...

1. Нет, BootVis - это средство наблюдения, в которое встроена возможность запуска стандартных механизмов оптимизации Windows (Trace->Optimize). От простой установки этой программы ничего не изменится.
2. Процесс ничуть не изменится, а изменения коснутся всех пользователей (поскольку мы оптимизируем ту часть загрузки, которая происходит до выбора пользователя).

Ivan комментирует...

А как тебе RunManager?

Анонимный комментирует...

Еще помогает убыстрению загрузки отключени неиспользуемых устройств в Device manager!

Где-то в форуме весь список действий был расписан, найду ссылку - напишу.

Flegmatic комментирует...

incognito, ты имеешь в виду программу для запрета запуска приложений? А причем она здесь?

vortex, твоя правда.

Ivan комментирует...

Привет, приглашаем тебя принять участие в акции:
http://incogni-to.blogspot.com/2007/08/blog-post_2347.html

Анонимный комментирует...

вот, нашел
http://www.neowin.net/forum/index.php?showtopic=235571

описаны все возможные и невозможные действия по убыстрению винды!!!

благодаря чему у меня винда уже стоит год и не падает и бегает так же быстро, как при первой установке =)))

Flegmatic комментирует...

Спасибо, шикарная ссылочка. Постараюсь разродиться статейкой-другой по материалам этого форума.

раскрутка сайта комментирует...

Было бы отлично, если бы сайтов таких было бы побольше