Вільне суспільство технологія ksm (kernel samepage merging)

Технологія KSM (Kernel SamePage Merging)

Вільне суспільство технологія ksm (kernel samepage merging)
Малюнок 1. Сервіс KSM

Дана можливість корисна при віртуалізації з використанням KVM. Гостьова віртуальна машина при запуску успадковує тільки пам'ять від батьківського процесу qemu-kvm. Після того, як гостьова віртуальна машина запущена, вміст образу її операційної системи можна розділити з іншими гостьовими машинами, які використовують таку саму операційну систему або ті ж додатка. KSM визначає і об'єднує тільки ті сторінки пам'яті, які не впливають на роботу гостьовий віртуальної машини і не компрометують безпеку як фізичної машини-гипервизора, так і інших гостьових машин. KSM дозволяє KVM вимагати, щоб ідентичні області пам'яті гостьових віртуальних машин були загальними. Експериментальна реалізація KSM від Red Hat показала, що 52 віртуальних примірника Windows XP з 1 Гб пам'яті можуть працювати на комп'ютері з 16 Гб оперативної пам'яті.

KSM забезпечує краще використання пам'яті і прискорює її роботу. При використанні KSM загальні дані рідше вимиваються з кешу процесора і з основної пам'яті. Це скорочує кількість «промахів» кешу при роботі гостьових машин, за рахунок чого збільшується продуктивність додатків і операційних систем. Крім того, спільне використання пам'яті зменшує загальний обсяг пам'яті, необхідний гостьовим машинам, що дозволяє «щільніше» використовувати існуючі ресурси.

KSM і NUMA

Починаючи з Red Hat Enterprise Linux 6.5, KSM працює з NUMA (Non-Uniform Memory Access). Дана можливість дозволяє KSM при об'єднанні сторінок взяти до уваги топологію NUMA. Це запобігає випадки, коли сторінки розміщуються на віддалених вузлах, і пов'язані з віддаленим розміщенням проблеми продуктивності.

Red Hat рекомендує не виконувати об'єднання однакових сторінок, якщо ці сторінки знаходяться на різних вузлах NUMA. Для цього необхідно встановити настроюється параметр / sys / kernel / mm / ksm / merge_nodes в 0. Чому? Внутрішні лічильники ядра можуть почати суперечити один одному після великої кількості міжвузлових злиттів. В результаті, демон numad може заплутатися. Якщо ваша система має велику кількість вільної пам'яті, можна досягти більш високої продуктивності за рахунок відключення і деактивації демона KSM. Зверніться до посібника з налаштування продуктивності Red Hat Enterprise Linux для отримання додаткової інформації про NUMA.

сервіси KSM

Для управління KSM в Red Hat Enterprise Linux є два сервісу:

  • Сервіс ksm запускає і зупиняє тред KSM ядра.
  • Сервіс ksmtuned контролює сервіс ksm. динамічно керуючи злиттям сторінок. Сервіс ksmtuned запускає сервіс ksm і зупиняє його, якщо пам'яті і так достатньо. Для поднастройкі KSM, наприклад, коли створюється або знищується гостьова машина, слід викликати service ksmtuned retune.

Обидва цих сервісу контролюються за допомогою стандартних інструментів управління сервісами.

сервіс KSM

Сервіс ksm входить до складу пакету qemu-kvm. За замовчуванням KSM відключений в Red Hat Enterprise Linux 6. Однак, при використанні Red Hat Enterprise Linux 6 в якості хоста KVM, він, як правило, включається сервісами ksm і ksmtuned.

Коли ж сервіс ksm запущений, то KSM буде розділяти до половини основної пам'яті системи тієї фізичної машини, на якій він розміщений. Запустіть сервіс ksm. щоб KSM використовував більше поділюваних сторінок пам'яті.

Сервіс ksm може бути доданий в автозавантаження за замовчуванням. Зробіть сервіс ksm постійним за допомогою команди chkconfig.

Сервіс настройки KSM

У сервісу ksmtuned немає ніяких опцій. Сервіс ksmtuned зациклює і регулює ksm. Сервіс ksmtuned повідомляється процесом libvirt. коли створюється або знищується гостьова віртуальна машина.

Якщо викликати service ksmtuned retune. сервіс ksmtuned перечитає конфігураційний файл і перезапустить настройку. Перед тим, як приступити до опису параметрів у файлі, необхідно прояснити терміни:

  • npages - скільки сторінок ksm буде сканувати до того, як ksmd піде в сплячий режим, встановлюється в / sys / kernel / mm / ksm / pages_to_scan;
  • rsz - сума пам'яті всіх процесів qemu-kvm. в Кбайтах;
  • thres - поріг активації, в Кбайтах; цикл KSM спрацьовує, коли сума thres + rsz перевищує загальний обсяг системної пам'яті.

Змінні KSM і моніторинг

KSM зберігає дані моніторингу в директорії: / sys / kernel / mm / ksm /. Файли в цій директорії оновлюються ядром і представляють точну картину використання KSM. Кожен з наступних файлів містить одне числове значення, що дозволяє визначити поточний статус сервісу:

  • full_scans - число запусків повного сканування;
  • pages_shared - загальна кількість злитих сторінок;
  • pages_sharing - число злитих сторінок на поточний момент.
  • pages_to_scan - число сторінок, які ще не були просканувати;
  • pages_unshared - загальне число злитих сторінок, які розділили у зв'язку із записом нових даних;
  • pages_volatile - число злитих сторінок, які було розділено, на поточний момент;
  • run - запущений сервіс KSM;
  • sleep_millisecs - скільки мілісекунд KSM очікує наступного запуску.

Результати діяльності по налаштуванню KSM зберігаються в лог / var / log / ksmtuned. якщо рядок DEBUG = 1 додана в файл /etc/ksmtuned.conf. Місцезнаходження лог-файлу можна змінити за допомогою параметра LOGFILE. Зміна місця розташування лог-файлу не рекомендується і може зажадати особливої ​​конфігурації SELinux.

зупинка KSM

KSM знижує продуктивність, що може виявитися важливим, наприклад, при недостатній потужності процесора. Цей сервіс можна деактивувати, зупинивши сервіси ksmtuned і ksm. Зупинка сервісів деактивує KSM до моменту перезавантаження.

Щоб деактивувати KSM зі збереженням цього статусу після перезавантаження, використовуйте команду chkconfig:

Не економте на файлі підкачки

Переконайтеся, що загальний обсяг пам'яті з урахуванням файлу підкачки достатній для всіх запущених процесів незалежно від того, чи запущений KSM. Це дозволить уникнути позаштатних ситуацій в тих випадках, коли сторінки масово перестають бути розділяються.