Windows Server 2008 R2 Dynamic Memory

Dynamic Memory je novinkou ve Windows Serveru 2008 R2, kterou přinesl nedávný Service Pack 1. Přečtěte si, k čemu je technologie Dynamic Memory dobrá.

Je tomu jenom několik dní nazpět, co byl vydán Service Pack 1 pro Windows Server 2008 R2 a Windows 7, který přinesl pouze několik převratných změn. Tyto změny jsou primárně směřovány do oblasti virtualizace, dalo by se říci, že jedinými podstatnými změnami je RemoteFX, který přináší nové možnosti v grafice a přesměrování USB pomocí protokolu RDP a druhou změnou je právě Dynamic Memory, které se bude věnovat tento článek.

Pokud se poohlédneme do minulosti, kdy byla uvedena serverová virtualizace pod názvem Hyper-V, pak se vám možná vybaví požadavky na provoz této serverové virtualizace, mezi které mimo jiné patří povolená technologie Data Execution Prevention (DEP), která zamezuje sdílení paměti mezi jednotlivými virtuálními stroji a umožňuje spouštět kód pouze v případě, kdy se v paměti nachází spustitelný kód (nastavuje se NX bit v paměti).

Možná se ptáte, proč právě v úvodu zmiňuji technologii DEP. Odpověď je jednoduchá, v případě, kdy se podíváme na podobné technologie pro práci s pamětí od jiných výrobců, zjistíte, že tyto technologie umožňují sdílení paměťových stránek mezi virtuálními počítači. Díky použití technologie DEP v rámci Windows Server 2008 Hyper-V bylo nutné zvolit odlišný způsob při správě paměti virtuálních počítačů.Technologie Dynamic Memory pracuje na principu tzv. „balooningu“, kdy je ve virtuálním počítači spuštěna služba, která schraňuje nevyužívanou RAM a je ji schopna vrátit hostiteli pro přidělení ostatním virtuálním počítačům.

Ve srovnání s konkurenčními technologiemi pro správu paměti je defakto nemožné, aby fyzický operační systém přestal mít dostatek RAM a začal intenzivně využívat odkládání paměťových stránek na pevný disk – virtuální počítače dostanou pouze tolik paměti, kolik je přístupno na fyzickém hostu, ale maximum může být nastaveno na 64GB, pro případ, že by se například ve vysoce dostupné konfiguraci vyskytoval hostitel s dostupným množstvím RAM. Pojďme se tedy blíže podívat na jednotlivé komponenty Dynamic Memory, funkčnost, nastavení a správu.

Architektonické komponenty Dynamic Memory

Dynamic Memory je složena z několika komponent, přičemž komponenty jsou instalovány na fyzickém hostiteli, tak i v rámci virtuálního operačního systému.

Dynamic Memory Virtual Service Consumer (VSC) – komponenta ve virtuálním stroji, která:

  • Je instalovaná jako součást integračních komponent, nicméně není aktivní až do doby povolení v rámci konfigurace VM,
  • Komunikuje přímo s řadičem paměti v rámci VM, zařizuje přidání a odebrání paměti
  • Sleduje stav využití paměti ve VM a odesílá informace do Dynamic Memory VSP.

Dynamic Memory Virtual Service Provider (VSP) – Komponenta fyzického hostitele, jenž dostává informace od všech Dynamic Memory VSC a předává konsolidované informace Memory Balanceru.

Memory Balancer – komponenta fyzického hostitele, která:

  • Monitoruje využití paměti hostitelem a hostem,
  • Pokud je zapotřebí, spolupracuje s VSP pro předání nevyužité paměti z hosta.
  • Pokud má hostitel dostatek paměti k dispozici, iniciuje VSP a poskytne další potřebnou RAM virtuálnímu OS.

Jak je paměť přidávána do virtuálního počítače?

Používá se různých technik pro přidání RAM. Operační systémy od verze 2003 samy o sobě obsahují memory Hot Add, nicméně tato technologie není přesně tím, co je využíváno, resp se využívá modifikovaná verze této technologie. Konkrétně je volána Plug and Play událost a trigger ACPI Hot Add. Dále je proveden tzv. Hot Add Enlightenment (pomocí zařízení Virtual Dynamic Memory device), který obchází standardní ovladač pro práci s pamětí a přímo informuje Memory Manager, že je k dispozici další RAM. Tato informace je opět předána pomocí specifického API. V minulosti bylo toto API k dispozici pouze u Enterprise a Datacenter Edice, pro použití ve virtualizovaném prostředí bylo portováno i do edic Web a Standard (není tedy možné provést Memory Hot Add v rámci fyzického serveru).

