Při správě hostujících virtuálních počítačů běžících na virtualizačních hostitelích (ať už se jedná o VMWare ESXi nebo Hyper-V), se při analýze problémů s výkonem často setkáváme s situacemi, kdy je množství dostupné paměti OS mnohem menší, než vidí operační systém (přiřazeno). Virtuálnímu stroji je například přiděleno 8 GB paměti, správce úloh ukazuje volné 1 GB paměti, zatímco celková spotřeba paměti všech spuštěných procesů nepřesahuje 3 GB. Kam šlo zbývajících 4 GB??
Obvykle je důvodem tohoto chování použití funkce overcommit paměti v hypervizoru.
Přepětí paměti (Neznám tu definici v ruštině, nechť dojde k přebývání paměti) je to funkce hypervisora, která vám umožňuje přidělit více paměti virtuálním strojům, než je na fyzickém hostiteli, ale bez záruky, že v určitém časovém okamžiku může být alokována veškerá požadovaná paměť. Overcommit vám zpravidla umožňuje zvýšit hustotu virtuálních počítačů na hostiteli, protože paměť bude mezi nimi dynamicky redistribuována v závislosti na aktuálním zatížení (prostředky nevyložených / nečinných virtuálních počítačů lze přerozdělit mezi více načtenými)
V VMWare je jedním z mechanismů implementace nadměrné paměti příliš Balónky paměti (vytěsnění paměti nebo, pokud chcete, podvrtnutí). V Hyper-V je podobná funkce implementována funkcí Dynamická paměť.
Poznámka:. Mimochodem, jak VMWare, tak Hyper-V používají kompresi paměti široce a poměrně efektivně, aby šetřily paměť a implementovaly nadměrné technologie..V VMWare je míč implementován prostřednictvím ovladače vmmemctl.sys (součástí VMware Tools), které v případě potřeby dokáže zachytit fyzickou paměť nafouknutím fiktivního procesu koule uvnitř paměti (balón). Obsazená paměť se tak stává nedostupnou pro aplikace a hypervisor může redistribuovat uvolněnou paměť mezi ostatními VM. Dynamická paměť Hyper-V používá ovladač dmvsc.sys ze sady integračních služeb (součást dynamické paměti VSC). Nastavení nadměrných hodnot řídí správce hypervizoru..
Jak však z VM zjistit, že má ve skutečnosti k dispozici méně fyzické paměti, než jaké vidí operační systém?
Zvažte, jak určit přítomnost a velikost ovladače balónu v hostujícím OS Windows. Budeme tedy analyzovat následující situaci:
VM s hostujícím Windows Server 2012 R2 přidělili 8 GB RAM. Správce úloh ukazuje, že paměť je využívána na 93% (obsazeno je 7,4 GB paměti). Pokud však přidáte množství paměti, které všechny spuštěné procesy využívají, můžete dojít k neočekávanému závěru - skutečně je použito pouze 2,5 GB. Kam směřovalo 5 GB paměti? Správce úloh ani sledování zdrojů neodpoví na tuto otázku..Abyste pochopili, co se stane s pamětí, musíte použít obslužný program Rammap Mark Rusinovich (v jednom z předchozích případů jsem ukázal, jak pomocí tohoto nástroje diagnostikovat problém se systémovou mezipamětí systému souborů). Stáhněte si nástroj z webu společnosti Microsoft (https://technet.microsoft.com/en-us/library/ff700229.aspx) a spusťte jej s právy správce. Poté na kartě Použití se počítá vidíme, že většina paměti (5,4 GB) je používána objektem Řidič je zablokován.
Toto je paměť, kterou hypervisor „snědl“ a přerozdělil na jiné virtuální stroje prostřednictvím ovladače balónu v hostujícím OS. I.e. na hostiteli hypervisoru není dostatek paměti nebo správce hypervizoru násilně „zabil“ prostředky pro tento VM.
Aktuální rozložení paměti ve virtuálních počítačích na Hyper-V může být dáno jednotlivými čítači výkonu v nástroji Sledování výkonu:
- Dynamická paměť Hyper-V -> Viditelná paměť hosta
- Dynamická paměť Hyper-V -> Fyzická paměť
Chcete-li toto chování zakázat, musí správce hypervizoru zakázat možnost v nastavení VM Hyper-V Povolit dynamickou paměťy (nebo zvýšit minimální hodnotu rezervace).
Pokud používáte hostitele VMWare ESXi, můžete použít nastavení přidělování prostředků (Nastavení zdrojů) vyhradit více paměti pro tento stroj nebo okamžitě zarezervovat celou paměť - rezervovat veškerou paměť hosta (vše zamčeno).