Перейти к содержанию

08.07.2011

Page Sharing в VMware vSphere

Одно из преимуществ виртуализации, возможность совместного использования физических ресурсов разными задачами, в том числе памяти.

Механизм Page Sharing в VMware vSphere позволяет экономить память за счет совместного использования идентичных страниц памяти.

Методика очень простая. Если две или более страниц памяти абсолютно совпадают, то в физической памяти остается только одна страница. Естественно, если гостевая ОС захочет изменить этот фрагмент памяти, то ей будет создана копия, в которой и будут произведены изменения.

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

Однако есть одно но. По умолчанию, гипервизор выделяет память большими блоками (Large Pages). Естественно, найти совпадающие блоки размером в 1 МБ в гостевых ОС практически нереально, что и видно на практике. Подобное решение понятно, задачи бывают разные, а от гипервизора требуется максимальная производительность, и использование больших страниц позволяет более эффективно использовать ресурсы процессоров хоста. Однако, что делать, если на хосте оказалось больше свободных ресурсов процессора, чем памяти?

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

Для этого, нужно изменить настройку хоста:

Mem.AllocGuestLargePage = 0

Настройку можно изменить как в vSpere Client, так и через CLI интерфейс.

~ # esxcfg-advcfg --get /Mem/AllocGuestLargePage
Value of AllocGuestLargePage is 1
~ # esxcfg-advcfg --set 0 /Mem/AllocGuestLargePage
Value of AllocGuestLargePage is 0

Или настройку конкретной виртуальной машины:

monitor_control.disable_mmu_largepages = TRUE

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

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

Mem.ShareScanTime — desired time in minutes to scan entire VM. Т.е. периодичность полного сканирования всей памяти в виртуальной машине. Значение по умолчанию 60, диапазон возможных значений 10-600.

Mem.ShareScanGHz — max page scan rate in MB/sec per GHz of host CPU, 0 to disable. Скорость сканирования. Значение по умолчанию 4, диапазон возможных значений 0-32.

Mem.ShareRateMax— per-VM upper limit on pshare scan/check rate in pages/sec. (0 to disable). Значение по умолчанию 1024, диапазон возможных значений 0-32768.

Подробности здесь и здесь. Абсолютно монументальная статья: Memory management. Подобнее о TPS.

Дополнение.

Механизм TPS будет отключен по-умолчанию:

  • ESXi 5.5 Update release – Q1 2015
  • ESXi 5.1 Update release – Q4 2014
  • ESXi 5.0 Update release – Q1 2015
  • VMware ESX 6.x и более поздние версии.

Но можно будет включить в ручную:
Для хоста нужно установить Mem.ShareForceSalting = 1, и для каждой VM установить одинаковый sched.mem.pshare.salt отличный от нуля.
Либо установить Mem.ShareForceSalting = 0 и тогда TPS будет включен для всех VM на хосте.

Дополнительная информация тут Additional Transparent Page Sharing management capabilities and new default settings (2097593).

Поделитесь своими мыслями, оставьте комментарий.

(required)
(required)

Внимание: HTML допускается. Ваш e-mail никогда не будет опубликован.

Подписка на комментарии

Captcha * Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.