или Почему Vista использует всю мою память?
Как только я установил Windows Vista, то сразу же заметил, что моя ОС занимает всю оперативную память. Я пришёл к выводу, что Vista есть ненасытный пожиратель оперативной памяти, и задумался о возможных причинах этого таинственного феномена. Оказалось, что объектом моего недовольства было фирменное средство Vista для повышения производительности SuperFretch. Поскольку такие же вопросы возникают у других пользователей Vista, я решил лично разобраться в них и расставить все точки над "i".
Чтобы увидеть разницу, я сравнил данные, представленные на вкладках "Быстродействие" (Performance) одинаково оборудованных машин с операционными системами XP и Vista.
На первом скриншоте показана вкладка "Диспетчера задач" Windows XP, на втором - Vista. На обеих системах запущены только MS Ofice 2007 и Total Commander. Но если взглянуть на количество доступной памяти в XP, можно увидеть, что оно составляет 1,5 Гб, в то время как у Vista - 0. Какова же причина этого парадокса? Почему Vista использует так много памяти, если компьютер практически не нагружен? Чтобы ответить на этот вопрос, нужно понять, как расходуется оперативная память в Vista.
Первое, что нужно принять на веру - то, что Vista имеет совершенно другой механизм контроля памяти, чем XP. Vista всю системную память считает не ресурсом, а именно кэшем. Фактически так и есть, как и L1, и L2-кэш вашего процессора, ОЗУ - всего лишь ещё один высокоскоростной кэш между вашим компьютером и диском. А самое важное правило системы кэша: пустой кэш - потраченный впустую кэш. В пустом кэше нет никакого смысла. Основная цель в жизни любого кэша - заполнять себя как можно быстрее данными, которые, скорее всего, понадобятся, и последовательно поставлять необходимые данные. Иначе придётся обращаться напрямую к жёсткому диску.
У большинства компьютеров весь объём оперативной памяти часто не используется, поэтому программисты Microsoft решили исправить это и изменили механизм контроля памяти, назвав его SuperFetch. Механизм работы SF таков: сперва SF отслеживает пользовательскую активность и определяет наиболее часто используемые приложения, для чего создаёт базу данных, которая перманентно обновляется по ходу работы пользователя. Затем при каждом запуске системы SF заранее загружает эти приложения в память. Таким образом, когда вы запускаете свою любимую программу, она выгружается намного быстрее из кэша ОЗУ, чем когда система читает её с диска и загружает в память. SF задействует технологию расстановки приоритетов операций ввода/вывода, которая помечает каждое приложение как программу с относительно низким или высоким приоритетом ввода/вывода. Говоря простыми словами, SuperFetch пытается закачать данные приложений с медленного жёсткого диска в оперативную память. Официально заявлено, что если у вас установлено 512 Мб, то служба не будет работать эффективно (если может).
Другой немаловажный вопрос: чем же кэширование SF отличается от кэширования в XP? Vista обрабатывает системную память как кэш намного агрессивнее, чем предыдущие версии Windows, т.к. старается задействовать ВСЮ имеющуюся память. Как вы можете видеть на вышеуказанном скриншоте менеджера задач, Windows XP совершенно всё равно, что свободна целая куча памяти. Ненасытная Vista же на пределах возможного старается, как может, заполнить системную память.
Я не являюсь приверженцем религии использования системной памяти в качестве кэша. У данной технологии есть много недостатков, которые заставляют задуматься о выключении данной службы. Особенно ярко проблемы проявляются, когда вы запускаете ресурсоёмкие приложения, особенно игры. Думаю, вы заметили, что часто на дисках с играми пишут не только основные системные требования, но и системные требования для Vista, которые всегда выше обычных. Например, когда я играл в Quake Wars: Enemy Territory в Vista, то заметил, что игрушка работала намного медленнее, чем в XP; ОС постоянно обращалась к жёсткому диску. Это было очень необычно и абсолютно не похоже на поведение в XP. Что в данный момент могло загружаться с диска? Оказывается, что SuperFetch увидела кучу освобождённой для игры памяти и продолжила заполнять свободную память фоновыми процессами с низким приоритетом. Обычно это осталось бы незамеченным, но даже фоновый низкоприоритетный дисковый поток достаточно заметен, когда вы в онлайне играете в шутер да ещё с десятками пользователями на разрешении 1600х1200.
SuperFetch всё время подгружает всё нужное и ненужное в память вместо того, чтобы кэшировать только исполняемые файлы (а если Vista заинтересует несколько файлов в полгигабайта?), постоянно обращается к жёсткому диску. Представьте, что у вас всего 512 Мб оперативной памяти, 350 Мб занимает сама Windows, а всё остальное захватывает SF. Поэтому данной службой нужно пользоваться только тем, у кого больше 1 Гб оперативной памяти. Да и там SF заставит о себе вспомнить, заняв всю имеющуюся память. По идее, сам процесс постоянного кэширования достаточно сильно загружает процессор. Самое главное - возможны конфликты при запуске ресурсоёмких предложений, например, AdobePremiereCS3. Не стоит забывать, что Vista сама по себе занимает много памяти даже с выключенным SF, намного больше, чем XP.
Идея подобной предварительной загрузки исполняемых файлов в память действительно эффективна: приложение сначала считывается с жёсткого диска, а уже потом выполняется. Поскольку жёсткие диски работают медленнее, по сравнению с памятью (60-70 Мбайт/с, по сравнению с 5-7 Гбайт/с), работа с памятью осуществляется намного быстрее, чем с винчестерами. Т.е. это действительно должно ускорять запуск приложений. Но программисты из Microsoft сделали всё по-своему. Таких проблем бы не было, если бы была возможность настроить SuperFetch - указать, чтобы она кэшировала только Windir и папку с софтом, но, увы, такой возможности нет.
Итак, какой же вывод нужно сделать из всего вышесказанного? Если вы обладаете 1 Гб ОЗУ или больше и вы не заядлый геймер, который следит за каждой вышедшей игрушкой, то вам SF, может быть, и поможет. Но если вы поставили Vista на машину с маленьким количеством памяти, то отключайте службу SuperFetch и радуйтесь жизни. Всё зависит от рода ваших занятий. Для отключения SF достаточно ввести в командной строке:
sc config SysMain start= disabled
P.S. Лично я SuperFetch отключил.
Александр УШАКОВ
Комментарии
Статья кончно хорошая.
но всё же, думаю SuperFretch отключать не стоит.
Собственно, и во-вторых/третьих - то же самое!
Как бы и вистой пользоваться при памяти меньшет гига - бред и мазохизм