вторник, 18 ноября 2008 г.

ESX Memory features - фишки ESX при работе с памятью

Основных фишек ESX две: memory overcommitment и transparent page sharing.

1. Memory Overcommitment.
При старте виртуальной машины под нее выделяется оперативная память на хосте в размере заявленной для виртуальной машины (указанной в конфигурации). Но ведь далеко не всегда загрузка ВМ по памяти составляет 100% - хотя бы просто потому что если загрузка памяти 100%, то памяти выделено явно недостаточно. Иными словами, в любой момент времени есть достаточно много выделенной для машин памяти, но ими не используемой. А следовательно можно ее использовать для других машин.
В этом и состоит суть данной технологии - когда на хосте с 2 ГБ физической памяти совершенно без проблем работают 4 виртуальных машины с памятью по 1 ГБ.
Изначально, при избытке ресурсов, память резервируется под виртуальную машину. Memory overcommitment вступает в дело при старте очередной машины и условии (сумма памяти виртуальных машин > физической памяти на хосте). Новая виртуальная машина запрашивает блок памяти, и ESX выделяет ей этот блок из области, выделенной ранее для другой виртуальной машины, но не используемой. Безопасность обеспечивается "вытиранием" содержимого данного блока памяти перед передачей его новой ВМ.

2. Transparent Page Sharing.
Если подумать, то даже в пределах области памяти одной виртуальной машины можно найти много совершенно одинаковых страниц памяти. Если же хост большой и запущено на нем пара десятков машин, то дублированной памяти становится очень много. На ESX запущен фоновый процесс, сканирующий память на дублированные страницы. Когда этот процесс находит дублированные страницы, то оставляет лишь одну, а остальные освобождает, оставляя ссылку. Соотв. это экономит физическую память, позволяя добиваться более высоких коэффициентов консолидации.
Насколько эффективно работает данная технология, могу показать на примерах.
1) ESX хост с двумя виртуальными машинами (512MB памяти у каждой).
Виртуальные машины одинаковые - работают как кластер. Софт: Win2003R2, Oracle 10g Client + кое-что еще.
Memory Granted: 1200 MB (всего выделено)
Memory Shared Common: 151MB (объем найденных общих страниц памяти)
Memory Shared: 540MB (суммарный объем найденных общих страниц памяти)
Т.е. даже в этой ситуации сэкономлено 540-151 = 389 MB памяти. С учетом оверхеда на каждую машину, получается около 30% эффективности. Т.е. даже без учета memory overcommitment, при запуске идентичных виртуальных машин на ESX и, скажем, Hyper-V, на ESX будет использоваться на 30% меньше памяти, что оставляет возможность запуска как минимум еще одной такой же машины. Эта технология особенно эффективно себя покажет на фермах с большим количество идентичных машин, таких как инфраструктура VDI.
2) ESX хост с 16GB оперативной памяти, запущено 14 машин (WinXP, Win2003, RHEL) с разным набором софта.
Memory Granted: 19000 MB (всего выделено)
Memory Shared Common: 634MB (объем найденных общих страниц памяти)
Memory Shared: 9400MB (суммарный объем найденных общих страниц памяти)
Memory Usage: 10500MB (65%)
Сами считайте уровень загрузки хоста по памяти без transparent page sharing.

Насколько мне известно, обе фишки уникальны для ESX среди остальных гипервизоров (transparent page sharing точно, но я не уверен насчет memory overcommitment) и не требуют дополнительного лицензирования. Т.е. Вы всегда их получаете, даже в случае бесплатного ESXi.

Немного финансовых соображений.
Указанный выше сервер - HP BL460c с двумя 4хядерными Xeon. Коэффициенты загрузки 5.75% CPU, 65% Memory. Иными словами, по процессорам я могу вообще не бояться - не нагружу, а коэффициент консолидации (соотношение виртуальных серверов к физическим хостам) ограничен лишь объемом физической памяти.
VMware VI Enterprise лицензируется по процессорным сокетам и стоит примерно 7k$ / 2 CPU.
С учетом одного лишь Transparent Page Sharing на сервере с 16GB памяти мы спокойно запустили нагрузку, требующую 24 GB памяти. Т.е. смело можем записывать в экономию 8GB памяти, а это порядка 610/1150$ (2*4GB или 1*8GB модули). Т.е. уже и не 7k$, а 6k$ :)
Впрочем, если подумать, то один процессор при данной нагрузке можно смело вынуть и стоимость лицензии будет уже не 7-1k$, а 3.5-1 = 2.5k$ на сервер при ожидаемой 12-13% загрузке CPU. Если же физической памяти на сервере будет не 16, а побольше, то в определенных условиях может оказаться, что лицензия VMware нам достанется вообще бесплатно :)

5 комментариев:

  1. А разве если вынуть один процессор, мы не отключим один контроллер памяти? Если да, то потеряем в максимально доступном объеме памяти...

    ОтветитьУдалить
  2. Для Intel - не потеряется контроллер, а вот для AMD - да (для AMD для каждого процессора своя память)

    ОтветитьУдалить
  3. в HP ML350 G6 (Intel) пошли по пути AMD

    ОтветитьУдалить
  4. Антон, а какие на ваш взгляд оптимальные параметры по сканированию ВМ для шаринга страниц??
    ShareScanTime
    ShareRateMax и др

    ОтветитьУдалить
  5. Артем, это настройки из области высшего шаманства, имеет смысл углубляться в них лишь в отдельных случаях. Настройки по умолчанию вполне адекватны.

    ОтветитьУдалить