KSM и ksmtuned

Разбираемся с технологией KSM (Kernel SamePage Merging), запускаем ksm и ksmtuned в работу на ноде с KVM виртуализацией.

ksmtuned

Для начала, немного теории. Как обычно работают виртуальные машины, запущенные на KVM ноде? Для каждой из них, выделяется определённое количество ресурсов, в том числе и памяти. При этом, каждая запущенная VM работает со своими доступными областями\страницами памяти, потребляя при этом, соответствующий ресурс.

Что делает KSM? KSM позволяет ядру Linux проверить (исследовать, если так можно сказать) запущенные инстансы и сравнить их память. Если ядро обнаруживает, что какие-то области памяти идентичны, KSM объединяет их в одну. При этом, такая область помечается как copy on write. Когда одному из инстансов потребуется изменить содержимое страницы памяти, для этого будет создана отдельная её копия.

Относительно KVM виртуализации, мы полуачем следующие преимущества — KSM, исследовав области памяти на ноде с виртуальными машинами, объединяет идентичные её участки в один, освобождая при этом ресурсы. Важно, что объединены будут только те области памяти, которые на работу виртуальных машин повлиять не смогут. В среде, где работа ведётся с однородными виртуальными машинами, такая оптимизация работы с памятью должна положительно влиять и на скорость работы, и на производительность операционных систем гостевых машин.

Однако, стоит обратить внимание на предупреждения, которые делает RedHat в своей документации — теоретически, использование KSM может привести к утечке данных из памяти между виртуальными машинами. Это, всё же, теоретическое суждение, на практике мне подобные случаи не известны. Кроме того, использование KSM может повысить нагрузку на хосте — это так же стоит учитывать перед применением его в продакшене.

ksm и ksmtuned.

Что бы не возникло путаницы, ниже KSM — будет означать возможность ядра Kernel SamePage Merging, а ksm — сервис, который работает на сервере.

Запускаем стандартно:

# systemctl start ksm
# systemctl start ksmtuned

Когда ksm сервис не запущен, KSM использует не более 2000 разделяемых стрниц, в то время как при активном сервисе, работа KSM охватит до половины доступной на хосте оперативной памяти.

В свою очередь ksmtuned нужен для управления работой ksm, и для взаимодействия с процессом libvirt на сервере — например, когда виртуальная машина создаётся, или удаляется, libvirt «уведомляет» ksmtuned об этом. Конфигурационный файл сервиса доступен здесь /etc/ksmtuned.conf К сожалению, комментариев в нём не много, в отличие от примера в документации, так что имеет смысл обратиться к ней, и ознакомиться с содержимым файла оттуда.

В системе, параметры и статистика ksm доступны в /sys/kernel/mm/ksm/. Здесь мы можем получить информацию о текущем статусе сервиса, о том какое количество страниц в каком состоянии сейчас находятся (просканированы, объединены, не объединены, не просканированы), какой таймаут у работающего ksm установлен. При необходимости, с помощью команды virsh node-memory-tune, мы можем управлять установленными значениями. При включении логирования и дебага, в файле /var/log/ksmtuned мы получаем возможность следить за работой ksmtuned.

Можно ли использовать Kernel SamePage Merging в работе сегодня? Скорее да чем нет. Например, некоторые панели управления при установке активируют эти сервисы по умолчанию, некоторые провайдеры используют их при продаже услуг виртуальных серверов, так что технология эта работает у многих, я думаю, и работает достаточно успешно, во всяком случае, каких-то серьёзных проблем и громких инцидентов, связанных с ksm, в голову не приходит. Если ещё не использовали её раньше — возьмите на заметку, особенно для случаев, когда на одной ноде запускается и работает большое количество схожих по содержимому виртуальных машин.

@SysadminNotes | https://sysadmin.pm

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

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