Страницы

среда, 21 июля 2010 г.

Динамическая память (Dynamic Memory) приходит в Hyper-V Часть 4.

Итак, продолжение перевод цикла статей посвященных Dynamic Memory, данная публикация продолжает предыдущую расставляя все точки в вопросах о страничном распределении памяти.

Ссылка на оригинал: Team Virtualization Blog




Динамическая память (Dynamic Memory) приходит в Hyper-V Часть 4.


======================================================

Предисловие: Суть этой серии публикаций и дух в котором они написаны, должны показать комплексный подход к вопросам, стоящим перед нашими клиентами, обсуждение сложностей, связанных с управлением памятью, и объяснение почему для решения этих проблем мы выбрали динамическую память Hyper-V (Hyper-V Dynamic Memory). Это не обозначает критику кого-либо или каких-либо технологий, это проведение открытого и прозрачного обсуждения проблем.

======================================================

В моей предыдущей публикации мы довольно глубоко обсудили страничное распределение памяти. Если сказать, что это была популярная публикация, то это будет сильным преуменьшением. Мы получили потрясающую отдачу и ряд вопросов. Итак, я думаю, ответив на вопросы я закрою тему страничного распределения, прежде чем перейти ко второму уровню подкачки в моей следующей публикации.

Вопросы

Вопрос: Когда вы говорите что Hyper-V R2 поддерживает большие страницы памяти, это означает что Hyper-V использует распределение страниц памяти по 2 Мб или она предоставляет большие страницы памяти гостевой системе или и то и другое?

Ответ: И то и другое.
  1. Поддержка больших страниц памяти в Hyper-V R2 означает, что если эти возможности поддерживаются оборудованием, то Hyper-V R2 будет автоматически использовать эту функциональность в распределении памяти. Важно отметить, что возможности Hyper-V R2 запущенной на платформе, поддерживающей большие страницы памяти, принесут пользу виртуальным нагрузкам и не будут обязывать память гостевых систем использовать большие страницы.
  2. 2. Если гостевая операционная система поддерживает большие страницы памяти (и конечно же лежащее в основе оборудование поддерживает большие страницы памяти), тогда виртуальные нагрузки этой системы могут также использовать распространение памяти в больших страницах в гостевой системе.


===================================================

Вопрос: Итак, чтобы использовать большие страницы памяти в приложениях, необходимо их переписать для поддержки этой функциональности?

Ответ: Нет. Имея гостевую операционную систему и приложения, использование больших страниц памяти может быть хорошим вариантом, это важно знать, что приложение вообще может не знать о больших страницах, чтобы извлечь выгоды Hyper-V от использования больших страниц памяти в гостевых операционных системах.

===================================================

Вопрос: Вы упомянули, что SuperFetch может повысить эффективность страничного распределения, так как это устраняет нулевые страницы. Разве это не особенность Windows, используют ли другие операционные системы подобные методы?Ответ: Да, прочие операционные системы используют подобные методы. Для примера, Linux использует функцию под названием "Preloaded". Preloaded - это "адаптивный демон предварительной загрузки", он работает в фоновом режиме и отмечает программы, которые вы используете наиболее часто для последующего кеширования с целью увеличения скорости загрузки. Использование Preloaded задействует неиспользованную оперативную память и повышает общую производительность системы.

Цитата: OSNews говорят о SuperFetch:

SuperFetch - это то, что все операционные систем должны иметь. Я не стал бы покупать 4 Гб оперативной памяти только для того чтобы они ничего не делали в ситуации с малыми требованиями к памяти. SoperFetch делает загрузку приложений быстрее, именно тех приложений которые важны для меня - я пришел из мира BeOS и мне нравится когда мои приложения загружаются мгновенно.

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

http://www.osnews.com/story/21471/SuperFetch_How_it_Works_Myths

===================================================

Вопрос: Вы не сказали про Address Space Layout Randomization (ASLR) и про то как это влияет на страничное распределение?

Ответ: Я не говорил про ASLR, так как о нем уже были публикации, правда довольно давно, но раз вы спросили...

Да, ASLR влияет на эффективность страничного распределения, но для начала краткое описание ASLR из статьи TechNet, которую написал Mark Russinovich:

Компонент Windows Address Space Layout Randomization (ASLR) усложняет вредоносным программам поиск API, за счет загрузки системных DLL и исполняемых файлов в различные места, при каждой загрузке системы. В начале загрузки диспетчер памяти выбрасывает загрузочные образы DLL в один из 256 назначенных 64-ех Кб-ных адресов в 16-и Мб-ной секции в начале пользовательского адресного пространства. DLL у которых есть новый флаг динамического перемещения в процесс, диспетчер памяти упаковывает в память запуская адрес образа загрузки и работает так далее.

Mark продолжает...

Кроме того, стратегия пере размещения ASLR, имеет дополнительные выгоды, благодаря которым адресное пространство более плотно упаковано, нежели чем в предыдущих версиях Windows, создается больше свободных секций для размещения памяти, уменьшает число таблиц страниц размещенных диспетчером памяти для проверки расположения адресного пространства, и минимизирует промахи Translation Lookaside Buffer (TLB).

Сегодня, влияние ASLR на страничное распределение ~ 10%, это относительно мало по сравнению с большими страницами памяти и SuperFeatch, но это действительно еще один фактор воздействия на эффективность страничного распределения. Более того, это не означает что улучшения в ASLR не будут влиять на эффективность страничного распределения в будущем.

===================================================

Вы сказали что поддержка больших страниц памяти включена в последние несколько поколений процессоров Opteron и Intel добавила поддержку в новых процессорах "Nehalem". Вы хотите сказать что старые процессоры Intel x84/x64 не поддерживают большие страницы памяти?

Ответ: 5/6/2010: ИСПРАВЛЕНИЕ: На самом деле старые x86/x64 процессоры поддерживают большие страницы памяти и так было всегда. Однако, 32-ух битные системы не поддерживают большие объемы оперативной памяти (в основном поддержка не превышает 4 Гб, что является лишь малой долей, от возможностей поддержки памяти в 64-ех битных системах), поэтому поддержка для них совсем не критична, однако сейчас 64-ех битные серверы являются нормой.

В моей следующей публикации мы обсудим второй уровень подкачки...

Jeff Woolsey

Principal Group Program Manager

Windows Server, Virtualization