Jak je paměť odebírána z virtuálních počítačů?

Jak jsem zmínil výše, pro alokaci nepoužívané paměti je použita technologie balooning, kdy RAM, která není alokována je soustředěna pod systémovým ovladačem, tedy v takovém případě se může jevit, že virtuální operační systém nemá dostupnou žádnou volnou RAM. Na druhý pohled je vidno, že virtuální OS má tuto RAM dostupnou a ovladač v závislosti na požadavcích OS a služeb/aplikací tuto paměť uvolňuje.

Img01.jpg

Abychom porozuměli tomu, jak ovladač uvolňuje dostupnou fyzickou paměť virtuálnímu operačnímu systému, resp. jednotlivým aplikacím je nutné uvést termín „Guest Memory Pressure“, což je procentuální vyjádření aktuálního stavu virtuálního počítače – dostupná fyzická RAM vs. volná RAM. I v případě, kdy není použita virtualizace, je sdílena fyzická paměť a virtuální paměť, se kterými pracují aplikace, ale také vlastní operační systém.

Img02.jpg

  • Jednotlivé procesy neadresují fyzickou RAM napřímo;
  • Fyzická paměť je sdílena mezi kernel-mode a user-mode pomocí virtuálního adresního prostoru;
  • Virtuální adresní prostor závisí na použité edici Windows (procesorová a bitová architektura hardware a OS);
  • Závislost mezi fyzickou a virtuální pamětí je abstraktní, tedy množství virtuální paměti může být vyšší, nežli fyzické.

32-bit operační systémy adresují pouze 4GB RAM, ve výchozím nastavení je paměť dělena na poloviny mezi user a kernel mód. Toto chování je možné modifikovat přepínači /3GB, UserVA, které umožní alokovat více RAM pro user-mód.

64-bit operační systémy mohou teoreticky adresovat 16EB paměti, kde aktuální implementace v 64-bit Windows je adresace 16TB RAM. Jak dozajista víte, využitelná RAM pro Hyper-V je 1TB. Stejně tak jako u 32-bit edice je paměť rovným dílem dělena mezi kernel a user mód a také je možné měnit přidělování RAM pomocí např. BCDEdit.

Img03.jpg

Ještě více teorie – termíny používané ve Windows

Reserved Memory – paměť, která je alokována konkrétnímu procesu sadou bloků paměti ve vlastním adresním prostoru. Reserved Memory není přímou reprezentací fyzické paměti (RAM nebo disk), proces tedy v této paměti nic neukládá.

Commited Memory – paměť přímo alokovaná procesu – fyzická RAM nebo disk (odkládací swap soubor nebo jiné dočasné soubory).

Free Memory – adresní prostor paměti, který není využíván žádným procesem.

System Commit Limit – maximální množství paměti, které může systém garantovat procesu = RAM + Swap.

Current System Commit Charge – celkové množství RAM aktuálně garantované procesům.

Img04.jpg

Zeroed Pages – vyprázdněné paměťové stránky připravené pro přidělení procesům.

Free Pages – nevyužívané paměťové stránky, které ještě nebyly vyprázdněny, nemohou být tedy přiděleny dalším procesům.

Modified Pages – stránky paměti, které nebyly po nějakou dobu použity, ale stále obsahují data, která musí být zapsána na disk ještě před uvolněním stránek.

Standby Pages – stránky, které již byly uloženy na disk, ale ještě nebyly uvolněny. Stránky jsou neustále přiděleny původnímu procesu pro případ, kdy se proces k těmto stránkám vrátí, případně stránky mohou být uvolněny a přiděleny jinému procesu.

Img05.jpg

Working set – paměť, která je garantovaná procesu, se kterou se aktivně pracuje.

Active memory – paměť využita všemi working sety.

Nazpět do reality

Pojďme se tedy podívat na to, jak Hyper-V komunikuje s virtuálními počítači a jak pozná, že je nutné přidat další RAM virtuálnímu počítači.

