Страницы

Сохранить статью у себя в соцсети:

пятница, 8 июня 2012 г.

§ KSM - экономим память

Kernel Samepage Merging - когда мало памяти или хочется больше машин

В какое то время наступает осознание того, что виртуальных машин нужно больше, а аппаратных ресурсов недостаточно. В таком случае можно пойти на небольшую хитрость - можно использовать 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 и включить 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 оперативной памяти.

На главную "Virtualizing Linux"

2 комментария:

  1. А что означает kernel ? Вот более точный перевод:
    https://preply.com/question/chto-oznachaet-kernel

    ОтветитьУдалить
    Ответы
    1. здесь kernel - это ядро (ядро ОС Linux), при расшифровке аббревиатуры KSM имеется ввиду что это подсистема (KSM) является частью ядра (а не пользовательского пространства например).

      Удалить

Популярные сообщения

Профиль в Google+ Яндекс цитирования Яндекс.Метрика