Diit.cz - Novinky a informace o hardware, software a internetu

Pod pokličkou správy 3D aplikací ve Windows Vista

Windows Vista logo
Náročnost počítačových her stoupá, to je neoddiskutovatelný fakt. Dalším faktem je, že se tento trend nezmění a nároky her budou nadále růst natolik, až jejich požadavky na paměť zcela definitivně překročí možnosti 32bitové architektury a odsoudí tak 32bitová PC a 32bitová Windows k zaslouženému odpočinku. V současné době se nacházíme v přechodném období, kdy se pod 32bitovými Windows Vista již začínají projevovat problémy s hraním her na moderních grafikách se spoustou osazené grafické paměti. Pokud se vám již stalo, že hry pod 32bit Vistou prostě jakoby bezdůvodně padaly, pak vás možná bude zajímat nejen hotfix, kterým Microsoft tento problém opravuje a odsunuje „úmrtí“ 32bitové architektury o něco dále, ale také podrobnější pohled pod pokličku správy paměti pro grafické aplikace v implementaci obsažené ve Windows Vista…

Netřeba asi obšírně zmiňovat, jak moc nevhodná volba je osadit 4 GB RAM na počítač s 32bitovými Windows. Stejně tak netřeba hlouběji rozebírat, že 32bitové aplikace mohou za normálních okolností adresovat pouze 2 GB paměti. To jsou známá fakta a i proto nejen společnost Microsoft a samotný průkopník 64bitových procesorů, firma AMD, ale i přední herní vývojáři v čele Timem Sweeneym (Unreal engine) „agitují“ za přechod na 64bitovou architekturu a s tím související 64bitové operační systémy. Ty totiž mohou adresovat paměti daleko více, bavíme se v řádu terabajtů, což nám vystačí na hodně dlouho. Naproti tomu 32bitové operační systémy doslova melou z posledního a jednou ze zářných ukázek začínajících problémů je stávající situace se správou paměti pro grafické aplikace ve Windows Vista.

Jádro problému je následující: ve Windows Vista běží grafické aplikace ve svém virtuálním paměťovém prostoru, který je podsekcí paměťového prostoru přiřazeného aplikaci jako celku. Typicky pro 32bitové aplikace platí limitace na 2 GB paměti, což je všeobecně známo a je více než jasné, že to z pohledu současných her a také her nové generace není a nebude dostatečné. Toto omezení je pak nezávislé na množství osazené paměti, jedná se o omezení dané architekturou.

Každá dílčí alokace paměti v rámci dané aplikace (hry, …) apod. pak konzumuje části z tohoto 2GB prostoru a jakmile je spotřebováno celých 2 GB, ucho džbánu se utrhne, protože program nemůže mít za běžných okolností uspokojeny další paměťové nároky přesahující 2GB limit (ano, existuje „jistý hack“, ale to není systémové řešení). To by měli samozřejmě ošetřit programátoři dané aplikace, ale ne vždy je tak učiněno a programy tak mohou vykazovat chybu končící pádem aplikace.

Hlavně her se pak týká specifické využití, kdy je kopie paměťových oblastí grafické karty alokována ve virtuální paměti (tedy zabírá jistý podíl z 2GB prostoru), což je využíváno mimo jiné i k rychlé obnově obsahu video paměti, třeba v situacích, kdy se hráč pomocí Alt+Tab přepne zpět do Windows nebo provede uspání PC metodou Suspend to RAM atd. Tento systém byl zaveden také pro rychlou obsluhu 3D rozhraní Aero Glass, pro načerpání potřebného podhoubí váš odkáži na naše dřívější články o Aero Glass, DirectX 10 a WDDM.

A problém je právě s moderními grafickými kartami, které nesou třeba 512 nebo 768 MB paměti (někdy i více) a množství dat, která je potřeba „přelívat“ z grafické do operační paměti zabírá z 2GB limitu výraznou část.

Crysis

Ve Windows Vista s DirectX 10 a WDDM již není pro aplikaci nezbytně nutné uchovávat si sama svou vlastní kopii grafických dat v operační paměti. Namísto toho vše zajišťuje inovovaný správce video paměti tak, že obsah video paměti je udržován pro všechny běžící 3D úlohy současně skrze tzv. „přechody mezi zobrazeními“. Z důvodů kompatibility s aplikacemi požadujícími dřívější verze modelu ovladačů (tzv. XPDM: Windows XP Display Driver Model) a starší verze DirectX než 10 však Vista emuluje tzv. „device lost“, přičemž aplikacím je umožněno si vše spravovat „postaru“, jak činily doposud a jak činí pod Windows XP/DirectX 9 (a staršími).

Nicméně správce paměti z Visty je ve věci alokace paměti daleko efektivnější, než může být starší aplikace jako taková (to klidně přisuďme i faktu, že je usazen hlouběji v systému než program, takže ví kam pro co sáhnout a co si jak může dovolit). Správce paměti za normálních okolností pro aplikace spravuje pomocí zmiňovaného virtuálního prostoru vyřizování požadavků na přesuny dat a také právě situace, kdy by požadavky aplikace hrozily překročením 2GB limitu. Bohužel však nebyla dosavadní implementace správce virtuálního adresového prostoru korektní z hlediska priority nasazení ve srovnání s požadavky starší aplikace na použití XPDM na systémech s moderní grafikou nesoucí velké množství video paměti, která jinak sama o sobě aplikaci více než postačuje.

