// Poradnik techniczny // Pamięć · KSM

KSM w Proxmox:
współdzielenie pamięci RAM

KSM (Kernel Same-page Merging) to mechanizm jądra Linux, który skanuje pamięć i scala identyczne strony należące do różnych maszyn wirtualnych w jedną wspólną kopię. Efekt: realny overcommit RAM, więcej VM na jednym hoście i niższy koszt na maszynę — to wprost przekłada się na gęstość i oszczędności po migracji z VMware.

// 01 · Jak to działa

Jądro deduplikuje pamięć

Wirtualizacja KVM oznacza pamięć maszyn wirtualnych jako „scalalną” (madvise(MADV_MERGEABLE)). Wątek jądra ksmd w tle skanuje te obszary, liczy sumy kontrolne stron 4 KB i gdy znajdzie identyczne strony należące do różnych VM — zostawia jedną fizyczną kopię, a pozostałe odwzorowania kieruje na nią w trybie kopiowania przy zapisie (COW).

Dopóki żadna VM nie zmodyfikuje takiej strony, wszystkie współdzielą jeden egzemplarz w RAM. Gdy któraś zapisze — jądro natychmiast tworzy jej prywatną kopię. Z punktu widzenia gościa nic się nie zmienia; oszczędność dzieje się wyłącznie po stronie hosta.

ℹ️

KSM scala tylko anonimową pamięć oznaczoną jako mergeable. Nie obejmuje hugepages ani pamięci współdzielonej przez plik — to ważne przy bazach danych korzystających z dużych stron.

// 02 · Kiedy realnie oszczędza

Najwięcej zyskują jednorodne środowiska

KSM działa tym lepiej, im więcej maszyn ma te same dane w pamięci: ten sam system, te same biblioteki, te same binaria. Klasyczny przypadek to dziesiątki VM z jednym obrazem bazowym (np. 40× Debian albo farma identycznych Windows Server) — wspólne strony kodu jądra gościa, bibliotek glibc/.NET czy zerowane strony scalają się masowo.

  • Duży zysk: wiele VM z tym samym OS i podobnym stosem aplikacji (VDI, hosting, farmy aplikacyjne).
  • Średni zysk: mieszane Linuksy tej samej rodziny — część bibliotek i tak jest wspólna.
  • Mały zysk: kilka bardzo różnych, dużych VM (różne OS, bazy na hugepages) — mało stron się powtarza.

W praktyce na jednorodnych klastrach KSM pozwala odzyskać realnie kilkanaście do kilkudziesięciu procent RAM — czyli zmieścić więcej VM na tym samym sprzęcie, bez dokupowania pamięci.

// 03 · KSM w Proxmox VE

Włączony automatycznie — pod kontrolą

Proxmox uruchamia usługę ksmtuned, która włącza KSM dopiero pod presją pamięci — domyślnie gdy wykorzystanie RAM hosta przekroczy próg (ok. 80% pamięci fizycznej). Dzięki temu na luźno obciążonym hoście KSM nie marnuje CPU na skanowanie, a uruchamia się wtedy, gdy faktycznie pomaga.

Co sprawdzićGdzie / polecenie
Współdzielona pamięć (panel)Node → Summary → KSM sharing
Ile stron współdzielonychcat /sys/kernel/mm/ksm/pages_sharing
Ile stron-wzorcówcat /sys/kernel/mm/ksm/pages_shared
Czy KSM aktywnycat /sys/kernel/mm/ksm/run (1 = działa)

Zaoszczędzony RAM to w przybliżeniu (pages_sharing − pages_shared) × 4 KB. Na zdrowym, jednorodnym hoście potrafią to być gigabajty.

💡

Próg i agresywność skanowania dostroisz w /etc/ksmtuned.conf (m.in. KSM_THRES_COEF). Domyślne ustawienia są rozsądne dla większości wdrożeń.

// 04 · Koszty, NUMA i bezpieczeństwo

Czego być świadomym

  • Koszt CPU: skanowanie pamięci zużywa cykle procesora. Pod dużą presją RAM to opłacalny kompromis, ale na hostach o krytycznej latencji warto go mierzyć.
  • NUMA: domyślnie KSM może scalać strony między węzłami NUMA, co bywa szkodliwe dla latencji pamięci. Na dużych serwerach rozważ merge_across_nodes=0.
  • Bezpieczeństwo (multi-tenant): deduplikacja jest znanym wektorem ataków side-channel (czas dostępu zdradza, że strona jest współdzielona). W środowiskach wielu niezaufanych najemców rozważ wyłączenie KSM lub ograniczenie go do zaufanych grup VM.
