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=1
CODEПроверить результат установки службы
ksmtuned
командой:сat /sys/kernel/mm/ksm/runПример вывода после успешного выполнения команды:1
CODEПроверить результат работы службы
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 1
CODEПараметр Описание 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 быть объединены