Jak jsem zmiňoval výše, tato potřeba je skryta pod termínem Guest Memory Pressure a jedná se o procentuální vyčíslení aktuální dostupné paměti a množstvím adresovatelné fyzické paměti virtuálního počítače.

Img06.jpg

Pokud se podíváme na reálný příklad:

Img07.jpg

Výše uvedený obrázek z virtuálního počítače má aktuálně alokováno 798MB RAM (přesně 798 264 KB). V tomto konkrétním případě systém a procesy využívají 534MB RAM (534 780KB). Pokud bychom použili výše uvedeného vzorce a dosadili hodnoty, pak aktuální zatížení tam je 67%:

Img08.jpg

V tomto případě je tedy volných 33% RAM, což také označováno jako Free Buffer. V reálném světě nastanou situace, kdy tato hodnota překročí 100%. V tu chvíli nastává práce pro odkládací soubor, nicméně také zásadní snížení výkonu operačního systému (přeci jenom práce v RAM je počítána v jednotkách TB, na disku v jednotkách MB).

Jak tedy hypervizor usoudí, že je nutné / možné virtuálnímu počítači přidat RAM? V rámci Dynamic Memory je uveden koncept tzv. Pressure Band. Každý virtuální stroj prezentuje aktuální využití RAM. Pro každý virtuální stroj hypervizor ukládá historii použití paměti, které se označuje jako měřítko zátěže. V tomto případě jsou zaznamenána dlouhodobá minima a maxima virtuálního stroje, jak je znázorněno na následujícím obrázku:

Img09.jpg

V případě, kdy je aktuální hodnota potřebné RAM mezi dlouhodobým minimem a maximem nic se neděje. Pokud poklesne využitá RAM pod dlouhodobé minimum, pak Memory Balance považuje paměť za neefektivně využívanou, odebere část fyzické RAM virtuálnímu stroji tak, aby byl zachován poměr mezi dlouhodobým minimem a maximem (pozn. Toto se neděje, pokud má fyzický stroj dostatek volné RAM). V případě, kdy dlouhodobý průměr překročí hranici hypervizor usoudí, že virtuální stroj má nedostatek RAM a Memory Balancer přidělí virtuálnímu stroji další RAM. RAM je přidělována po malých blocích a opět tak, aby se zachovala rovnováha dlouhodobě průměrných hodnot. V případech, kdy je virtuálnímu stroji neustále přidělována další RAM, Memory Balance může navýšit indikátor minima potřebné RAM v závislosti na rozdělování RAM mezi ostatní virtuální stroje.

Které parametry ovlivňují, jakým způsobem bude prováděna alokace paměti?

  • Nastavení úvodní (startup) a maximální velikosti paměti pro virtuální stroj. Ve většině případů je minimální hodnota nastavena na velikost, kterou potřebuje virtuální OS pro svůj start (Windows Server 2008,R2,Windows 7, Vista – 512MB RAM, Windows Server 2003,R2 – 128MB RAM). Maximální hodnota pak na velikost, kterou může OS obdržet, může být i více, nežli má k dispozici fyzický stroj.
  • Priorita virtuálního stroje – popsáno dále.

-Nastavení Free Buffer virtuálního počítače – definuje jaké množství fyzické RAM má být ponecháno / rezervováno pro daný virtuální počítač. Také popsáno níže.

Jak funguje Free Buffer?

Každý virtuální počítač má v daném čase přidělené dané množství fyzické RAM. Část této paměti je použita procesy – memory load – jak jsme již popsali. Zbylá část paměti (100% využité RAM) se nazývá Free Buffer, což je část alokované paměti, která je ponechána jako rezerva pro virtuální počítač a může být kdykoliv reálně využita virtuálním počítačem.

Množství paměti přidělené virtuálnímu počítači je součet všech přidělených typů paměti – přidělená paměť (memory load) a buffer.

Img11.jpg 

Velikost bufferu v megabajtech může být jednoduše vypočítána z hodnot, které jsou nastaveny u virtuálního počítače a předpokládané (očekávané) velikosti bufferu (v procentech) a aktuální velikosti přidělení paměti:

Img12.jpg

Abychom porozuměli této situaci, zvažte následující:

