KSM в Proxmox настройка и особенности

В какое то время наступает осознание того, что виртуальных машин нужно больше, а аппаратных ресурсов недостаточно. В таком случае можно пойти на небольшую хитрость — можно использовать KSM.
KSM (Kernel Samepage Merging) — технология позволяющая уменьшить расходование памяти за счет нахождения одинаковых страниц в анонимной памяти и их последующего объединения.

Механизм работает следующим образом, модуль ядра ksmd, с определенным интервалом запускает сканирование памяти. Если он находит в памяти одинаковые страницы, он объединяет их в одну, а лишние копии удаляет. Эта страница помечается как «copy-on-write», так что ядро будет автоматически разделять их снова, как только один процесс изменит данные. Таким образом процессы могут использовать идентичные блоки памяти. KSM доступно в QEMU начиная с версии 0.12. Linux ядро поддерживает эту технологию с версии 2.6.32.

Положительные стороны KSM:

KSM позволяет избежать своппирования за счет объединения одинаковых страниц;

Возможность избыточного выделения памяти машинам, больше чем есть физически;

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

Недостатки и особенности KSM:

Нет смысла использовать KSM если все гости умещаются в памяти;

В процессе работы KSM расходует процессорные ресурсы
если ресурсы CPU являются узким местом, лучше отказаться от KSM;

Чтобы начать использовать KSM, нужно собрать ядро с параметром CONFIG_KSM=y (ядро Proxmox уже собрано с этой опцией) и включить KSM в системе через /sys/kernel/mm/ksm.

echo 1 > /sys/kernel/mm/ksm/run

Для управления и сбором статистики доступны следующие ключи:

full_scans — количество выполненных операций сканирования
pages_shared — количество используемых общих, объединенных страниц
pages_sharing — количество потенциально сохраненных страниц
pages_to_scan — количесто страниц которое будет просканировано перед принудительной паузой
pages_unshared — количество «претендентов» на объединение
pages_volatile — количество страниц которые меняются слишком часто
run — ключ запуска KSM
sleep_millisecs — пауза между сканированиями памяти

Таким образом на работу KSMd можно влиять через pages_to_scan и sleep_millisecs. Например увеличив pages_to_scan и уменьшив sleep_millisecs можно сделать KSMd более агрессивным, но вместе с тем и увеличится нагрузка на процессора.

Эффективность ksmd определяется значениями pages_sharing и pages_unshared. Чем больше значение pages_sharing тем эффективнее использование KSM и наоборот.
Могу добавить что в своих случаях удалось сэкономить до 11GB памяти на серверах с 48GB RAM. Результаты экспериментов Red Hat еще больше поражают: 52 виртуальных Windows XP с 1GB памяти, могут работать на компьютере с 16GB оперативной памяти.

Смотрите так же:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.