Docházelo tak k situacím, kdy byl automaticky přidělený virtuální adresový prostor nevyužit a místo něj program využíval starší verzí modelu ovladačů XPDM, který si natvrdo vytváří kopii paměti, kterou si vyžádá aplikace přímo, což samozřejmě zvyšovalo celkovou velikost obsazené paměti.

Ve stručnosti si povězme, jak XPDM pracuje. Funguje na principu „kdo dřív přijde, ten dřív mele“. Tedy pokud některá aplikace požaduje alokovat veškerý dostupný paměťový prostor, je jí bez ostychu přidělen a další aplikace mají utrum, protože už se nemají na 32bitových strojích/OS se svými požadavky kam vejít. Naproti tomu WDDM z Windows Vista se svou virtuální adresací spravuje požadavky všech aplikací současně a ty jsou dynamicky rozdělovány do dostupného paměťového prostoru tak nějak „demokraticky“. To tak mimo jiné stojí za možností pouštět 3D hry za současně běžícího 3D prostředí Aero Glass, oboje relativně velmi svižně.

Jinými slovy, v tomto bodě na strojích s hromadou grafické paměti a běžící starší úlohou (DirectX 9 a starší) nový správce virtuální paměti ve Windows Vista selhává, protože sice alokuje virtuální paměťový prostor, ale samotnou správu nechává původnímu systému, který spravuje (ve srovnání s WDDM neefektivně) paměťový prostor sám, což ve výsledku může v jistých situacích vést k vyčerpání celého limitu, nebo jeho výrazné části tak, že na další programy nezbývá dost. To je pak samozřejmě následováno zkolabováním dané aplikace, jak jsme si popsali o kousek výše.

Hotfix tento problém řeší úpravami ve správci video paměti, které mění chování systému při správě paměťových zdrojů, kdy jsou oba typy úloh (DirectX 10 versus starší verze) spravovány jinou politikou nakládání s virtuální adresací paměti. DirectX 10 aplikace jsou nadále společně spravovány v rámci virtuálního adresového prostoru, zatímco DirectX 9 a starší aplikace jsou z tohoto prostoru vyjmuty a správce virtuální paměti již pro ně neprovádí alokaci. Ve výsledku tak hotfix značně snižuje nadbytečnou spotřebu virtuálního paměťového prostoru a programy tak mohou běžet na strojích s hromadou video paměti bez toho, aniž by si i při jejím nevyužití vyčerpávaly dostupný paměťový prostor. Tato úprava tak radikálně zlepšuje nakládání s adresovým prostorem, ale samozřejmě neeliminuje 2GB limit, ten je prostě v rámci 32bitových systémů dán.

Zvláštností však je, že hotfix je k dispozici nejen pro 32bitová Windows, ale i pro 64bitová. Jakoby Microsoft očekával, že v době, kdy si hry dokáží uzmout 7,999 TB RAM bude někdo mít potřebu na Windows Vista současně pouštět DirectX 9 či starší aplikace. Tak nějak máme tušení, že v té době již po zataralých Windows Vista neštěkne ani pes :-). Každopdáně hotfix můžete stahovat z domovských stránek firmy, týká se všech verzí Windows Vista (32bit, 64bit).

Zdroje: 

David "David Ježek" Ježek

Bývalý zdejší redaktor (2005-2017), nyní diskusní rejpal.

více článků, blogů a informací o autorovi

Diskuse ke článku Pod pokličkou správy 3D aplikací ve Windows Vista

Pátek, 9 Listopad 2007 - 05:51 | Anonym | RaStr: Windows XP nepodporuje víc jak 4GB hlavně...
Pondělí, 3 Září 2007 - 23:37 | RaStr | Kekes: Jak se zda, stale jste to nepochopil, ty...
Pondělí, 3 Září 2007 - 21:50 | Anonym | edit> sorry, co se tyce 3GB pro kazdou...
Pondělí, 3 Září 2007 - 21:42 | Anonym | No tak nevim :) o cem diskutujete, na technetu je...
Pondělí, 3 Září 2007 - 09:45 | RaStr | TOW: no nevim, ale podle toho, co o PAE pisi zde...
Neděle, 2 Září 2007 - 17:23 | Anonym | RaStr : ja si taky myslim, ze v desktopu bude...
Neděle, 2 Září 2007 - 15:27 | Anonym | No ja bych rekl, ze u tech serverovych Windowsu...
Neděle, 2 Září 2007 - 14:04 | RaStr | xR: ad 1) Mate pravdu, je to problem aplikace...
Sobota, 1 Září 2007 - 21:17 | Anonym | 2 RaStr: 1. /3GB switch je nepouzitelny - system...
Sobota, 1 Září 2007 - 18:59 | RaStr | MildaEvilda: Mate v tom asi nejaky zmatek. Nevim...

Zobrazit diskusi