<< Главная страница

Почему Vista использует всю мою память?

Неопытные пользователи Windows Vista постоянно задают вопросы относительного того, почему их новая ОС занимает всю оперативную память, при этом чем больше у них оперативной памяти, тем больше аппетиты Windows Vista. Давайте попробуем разобраться и расставить все точки над i.

Перво-наперво, стоит раз и навсегда понять и принять, что у Windows Vista абсолютно другой подход к управлению памятью. "Другой" означает, что не такой, как у Windows XP. B принципе их и сравнивать-то некорректно, но мы все-таки попробуем.

Посмотрите на строчку "свободное количество физической памяти" в диспетчере задач Windows Vista.

Почему Vista использует всю мою память?


На момент снятия данного скриншота на компьютере было запущено несколько окон IE 7, плюс один удалённый рабочий стол. При этом свободно всего 6 Мб свободной памяти.

Теперь сравним этот скриншот со скриншотом из XP при примерно такой загрузке.

Почему Vista использует всю мою память?


Напротив пункта "Доступная физическая память" написано, что свободно около 1.5 Гб - так и должно быть.

Так что же происходит? Почему Vista использует так много памяти, если на компьютере практически никаких действией не выполняется? Чтобы ответить на этот вопрос, нужно понять, на что расходуется оперативная память.

Предположим, что вы захотели создать новый текстовый файл.

1. Нажимаете два раза на иконке Блокнота.
2. Исполнительный файл Блокнота загружается с винчестера в память.
3. Блокнот исполнятся.
4. Блокнот распределяет свободную память для хранения вашего документа.

Итак, ясно, что блокнот нуждается в небольшом количестве памяти, достаточном, чтобы запустится и отображать своё содержимое. Но это может быть несколько мегабайт, как максимум. Даже если так. Что с оставшимися 2046 Мб памяти?

Вам надо перестать думать о системной памяти как о ресурсе, а начать думать, как о кэше. Как и L1 и L2-кэш вашего процессора, ОЗУ - всего лишь еще один высокоскоростной кэш между вашим компьютером и диском.

А самое важное правило дизайна системы кэша: пустой кэш - потраченный в пустую кэш. В пустом кэше никакого прока. Это дорогая, высокоскоростная память, на которую тратится питание и которая не приносит никакой пользы. Основная цель в жизни любого кэша - заполнять себя как можно быстрее данными, которые, скорее всего, понадобятся, и последовательно поставлять необходимые данные. Иначе вам придётся обращаться напрямую к жёсткому диску.

Диомидис Спинеллис (Diomidis Spinellis) опубликовал превосходный разбор рейтинга производительности кэша в типичном по состоянию на январь 2006 года компьютере.

Почему Vista использует всю мою память?


В итоге, вот насколько быстрее ваша память, чем жёсткий диск:

Системная память - в 37 раз быстрее.
L2 кэш процессора - в 82 раза быстрее.
L1 кэш процессора - в 283 раза быстрее.

Эти данные объясняют, почему в Vista осталось всего 6 мегабайт свободной памяти. Vista старается предельно заполнить каждый байт памяти данными, которые, по её мнению, могут понадобится в следующий момент. Vista запускает с низким приоритетом фоновые процессы и размещает их в неиспользованную системную память. У Microsoft для этих процессов есть даже причудливое маркетинговое название - SuperFetch: "В прошлых версиях Windows реакция системы могла быть неравномерной. Вы могли сталкиваться с медленной работой системы после загрузки, после нескольких быстрых переключений пользователей или просто после обеда. Также как большое количество углеводов могут вас замедлить после еды, так и ваш компьютер может начать тормозить по разным причинам. Когда вы активно не используете компьютер, то фоновые задачи, включая автоматические резервные копии и антивирусное сканирование, пользуются этим, чтобы исполнятся, в тот момент, когда они меньше всего вас могут потревожить. Эти фоновые задачи могут занимать место в системной памяти, которое использовали ваши приложения. После того, как вы снова начнёте использовать компьютер, потребуется какое-то время, чтобы повторно загрузить ваши данные в память, что снизит производительность.

SuperFetch понимает, какие приложения вы используете чаще всего, и загружает их в память заранее, таким образом, ваша система быстрее реагирует на запросы. SuperFetch использует интеллектуальную схему системы приоритетов, которая понимает, какие приложения вы используете чаще всего, и даже способна различить какие приложения, вероятно, вы будете использовать в разное время, например, на выходных, а не во время рабочей недели, так что компьютер готов делать то, что хотите делать вы. Windows Vista может также расположить по приоритетам ваши приложения в фоновых задачах, так что даже когда вы выводите свой компьютер из режима простоя, система практически моментально готова к работе".

Конечно, это не новый концепт. Но Vista обрабатывает системную память как кэш намного агрессивнее и эффективнее, чем предыдущие версии Windows. Как вы можете заметить из вышеуказанного скриншота менеджера задач, Windows XP совершенно не волнуется по поводу того, что свободен целый гигабайт памяти. С перспективы кэширования - это уму непостижимо. Vista на пределах возможного старается, как может, чтобы заполнить системную память.

Я являюсь приверженцем религии использования системной памяти в качестве кэша, но SuperFetch всё еще может иметь несколько побочных эффектов. Первое, что я заметил, это то, что было что-то не так, когда я запустил Battlefield 2 в Vista и подключился к сетевой игре. Battlefield 2 - достаточно серьезный потребитель ресурсов. Игра регулярно использует 1 Гб памяти на больших картах для 64-х игроков. Во время первых нескольких минут я заметил, что система работала слегка замедленно и постоянно были обращения к диску. Это было очень необычно, и абсолютно не похоже на поведение в XP. Как только вы загружаете карту и входите в игру - вся игра находится в памяти. Что в данный момент могло загружаться с диска? Оказлось, что SuperFetch увидела кучу освобождённой для игры памяти и продолжила заполнять свободную память фоновыми процессами с низким приоритетом. Обычно, это осталось бы незамеченным, но даже фоновый низкоприоритетный дисковый поток достаточно заметен, когда вы в онлайне играете в шутер да еще с 63 пользователями на разрешении 1600х1200.

Я абсолютно спокойно отношусь к тому, чтобы SuperFetch по-своему использовала мою системную память. Вопрос не должен стоять "Почему Vista использует всю мою память?", но "Какого чёрта предыдущие версии Windows используют мою память так неэффективно?". Я не знаю. Возможно, до того как 2 Гб памяти стали стандартом в большинстве ПК, правила были другие.

Чем меньше у меня свободной памяти, тем лучше - каждый байт памяти должен всё время работать в мою пользу. Однако я хочу, чтобы был способ сообщить SuperFetch, чтобы он приостанавливал свою работу, когда я играю.