Extrémní nedostatek pamětí na trhu a vysoké ceny kvůli boomu (či bublině?) AI opět prodlouží éru, kdy lidovým standardem v herních PC je grafika s jen 8GB pamětí. Místo aby už konečně skončila, asi s těmito kapacitami bude třeba žít ještě hodně dlouho. Na platformě Linux teď vývojáři přišli s optimalizacemi, které cíleně mají zlepšit využití paměti na takových kartách – mimo jiné proto, že 8GB Radeonem bude vybavená Steam Machine.
Pro efektivní využití paměti u levných grafik
Autorem této optimalizace mající za cíl zlepšit hraní na levných GPU s například 8GB nebo případně ještě menší grafickou pamětí jsou vývojáři Valve, Intelu a Rade Hatu. Podle podrobného popisu od Natalie Vock z Valve a jde o snahu obecně zlepšit správu grafické paměti. Ta je v současné podobě problematická (minimálně v kombinaci s otevřenými ovladači GPU Radeon, které Valve používá v zařízeních se systémem SteamOS, nicméně odpovědnost zřejmě nese i OS).
Při hraní na grafikách s malou pamětí se totiž naráží na to, že systém nechá všechny aplikace běžící v počítači (a to nejen ty aktuálně spuštěné uživatelem, ale i různé systémové komponenty) alokovat desítky až stovky megabajtů v paměti GPU pro každou takovou úlohu, a to i když je spuštěná hra. V příkladu ukazovaném v blogpostu zabíraly různé neherní položky v paměti GPU 1829 MB z 8 GB a v případě, že uživatel spustí náročnou hru, neuvolní prostor.
Programy zabírající paměť GPU, aniž by byla spuštěna hra
Při ukázkovém spuštění Cyberpunku 2077 tak hra dostala jen 6105 MB a musela používat dalších 1370 MB v operační paměti, což přináší značné propady výkonu.
Přidělení paměti pro Cyberpunk 2077 před zlepšením správy VRAM
Řešením problému má být komponenta či systémový program nazvaný dmem cgroup controller, který používá funkci cgroups k sofistikovanějšímu řízení alokace grafické paměti jednotlivým úlohám. Využívá toho, že každý program má přidělenu vlastní cgroup, pro kterou lze definovat, zda ji preferovat při přidělování grafické paměti a chránit jeho data před vyhozením z paměti GPU do běžné RAM, což je přesně ten problém, na který zde hra naráží.
Linux běžně nemá dobou představu o tom, která data by měla mít při přidělování grafické paměti přednost. Nicméně Natalie Vock přidala patche zlepšující chování v jádru a také úpravu komponenty plasma-foreground-booster, která v prostředí KDE automaticky hlídá, která okna jsou v popředí, a takovým dává jim prioritu. Zatímco v původní verzi řídila jenom prioritu aplikace pro využití CPU, nově byla přidána i schopnost prioritizovat proces pro potřeby přidělení paměti GPU. Když je spuštěná nějaká hra, dostane tím pádem prioritu před ostatními programy na pozadí včetně třeba webového prohlížeče, který by jinak mohl dost paměti zkonzumovat.
Využitím této schopnosti lze docílit toho, že správa grafické paměti při běhu hry vytěsní z grafické paměti nikoliv část dat hry, ale data ostatních programů, které během hraní typicky stejně běží jen na pozadí nebo minimalizované a není tak třeba jejich data ponechávat v paměti GPU. S touto úpravou pak Cyberpunk 2077 ve stejné situaci jako v prvním případu dostane přiděleno 7395 MB, což je přesně velikost paměti, kterou si hra vyžádala. Naopak se výrazně omezí množství paměti zabrané neherními „příživníky“. Výsledkem by mělo být mnohem plynulejší hraní bez propadů FPS způsobených tím, že data nebyla v paměti GPU, ale jenom v pomalé operační paměti počítače.
Přidělení paměti pro Cyberpunk 2077 po zlepšení správy VRAM
Lepší hraní na Linuxu a Steam Machine
Toto nemusí znamenat, že by vám přechod na Linux výrazně pomohl, pokud hrajete s na počítači s 8GB grafickou kartou a máte Windows. Jde asi spíš o opravu dosavadního slabšího místa v herních schopnostech Linuxu, než nalezení nějakých doteď obecně nevyužívaných rezerv (i když porovnat efektivitu využití VRAM mezi oběma platformami by asi bylo zajímavé). Nicméně i coby oprava bude tato změna pro hráče na Linuxu užitečná a zejména pomůže chystané konzoli či herním počítači Valve Steam Machine.
Ta běží na Linuxové distribuci SteamOS a kvůli ceně dostala právě grafiku s 8GB pamětí, odvozenou od Radeonu RX 7600. To bylo jistým zdrojem obav. S tímto vylepšením správy grafické paměti v Linuxu by ale každopádně měla lépe zvládat náročnější hry, až se Steam Machine podaří vydat (její vypuštění se opozdilo právě kvůli nepříznivému vývoji cen pamětí).
Těžit z této změny budou zatím zdá se jen grafické karty AMD Radeon a Intel Arc s otevřenými ovladači amdgpu a xe a grafiky Nvidia s otevřeným ovladače Noveau. Je totiž třeba, aby ovladač v jádru podporoval funkci dmem cgroups (a zřejmě je zde i závislost na systemd). Standardní proprietární ovladač grafik Nvidia, který většinou hráči asi budou používat, tyto opravy kvůli absenci podpory pro dmem cgroups zatím nepodporuje. Zároveň je třeba mít nainstalované utility dmemcg-booster a plasma-foreground-booster pro prostředí KDE/Plasma (které využívá SteamOS), případně pro jiná prostředí dmemcg-booster a gamescope. První položka (dmemcg-booster) má však být jen dočasným řešením, než se podpora pro potřební nastavovování priorit různých cgroups dostane i do standardního kódu systemd – to se stane, až bude dokončen návrh potřených rozhraní.
Samotné patche implementující toto zlepšení správy grafické paměti zatím zřejmě nebyly upstreamovány do jádra Linuxu a momentálně je tak k jejich využití či testování třeba opatchované jádro.
Do SteamOSu by se ale asi vzhledem k provázanosti s Valve dostat mohly a tím pádem by měla být i snaha o jejich upstreamování, aby se na Linuxu lepší využití paměti hrami bylo standardním chováním. K tomu ovšem také distribuce budou potřebovat začlenit i příslušné utility. Už teď by zřejmě měly být integrovány v distribuci CachyOS (při použití KDE) od verze jádra 7.0rc7–2, dále jsou k dispozici patche pro distribuci Arch.
Zdroje: techPowerUp, Github
