Сокращение использования памяти во время выполнения в Windows 8

Улучшение базовых показателей, таких, как использование памяти, является ключевым принципом разработки Windows 8. При создании Windows 8 мы задались целью значительно снизить требования к памяти во время выполнения для ядра системы. Это хорошо для всех и особенно в современных условиях, когда пользователи хотят одновременно запускать все больше и больше приложений или использовать системы всего с 1 или 2 ГБ памяти. Ноутбук, который мы рассматриваем в данной статье, уже упоминался при обсуждении Windows 7 PDC в 2008 году — это готовый нетбук первого поколения на базе процессора ATOM с 1 ГБ памяти. В данной статье рассматриваются наши решения по сокращению объема занимаемой памяти, ее автор — Билл Карагонис (Bill Karagounis), руководитель группы программ Performance. — Стивен

Использование памяти во время выполнения в операционной системе Windows 8 — это важный фактор для определения требований к системе Windows 8, а также расширенного диапазона устройств, на которых будет использоваться операционная система Windows 8. Как вы знаете, мы обеспечиваем полную функциональность Windows 8 на устройствах, основанных на технологии SoC, для которых характерно низкое энергопотребление. Это делает задачу обеспечения большого объема памяти, доступной нескольким одновременно выполняющимся приложениям, и общей «отзывчивости» устройств, еще более важной.

В некоторых случаях тот факт, что минимизация использования памяти на платформах с низким энергопотреблением может продлевать время работы от батареи, может быть недостаточно очевидным, не так ли? В любом компьютере ОЗУ постоянно потребляет электроэнергию. Если ОС использует большой объем памяти, это может вынудить производителей устройств устанавливать больше физической памяти. Чем больше ОЗУ установлено, тем больше энергии используется, и тем меньше итоговое время работы от батареи. Наличие дополнительной памяти на планшетном устройстве в некоторых случаях может существенно сократить время работы этого устройства в режиме ожидания.

Цели по использованию памяти

С самого начала нашей целью для операционной системы Windows 8 было обеспечения соответствия тем же системным требованиям, которые были установлены для Windows 7. Мы знаем, что при сохранении указанных требований будет даже лучше, если мы сможем предоставить еще больше ресурсов для приложений. Забавно думать о том, что из себя представляло «бюджетное» оборудование в 2009 году и что сейчас некоторые такие вещи, например модули памяти на 256 МБ, вообще исчезли. Мы хотели убедиться, что люди, работающие на оборудовании «эры» Windows 7, получат возможность простого обновления имеющихся компьютеров до Windows 8 и смогут воспользоваться преимуществами доступных в этой операционной системе функциональных возможностей. Мы также считаем, что на многих компьютерах, купленных до выпуска Windows 7, запуск Windows 8 также будет возможен. Эти сведения мы получили благодаря тому, что преднамеренно не исключили более старые компьютеры из инфраструктуры тестирования производительности.

Важная задача для Windows 8 заключалась во внедрении новых функций одновременно с поиском возможностей для снижения объема памяти, используемой как существующими компонентами, так и всей системой в целом. И можно сказать, что операционная система Windows 8 уверенно движется в направлении достижения поставленных нами целей.

Сравнение использования памяти в диспетчере задач

Самым простым способом приблизительного сравнения использования памяти в операционных системах Windows 8 и Windows 7 является установка обеих этих систем на компьютере с 1 ГБ ОЗУ (минимальное требование к объему ОЗУ) и сравнение их в условиях многократных перезагрузок и некоторого периода неактивности.

Диспетчер задач Windows содержит основное представление памяти системы в виде статистических данных по используемой памяти (более подробное описание см. в этом документе). На приведенных ниже рисунках сравнивается использование памяти на принадлежащем Стивену нетбуке, который был куплен более 3 лет назад и недавно использовался во время выступления на конференции //build/. Первый рисунок соответствует работе Windows 7 в режиме ожидания, а второй — работе Windows 8 на том же самом устройстве.