Virtuální počítač je nastavený s úvodní konfigurací paměti na 512MB a maximum na 64GB. Procentuální nastavení Free Buffer je 25% (výchozí nastavení 20%), což je čtvrtina veškeré paměti, která může být alokována virtuálnímu počítači a je rezervována pro tento počítač (16GB + 512MB). Pokud Free Buffer poklesne pod definovaných 25%, memory balancer přidá paměť virtuálnímu počítači. Nevhodné nastavení Free Buffer může způsobit, že některé virtuální stroje nemusí na serveru nastartovat, doporučuji tedy ponechat ve výchozím nastavení 20%, případně pracovat v rozsahu 10%-30%. Tento Free Buffer může být využitý například pro kešování v rámci cirtuálního stroje, tedy např. pokud bude virtuální stroj požadovat (total commited memory) 4GB RAM a buffer bude nastavený na 50%, Hyper-V zpřístupní další 2GB RAM virtuálnímu stroji, nicméně tento buffer není garantovaný pro operační systém.

Předpokládejme, že virtuální stroj má přiděleno 673MB RAM a aktuálně využívá 515MB RAM:

Img13.jpg

V závislosti na výše uvedeném vzorci:

Img14.jpg

Pak celková velikost RAM, kterou balancer poskytuje virtuálnímu počítači je:

Img15.jpg

Nastavení priority

Pokud nastane situace, kdy není k dispozici dostatek fyzické RAM (například v konfiguraci vysoké dostupnosti, kdy jeden z uzlů je mimo provoz a virtuální stroje musí být provozovány na nižším počtu uzlů clusteru) je nutné určit, které virtuální stroje jsou důležitější a které méně. V případě, kdy některé virtuální stroje mají nastavenu vyšší prioritu (ve výchozím nastavení mají stejné nastavení 50%) a tyto méně prioritizované virtuální stroje požádají Memory Balancer o přiřazení RAM, tento požadavek je odmítnut a RAM je přidělována strojům s vyšší prioritou.

Rezervace paměti pro Parent Partition – hostitele

Nyní již přesně víme, kolik fyzické RAM můžeme přidělit jednotlivým virtuálním strojům, ale je také nutné myslet na fyzický operační systém – hostitele – Parent Partition. S tímto objemem RAM není kalkulováno a nijak pracováno v rámci Memory Balanceru.

V případě, kdy je v rámci Parent Partition provozován například nástroj pro správu virtualizační platformy, může být vhodné (ne nezbytně nutné) zvýšit rezervu pro fyzický operační systém. To je možné provést vytvořením klíče v registry HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization, vytvořte hodnotu MemoryReserve typu DWORD a nastavte např. na 2048, pokud chcete rezervovat 2GB pro operační systém.

Odkládací soubor a Dynamic Memory

Při práci s dynamickou pamětí je nutné myslet také na odkládací soubor – page file. Situace je o něco jednodušší nežli u ostatních virtualizačních platforem, kde virtuálním počítačům není přiděleno více RAM, nežli je opravdu přítomno ve fyzickém operačním systému a tedy Parent Partition není tolik stresována. Co nastat může je případ, kdy je nastaveno více RAM ve virtuálním stroji, nežli je schopný přidat fyzický server a obvykle velikost page file je polovinou dostupné RAM. V takovém případě může page file v rámci virtuálního stroje narůst na nežádoucí velikost. Stejně tak je nutné počítat s potřebou fyzického disku hostitele, kde je ukládán snapshot RAM (z důvodu možnosti uložení stavu počítače), kde velikost RAM = velikost souboru, tedy pokud nastavíte virtuálnímu OS 64GB RAM, bude na fyzickém disku vytvořený soubor o stejné velikosti.

Dynamická paměť a aplikace pracující s transakcemi

Dle zkušeností z ostatních virtualizačních platforem je důležité zmínit jednu podstatnou informaci. Jakákoliv technologie pracující s pamětí není vhodná pro aplikace, které alokují celou RAM a následně v této RAM pracují – typicky aplikace zpracovávající velké množství transakcí – SQL Server, Exchange a podobné aplikace. Pokud máte zkušenosti s takovými aplikacemi, pak víte, že tyto aplikace alokují téměř celou dostupnou RAM a už ji „nikdy nevrátí“, tedy až do chvíle restartu služby či celého serveru. Představme si situaci, kdy virtuálnímu počítači přiřadíte 64GB RAM (byť fyzický systém tuto RAM nemá), virtuální OS a aplikace se budou snažit tuto RAM alokovat a obdrží maximální množství fyzicky dostupné RAM. Pokud byste chtěli spustit další virtuální stroj, nepovede se tento stroj spustit, poněvadž RAM je držena aplikací, nikoliv virtuálním ovladačem.

