Pavel Snajdr wrote:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
Ono to docela zalezi. Jsou kontejnery, co nevyuzijou ani 100 MB RAM a
byt to plna virtualizace, urcite ten kontejner 3.9 GB nevrati,
obzvlast, kdyz je tam linux - staci zaplnit diskovou cache i totalne
nepouzivanymi daty. Nebo se to uz da nejak nastavit, aby kdyztak pri
pozadavku na pamet host pustil memory reclaim?
Dělá se to z userspace - "něco" musí hypervizoru říct, aby balloon
ovladač odebral hostovi třeba 3.8GB RAM (aby mu nějaká cache zůstala).
Jádro hosta pak vrátí diskové cache, protože bez těch se obejde - jo,
když se to přežene, nastoupí oom killer.
Red Hat na to asi nějakého démona mít bude, to už nevím.
Samozřejmě by to šlo dělat ještě lépe - jádro hosta může vědět, že běží
pod hypervizorem, a říkat mu, které konkrétní kusy paměti používá jako
diskové cache. Hypervizor tuhle informaci předá jádru hostitele a to ji
v případě potřeby může hostovi odebrat.
Hostovi se samozřejmě při pokusu tu paměť číst vrátí nějaká chyba, ale
protože to byla cache, tak se s tím snadno vyrovná tím, že příslušná
data znovu načte.
Vím, že na tomhle se pracovalo a AFAIK se to dostalo i do mainline.
Akorát to vyvíjel někdo z Oracle a udělal to jenom pro Xen (protože KVM
je konkurence), takže mám ten pocit, že KVM tohle nepoužívá.
Suma sumárum jde udělat to samé co v kontejneru, akorát je to o něco
složitější - na rozdíl od kontejneru, do kterého je dobře vidět, jsou u
plné virtualizace k dispozici jenom nějaké základní informace (u KVM 2.1
je to paměť celkem, volno, počítadlo minor a major fault a počítadlo
swap-in a swap-out.) Na ostatní už je potřeba nějaký démon běžící v tom
hostovi - u KVM qemu-guest-agent