Диспетчер задач Windows 7. Загрузка ЦП: 5 %, память: 404 МБРис. 1. Использование памяти в Windows 7 с пакетом обновления 1 (SP1)

Диспетчер задач Windows 8. Загрузка ЦП: 1 %, память: 281 МБРис. 2. Использование памяти в Windows 8

На ситуацию может влиять конкретное оборудование, входящее в состав компьютера, использование памяти драйверами и даже период работоспособности, поэтому результаты для памяти будут разными на разных компьютерах (или даже на одном компьютере в разное время). Однако, как можно видеть, что операционная система Windows 8 показывает более высокие результаты, чем Windows 7.

В качестве дополнительного эксперимента перейдите на тестовом компьютере в диспетчер устройств и отключите видеоадаптер (выгрузите графический драйвер). В таком режиме эксплуатация компьютера, как правило, не осуществляется, но это позволяет получить еще более точные сведения об использовании памяти самой операционной системой Windows. При отключенном графическом драйвере через некоторое время простоя объем используемой памяти на указанном выше компьютере опускается ниже 200 МБ.

ПРИМЕЧАНИЕ. Для операционной системы Windows 8 чистая установка также содержит расширенную технологию Защитник Windows, которая впервые включает в себя полный набор антивредоносных возможностей и также оптимизирована для использования памяти и ресурсов, как описано в блоге Джейсона о защите от вредоносных программ. (Такие функциональные возможности отсутствуют в чистой установке Windows 7, в которую рекомендуется добавить модули безопасности.)

Сокращение использования памяти в Windows 8

Мы внесли сотни изменений, направленных на минимизацию использования памяти операционной системы в Windows 8. Сейчас я обозначу несколько областей, которые позволили значительно сократить использование памяти.

Комбинирование памяти

В типичном компьютере многие части памяти имеют одинаковое содержимое. Наличие избыточных копий данных в памяти системы дает нам возможность сократить объем используемой памяти даже для служб и компонентов ОС.

Как это сделать? Приложения иногда выделяют память для последующего использования и инициализируют ее всю с использованием одного значения. Такое приложение может никогда так и не воспользоваться этой памятью, так как она может быть зарезервирована для функциональной возможности, не востребованной пользователем. Если такие операции выполняются несколькими приложениями, запущенными одновременно, в системе появляются избыточные копии памяти.

Комбинирование памяти — это методика, по которой операционная система Windows эффективно оценивает содержимое системной памяти в обычном режиме работы и обнаруживает в ней дублирующееся содержимое. После этого Windows освобождает повторяющиеся данные, оставляя только одну их копию. Если впоследствии приложение пытается выполнить запись в память, операционная система Windows предоставляет ему закрытую копию этих данных. Все это осуществляется незаметно в диспетчере памяти и не оказывает влияния на приложения. Такой подход позволяет освободить от десятков до сотен мегабайт памяти (в зависимости от числа одновременно запущенных приложений).

Изменения и ограничения для служб

Службы операционной системы, настроенные на постоянную работу, вызывают значительное использование системной памяти. При оценке набора служб операционной системы на этапе планирования для Windows 8 мы решили удалить несколько из них (13), перевести некоторое количество служб на запуск вручную, а также переключить несколько «постоянно работающих» служб на модель «запуск по запросу». При этом «триггер» в операционной системе (например, появление устройства или доступность сетевого адреса) вызывает следующую последовательность действий:

  1. Запускается служба.
  2. Служба выполняет необходимые операции.
  3. Некоторое время служба работает в режиме ожидания, чтобы убедиться, что все необходимые операции выполнены.
  4. Служба завершает работу.

Вы увидите, что функции Plug and Play, Центр обновления Windows и служба инфраструктуры драйверов пользовательского режима в операционной системе Windows 8 запускаются по триггерам в отличие от операционной системы Windows 7, где эти службы работали постоянно.

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

Та же производительность при меньшем объеме памяти

