Kernel Samepage Merging - когда мало памяти или хочется больше машин
В какое то время наступает осознание того, что виртуальных машин нужно больше, а аппаратных ресурсов недостаточно. В таком случае можно пойти на небольшую хитрость - можно использовать KSM.KSM (Kernel Samepage Merging) - технология позволяющая уменьшить расходование памяти за счет нахождения одинаковых страниц в анонимной памяти и их последующего объединения. Механизм работает следующим образом, модуль ядра ksmd, с определенным интервалом запускает сканирование памяти. Если он находит в памяти одинаковые страницы, он объединяет их в одну, а лишние копии удаляет. Эта страница помечается как "copy-on-write", так что ядро будет автоматически разделять их снова, как только один процесс изменит данные. Таким образом процессы могут использовать идентичные блоки памяти. KSM доступно в QEMU начиная с версии 0.12. Linux ядро поддерживает эту технологию с версии 2.6.32.
Положительные стороны KSM:
- KSM позволяет избежать своппирования за счет объединения одинаковых страниц
- возможность избыточного выделения памяти машинам, больше чем есть физически
- появляется возможность запустить больше виртуальных машин
- эффективно в случае когда приложения используют одни и те же данные
- не используйте KSM если все гости умещаются в памяти
- в процессе работы KSM расходует процессорные ресурсы
- если ресурсы CPU являются узким местом, лучше отказаться от 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"
А что означает kernel ? Вот более точный перевод:
ОтветитьУдалитьhttps://preply.com/question/chto-oznachaet-kernel
здесь kernel - это ядро (ядро ОС Linux), при расшифровке аббревиатуры KSM имеется ввиду что это подсистема (KSM) является частью ядра (а не пользовательского пространства например).
Удалить