Download PDF
Download page Включение дедупликации памяти (KSM).
Включение дедупликации памяти (KSM)
Общая информация
Дедупликация — метод сжатия массива данных, основанный на исключении копий повторяющихся данных. Он может применяться для уменьшения объемов передаваемой информации и оптимизации использования имеющихся ресурсов. В системах виртуализации на базе KVM дедупликация реализована функцией ядра Linux — Kernel Same-page Merging (KSM).
KSM позволяет ядру проверять две или более уже запущенные ВМ и побитово сравнивать используемые ими страницы памяти. Если какие-либо страницы идентичны, например общие библиотеки, то KSM сводит их к одной. Затем эта страница помечается как copy-on-write. Если содержимое страницы изменяется гостевой ВМ, то для этой ВМ создается новая страница.
Объединение страниц и хранение их в кэше или основной памяти позволяет KSM снизить количество промахов кэша и оптимизировать объем общей используемой ВМ памяти, что повышает производительность некоторых приложений и эффективность использования имеющихся ресурсов.
Важно помнить, что побитовое сравнение страниц памяти это задача, которая увеличивает нагрузку на процессор. Поэтому нужно учитывать рабочую нагрузку при настройке периодичности сканирования памяти KSM.
В Astra Linux запуск и настройка конфигураций KSM осуществляются службой ksmtuned. Кроме того, служба ksmtuned может получать уведомления от libvirt о создании или уничтожении гостевых ВМ, для запуска принудительной дедупликации памяти.
Установка службы ksmtuned
- Подключить к серверу управления образ установочного носителя Astra Linux.
Установить пакет
ksmtunedкомандой:sudo apt install ksmtunedПри необходимости в файле
/etc/ksmtuned.confможно настроить следующие параметры:Параметр Описание KSM_MONITOR_INTERVALпромежуток между сканированиями в секундах KSM_SLEEP_MSECпромежуток между сканированием блоков данных в миллисекундах (сканирование происходит блоками по 16 ГБ) KSM_NPAGES_BOOSTколичество сканируемых страниц, которое будет прибавлено к текущему значению при превышении порога оставшейся свободной памяти KSM_NPAGES_DECAYшаг уменьшения количества страниц, когда свободной памяти окажется больше, чем установлено в пороговых значениях KSM_NPAGES_MINминимальное количество страниц, которые будут просканированы и объединены KSM_NPAGES_MAXмаксимальное количество страниц, которые будут просканированы и объединены KSM_THRES_COEFзначение объема оставшейся оперативной памяти для запуска KSM в процентах
KSM_THRES_CONSTзначение объема оставшейся оперативной памяти для запуска KSM в мегабайтах У перечисленных параметров по умолчанию установлены следующие значения:
В выводе отображены тестовые значения параметров. При настройке дедупликации памяти значения параметров необходимо планировать и рассчитывать индивидуально, исходя из ресурсов системы.
KSM_MONITOR_INTERVAL=60 KSM_SLEEP_MSEC=10 KSM_NPAGES_BOOST=300 KSM_NPAGES_DECAY=-50 KSM_NPAGES_MIN=64 KSM_NPAGES_MAX=1250 KSM_THRES_COEF=20 KSM_THRES_CONST=2048 LOGFILE /var/log/ksmtuned DEBUG=1CODEПроверить результат установки службы
ksmtunedкомандой:сat /sys/kernel/mm/ksm/runПример вывода после успешного выполнения команды:1CODEПроверить результат работы службы
ksmtunedможно выполнив команду:watch virsh node-memory-tuneПример вывода после выполнения команды:Совместно используемая память: shm_pages_to_scan 300 shm_sleep_millisecs 02 shm_pages_shared 121 shm_pages_sharing 10819 shm_pages_unshared 64 shm_pages_volatile 306551 shm_full_scans 1 shm_merge_across_nodes 1CODEПараметр Описание shm_pages_to_scanколичество страниц в очереди на сканирование shm_sleep_millisecsвремя ожидания до следующего сканирования shm_pages_sharedколичество используемых объединенных страниц shm_pages_sharingколичество дедуплицированных страниц shm_pages_unsharedколичество уникальных страниц, выявленных при сканировании shm_pages_volatileколичество быстро изменяющихся страниц, непопадающих в дерево shm_full_scansколичество выполненных полных сканирований shm_merge_across_nodesпараметр, указывающий могут ли страницы из разных узлов NUMA быть объединены