⚠️

KSM to narzędzie do gęstości, nie do izolacji. Tam, gdzie liczy się twarda separacja sąsiadów, świadomie zrezygnuj z części oszczędności na rzecz bezpieczeństwa.

Wycisniemy maksimum z Twojego RAM-u

Zaprojektujemy klaster Proxmox pod realną gęstość — KSM, overcommit, NUMA i dobór hostów dopasowane do Twoich obciążeń, bezpiecznie.

⚡ Bezpłatna konsultacja → VM vs kontener: zużycie RAM
// Technical guide // Memory · KSM

KSM in Proxmox:
sharing RAM across VMs

KSM (Kernel Same-page Merging) is a Linux kernel feature that scans memory and merges identical pages belonging to different virtual machines into a single shared copy. The result: real RAM overcommit, more VMs per host and a lower cost per machine — which translates directly into density and savings after migrating off VMware.

// 01 · How it works

The kernel deduplicates memory

KVM virtualisation marks VM memory as "mergeable" (madvise(MADV_MERGEABLE)). The kernel thread ksmd scans those regions in the background, checksums 4 KB pages and, when it finds identical pages owned by different VMs, keeps a single physical copy and points the other mappings at it in copy-on-write (COW) mode.

As long as no VM modifies such a page, they all share one copy in RAM. The moment one writes to it, the kernel instantly makes a private copy for that VM. From the guest's perspective nothing changes; the saving happens entirely on the host side.

ℹ️

KSM only merges anonymous memory marked as mergeable. It does not cover hugepages or file-backed shared memory — important for databases that use large pages.

// 02 · When it really saves

Homogeneous environments gain the most

KSM works better the more machines hold the same data in memory: the same OS, the same libraries, the same binaries. The classic case is dozens of VMs from one base image (e.g. 40× Debian or a farm of identical Windows Servers) — shared guest-kernel pages, glibc/.NET libraries and zeroed pages merge en masse.

  • Big gain: many VMs with the same OS and a similar app stack (VDI, hosting, application farms).
  • Medium gain: mixed Linux of the same family — many libraries are shared anyway.
  • Small gain: a few very different, large VMs (different OSes, databases on hugepages) — few pages repeat.

In practice, on homogeneous clusters KSM recovers a realistic tens of percent of RAM — i.e. fitting more VMs on the same hardware without buying memory.

// 03 · KSM in Proxmox VE

Enabled automatically — under control

Proxmox runs the ksmtuned service, which enables KSM only under memory pressure — by default once host RAM usage crosses a threshold (around 80% of physical memory). So on a lightly loaded host KSM doesn't waste CPU scanning, and kicks in exactly when it helps.

What to checkWhere / command
Shared memory (UI)Node → Summary → KSM sharing
Pages sharedcat /sys/kernel/mm/ksm/pages_sharing
Page templatescat /sys/kernel/mm/ksm/pages_shared
Is KSM activecat /sys/kernel/mm/ksm/run (1 = running)

The saved RAM is approximately (pages_sharing − pages_shared) × 4 KB. On a healthy, homogeneous host this can be gigabytes.

💡

You can tune the threshold and scan aggressiveness in /etc/ksmtuned.conf (e.g. KSM_THRES_COEF). The defaults are sensible for most deployments.

// 04 · Cost, NUMA and security

What to be aware of

  • CPU cost: scanning memory consumes CPU cycles. Under heavy RAM pressure it's a worthwhile trade-off, but on latency-critical hosts it's worth measuring.
  • NUMA: by default KSM may merge pages across NUMA nodes, which can hurt memory latency. On large servers consider merge_across_nodes=0.
  • Security (multi-tenant): deduplication is a known side-channel vector (access timing reveals that a page is shared). In multi-tenant, untrusted environments consider disabling KSM or limiting it to trusted VM groups.
⚠️

KSM is a tool for density, not isolation. Where hard separation between neighbours matters, deliberately trade some savings for security.

We'll squeeze the most out of your RAM

We'll design a Proxmox cluster for real density — KSM, overcommit, NUMA and host selection tailored to your workloads, safely.

⚡ Free consultation → VM vs container: RAM usage