В рамках запуска приложений и осуществления самообслуживания системой Windows данные и файлы программ загружаются с диска в основную память. Во время разработки Windows 7 и Windows 8 мы проанализировали участки (страницы) памяти во время нормальной работы и частоту обращения к ним. Идея заключается в том, что если уж вам необходимо выделить участок памяти, то лучше использовать его (обращаться к нему) часто. Если вы обращаетесь к этой памяти редко, но она все равно нужна, объедините ее с чем-то другим.

Вскоре после выпуска Windows 7 мы применили аналогичную методику к нескольким компонентам нижнего уровня Windows, появившимся на заре эры NT (начало 1990-х годов). Эта работа включала в себя перестроение кода и изменение структур данных для полного разделения «горячих» участков памяти (к которым обращаются часто) и «холодных» участков. Уплотнив и объединив «горячие» участки, мы смогли снизить общий объем памяти, требуемый во время выполнения.

Учитывая природу таких изменений (низкоуровневые компоненты ОС), мы хотели завершить эту работу как можно скорее, чтобы обеспечить больше времени для испытания внесенных изменений. На данный момент эти изменения присутствуют в Windows 8 уже почти 2 года, и тысячи сотрудников корпорации Майкрософт используют данный продукт в своей повседневной работе. Благодаря этому мы получили согласованные результаты, показывающие сокращение использования памяти на среднем компьютере на десятки мегабайт.

Отложенная инициализация рабочего стола

В июне Стивен и Джулия впервые представили вам пользовательский интерфейс в стиле Metro. Мы ожидаем, что множество людей, использующих планшеты, проведут в этой среде достаточно времени, работая с приложениями в стиле Metro. В рамках данной демонстрации мы также показали, что в Windows 8 можно перенести ваши имеющиеся приложения и использовать их в знакомой настольной среде.

В отношении памяти мы воспользовались фактом наличия некоторого набора устройств, на которых пользователи почти все время будут находиться в пользовательском интерфейсе в стиле Metro, дающем ощущение погружения. В данном случае операционная система Windows 8 инициализирует компоненты ОС, уникальные для данной настольной среды, по необходимости. Это представляет собой еще одну возможность сокращения использования памяти (приблизительно на 23 МБ). (Обратите внимание на то, что диспетчер задач запускается на рабочем столе, поэтому указанные выше значения для памяти включают в себя объем памяти, используемый этим диспетчером.)

Более детализированное назначение приоритетов памяти

В Windows 8 используется улучшенная схема назначения приоритетов для памяти, выделяемой приложениям и системным компонентам. Это значит, что операционная система Windows может принимать более разумные решения о сохранении и удалении участков памяти.

Например, антивирусные программы выполняют разнообразные проверки файлов при их открытии другими программами. Память, выделяемая антивирусной программой для проверки сигнатур вирусов, обычно используется один раз, то есть ее повторное использование маловероятно. В Windows 7 такая память обрабатывается как имеющая одинаковый приоритет с другой памятью в системе (например, с памятью, выделенной для запущенного экземпляра программы Microsoft Excel). Если памяти становилось недостаточно, операционная система Windows 7 могла удалить память, которая использовалась для обеспечения оперативного реагирования другого приложения (например, Excel), что снижало скорость реагирования системы.

В операционной системе Windows 8 любая программа имеет возможность выделить память «низким приоритетом». Это важный сигнал для операционной системы Windows, благодаря которому в условиях нехватки памяти Windows может удалить такую память с низким приоритетом, не затрагивая остальную память, требуемую для обеспечения высокой скорости реагирования системы.

Итак, я описал наши убеждения и концепции в отношении снижения использования памяти в операционной системе Windows 8. Вы познакомились с некоторыми примерами результатов, и я кратко обрисовал те мероприятия по разработке, которые уже проведены в данном направлении к настоящему времени. Следует отметить, что я еще не касался модели приложений в Windows 8 и изменений жизненного цикла процессов, внесенных для сокращения использования памяти приложениями Windows 8. Описание этих аспектов см. в материалах конференции //build/ и в последующих публикациях блога, так как они составляют важную часть процесса переосмысления операционной системы Windows.

Мы прошли значительную часть пути, но он еще не окончен.

— Билл Карагонис