Z toho důvodu je doporučeno pro takový typ aplikací používat statickou velikost RAM, která je přidělována virtuálnímu stroji, případně omezit maximální použitou RAM přímo v aplikaci (pokud to umožňuje).

Monitorování Dynamic Memory

Monitorování je možné provádět pomocí výkonnostních čítačů (Performace Counter) a to na dvou místech:

Čítač součástí skupiny Hyper-V Dynamic Memory Balancer.

Performance Counter

Popis
Added MemoryCelkové množství paměti přidané do virtuálních počítačů.
Available MemoryMnožství paměti ponechané volné na hostiteli.
Average PressurePrůměrná pressure v rámci memory balanceru.
Memory Add OperationsCelkový počet operací přidání paměti.
Memory Remove OperationsCelkový počet operací odebrání paměti.
Removed MemoryCelkové množství paměti odebrané z virtuálních počítačů.

Čítače součástí skupiny Hyper-V Dynamic Memory VM.

Performance CounterPopis
Added MemoryCelkové množství paměti přidané do virtuálního počítače.
Average PressurePrůměrná pressure ve virtuálním počítači.
Current PressureAktuální pressure ve virtuálním počítači.
Guest Visible Physical MemoryMnožství paměti viditelné ve virtuálním počítači.
Maximum PressureMaximální pressure band ve virtuálním počítači.
Memory Add OperationsCelkový počet operací přidání paměti do virtuálního počítače.
Memory Remove OperationsCelkový počet operací odebrání paměti do virtuálního počítače.
Minimum PressureMinimální pressure band ve virtuálním počítači.
Physical MemoryAktuální paměť přidělená virtuálnímu počítači.
Removed MemoryCelkové množství odebrané paměti z virtuálního počítače.

Již je také v přípravě Management Pack pro Systém Center Operations Manager, který bude umožňovat toto monitorování centerálně.

Konfigurace parametrů virtuálního stroje a ladění

Pro konfiguraci, změnu nastavení RAM je nutné provést vypnutí hosta, následně je možné volit mezi statickou velikostí RAM nebo dynamickou velikostí. Konfigurace pomocí rozhraní Hyper-V případně Systém Center Virtual Machine Manager je vcelku přímočará, nicméně je možné provést některé kroky, které mohou pomoci při případných problémech s dynamickou pamětí.

Pro případ, kdy je z virtuálního operačního systému odebíráno příliš velké množství paměti, je možné navýšit počáteční velikost RAM a tím tak modifikovat jednotlivé parametry chování Memory Balanceru. Díky této změně snížíte množství RAM, která může být odebrána z virtuálního počítače, ve chvíli, kdy počítače s vyšší prioritou požadují paměť.

Dalším příkladem může být situace, kdy výkon virtuálního počítače je špatný. V takové chvíli je možné navýšit Memory Buffer, který umožní Hyper-V alokovat více paměti pro virtuální počítač. Obecně by se dá říci, že více paměti, která je alokovaná například pro souborové keše může pozitivně ovlivnit aplikace, které intenzivně pracují s IO operacemi. Na druhou stranu konfigurace Memory Buffer příliš vysoko může způsobit neefektivní rozdělování sdílené paměti jednotlivým virtuálním počítačům.

Další možností je také zvětšení velikosti odkládacího souboru v parent partition, což umožní alokovat větším množství RAM virtuálním strojům, nicméně tuto změnu provádějte s rozmyslem.

Podporované operační systémy pro Dynamic Memory

V tuto chvíli jsou podporovány, resp. spolupracují pouze Windows Operační systémy, podpora systémů Linux bude součástí dalších verzí integračních komponent.

  • Windows Server 2008 R2 Standard Edition SP1
  • Windows Server 2008 R2 Enterprise Edition SP1
  • Windows Server 2008 R2 Datacenter Edition SP1
  • Windows Server 2008 R2 Web Edition SP1
  • Windows Server 2008 Standard Edition SP2
  • Windows Server 2008 Enterprise Edition SP2
  • Windows Server 2008 Datacenter Edition SP2
  • Windows Server 2008 Web Edition SP2
  • Windows Server 2003 R2 Standard Edition SP2 or higher
  • Windows Server 2003 R2 Enterprise Edition SP2 or higher
  • Windows Server 2003 R2 Datacenter Edition SP2 or higher
  • Windows Server 2003 R2 Web Edition SP2 or higher
  • Windows Server 2003 Standard Edition SP2 or higher
  • Windows Server 2003 Enterprise Edition SP2 or higher
  • Windows Server 2003 Datacenter Edition SP2 or higher
  • Windows Server 2003 Web Edition SP2 or higher
  • Windows 7 Enterprise Edition
  • Windows 7 Ultimate Edition
  • Windows Vista Enterprise Edition SP2
  • Windows Vista Ultimate Edition SP2

Na závěr

Dynamic Memory je dozajista dobrým počinem a jako u spousty dalších technologií lze říci, že se jedná o dobrého sluhu, ale zlého pána. Je pravdou, že díky Dynamic Memory se podstatně sníží nároky na plánování virtualizace pomocí Hyper-V, také využitelnost vysoké dostupnosti značně stoupne. Ale při plánování nasazení a ladění konkrétních parametrů mějte vždy na paměti, co a jak modifikujete, chybným nastavením můžete snížit výkon hostitele a tím tak omezit jednotlivé hosty, v případě vysoké dostupnosti znemožnit běh virtuálních strojů při migraci na menší počet hostitelů.

Autor: Ondřej Výšek


Sledujte Živě na Facebooku

celkem 0

Poslední názory Názory


Další podobné články

Takto bude vypadat tabletový Word, Excel a PowerPoint pro Android

Takto bude vypadat tabletový Word, Excel a PowerPoint pro Android

19.  11.  2014  |  Čížek Jakub  |  5
Microsoft Movie Creator beta - tvorba videa pro mobil i počítač

Microsoft Movie Creator beta - tvorba videa pro mobil i počítač

18.  11.  2014  |  Holčík Tomáš  |  1
Třetí veřejný build Windows 10 v obrazech
TIP!

Třetí veřejný build Windows 10 v obrazech

Microsoft minulý týden po necelém měsíci zveřejnil další sestavení Windows 10. I toto nabízí několik drobných novinek. Zároveň jsme hledali odpovědi přímo u Microsoftu.

18.  11.  2014  |  Čížek Jakub  |  12

AMD se přeřeklo, DirectX 12 prý nebude pro Windows 7

AMD se přeřeklo, DirectX 12 prý nebude pro Windows 7

16.  11.  2014  |  Javůrek Karel  |  11
Skype ohlásil verzi pro Web - videohovory v prohlížeči

Skype ohlásil verzi pro Web - videohovory v prohlížeči

14.  11.  2014  |  Holčík Tomáš  |  10
SAP se dál snaží o proměnu na mladého sexy hipstera

SAP se dál snaží o proměnu na mladého sexy hipstera

SAP se dál snaží přesunout do moderní éry. Kolem HANA chce vystavět velkou komunitu. Pomoci mají i partnerství se Samsungem, Shellem, Volkswagenem, IBM či mapami HERE.

14.  11.  2014  |  Sedlák Jan

Nvidia spustila Grid, půjčovnu streamovaných PC her

Nvidia spustila Grid, půjčovnu streamovaných PC her

Výkon a nabídku her obstará cloud, vám stačí jen tablet. To je nová éra hraní podle Nvidie. Její nová služba Grid zpřístupní náročné počítačové hry i na displejích tabletů.

14.  11.  2014  |  Polesný David  |  10

Microsoft uvolnil .NET, poběží i na Linuxu a OS X

Microsoft uvolnil .NET, poběží i na Linuxu a OS X

13.  11.  2014  |  Polesný David  |  11





Aktuální číslo časopisu Computer
  • Testy nejnovějších produktů na českém trhu.
  • Informace ze světa internetu i bezpečnosti.
  • Plné verze programů zdarma pro všechny čtenáře.

Partnerská sekce pro IT profesionály
Microsoft TechNet/MSDN