Előszó
A játékok szegmensében az elmúlt évek folyamán több olyan technológia is megjelent, amelyek segítenek abban, hogy az egyes címek még gyorsabban futhassanak az adott hardveren. Gondoljunk csak az Nvidia DLSS támogatására, majd erre válaszul érkezett az AMD FidelityFX SuperResolution, illetve az Intel XeSS is. Ezek más-más módszereket használnak, egyvalami azonban közös bennük: a tartalmat a GPU a natívnál alacsonyabb felbontással rendereli le, majd ezt a neurális hálózat vagy az erre a célra készített algoritmus felskálázza a natív felbontásra, amivel GPU erőforrás takarítható meg, és a képminőség is vállalható marad. Természetesen a gyorsulás mértéke mindig attól függ majd, mennyire fontos számunkra a sebesség és a képminőség – egyiket a másikért fel lehet áldozni, illetve egyensúly is teremthető köztük, hála a rendelkezésre álló beállítási lehetőségeknek.
Az FPS mellett az sem elhanyagolható tényező, mennyire tölt be gyorsan egy adott játék, hiszen minél gyorsabb ez a folyamat, annál több időnk marad játékra és annál kevesebb időt kell töltenünk idegőrlő várakozással. A gyorsulásban sokat segítenek a modern többmagos processzorok és az ugyancsak modern, nagy adatátviteli sávszélességgel rendelkező SSD kártyák, ám a folyamat egyes esetekben mégis érezhetően lassú, ami beárnyékolja a felhasználói élményt. Ez persze nem is véletlen, hiszen azok az I/O API-k, amik a betöltéshez szükséges folyamatokat vezérlik, még abban az időben születtek, amikor a merevlemezek sebessége határozta meg az igényeket, ám azok az idők már régen elmúltak, ideje haladni a korral.
Éppen ennek a technikai limitnek a kiküszöbölésére készült egy hasznos új technológia, a DirectStorage, amit a Microsoft elsőként a játékkonzolok piacán vetett be, méghozzá az új generációs Xbox Series X és Xbox Series S játékkonzolok fedélzetén a Velocity architektúra részeként. A technológiával kapcsolatban már nagyon régóta tudható, hogy a PC piacra is el szeretné hozni a vállalat, erre igazából sor is került az év elején, hiszen megjelent az első olyan játék, ami már képes a DirectStorage API-ban rejlő lehetőségek kiaknázására. Hogy ez mekkora gyorsulást hozott? Rövidesen erre is kitérünk, ám előtte feltétlenül érdemes tisztázni, mi is az a DirectStorage, illetve az sem mellékes, pontosan hogyan működik.
A DirectStorage lényege
Az új API a merevlemezknél használt IDE/SATA csatolók, illetve az IDE és az AHCI mód által meghatározott I/O lehetőségek helyett a modern, PCI Express csatolófelülettel és NVMe protokollal dolgozó SSD kártyák I/O teljesítményéhez igazodik, amelyek ezen a téren sokkal-sokkal gyorsabbak a klasszikus merevlemezeknél. Főként 4K-s véletlenszerű olvasási- és írási teljesítmény terén vannak óriási különbségek, de az általános adatáviteli sávszélesség is jelentősen magasabb egy PCIe NVMe SSD-nél egy SATA HDD-hez képest. Míg a régi, HDD-hez igazított API-k esetében az I/O műveletek száma nagyon maximum 100 környékén helyezkedett el, az SSD meghajtók és kártyák ennél lényegesen több, akár több tízezer I/O művelet elvégzésére is képesek, ezt viszont az aktuális API mellett nem igazán lehet kiaknázni, mivel az extrém magas többletterhelést helyez a rendszer vállára.
Hasonló teljesítmény eléréséhez indokolatlanul nagy CPU terhelésre lenne szükség a magas overhead miatt és processzormagokból is rengeteg kéne, esetenként akár egy tucatnyinál több. A Win32 architektúra esetében az overhead legnagyobb része abból állt, hogy a rendszer értesítést küldött az olvasás teljesüléséről. Anno az ajánlás az volt, hogy a forgó adathordozót tartalmazó adattárolók esetében 12-16 aszinkron kérésnél többet ne használjon a rendszer egyidejűleg, ugyanis az ennél több kérés nem hoz teljesítménynövekedést, az ennél kevesebb viszont jelentős lassulást eredményez. A DirectStorage esetében már az 50 000 IOPS-os szint elérése a cél, legalábbis az Xbox Series X és Series S játékkonzolokra vonatkozó leírásban ez szerepel, már ami az adott cím által kezdeményezett műveletek számát illeti, ami jelentős eltérés. Ezt a szintet ráadásul úgy akarták elérni, hogy az 50 000 IOPS-os teljesítmény biztosítása közben az egyetlen processzormagra jutó terhelés mértéke lehetőleg ne legyen több 10%-nál.
A DirectStorage API ezzel szemben már az NVMe protokollban rejlő újításokra támaszkodik, ami kifejezetten az SSD meghajtók és kártyák magasabb I/O teljesítményét figyelembe véve készült el, ennek megfelelően az említett szinten jelentősen kisebb a többletterhelés (overhead), mint a korábbi API-k esetében, ezzel egy időben pedig gyorsul az adatátvitel is, hiszen jelentősen több művelet feldolgozására képes a rendszer a magasabb IOPS miatt.
Az NVMe protokoll használata tehát megágyaz a magasabb I/O teljesítményben rejlő lehetőségek kiaknázásának, ám ezzel egy időben egy másik trükk is bevetésre kerül: a játékokhoz tartozó tömörített tartalmak kicsomagolását a CPU helyett a hatalmas párhuzamos számítási teljesítménnyel rendelkező GPU-ra bízzák, ami az apróbb fájlok párhuzamos kitömörítésében sokkal jobb, mint a CPU. Ez több szempontból is előnyös, hiszen míg a CPU-val kitömörített adatok a rendszermemóriába, majd onnan a GPU memóriába (VRAM) kerülnek, addig a GPU alapú kitömörítéssel az SSD-ről közvetlenül a VRAM-ba juthat a szükséges adat, ráadásul sokkal gyorsabban, minimális processzorterhelés mellett.
Amennyiben ezt a feladatot a CPU-ra bíznánk, a terhelés extrém mértékben megnövekedne, hiszen míg a korábbi API esetében nagyjából 100 I/O műveletet kellett kezelni másodpercenként, addig itt már több ezer, vagy akár több tízezer művelet is nyomná a processzor vállát, amihez kifejezetten sok processzormagra lenne szükség – akár tíznél is bőven többre – ez pedig összességében túl sok CPU teljesítménybe kerülne, ami végül a játék futtatását is negatívan befolyásolná.
Az újfajta eljárásnak persze a videokártya részéről is vannak követelményei, hiszen azzal, hogy a GPU-nak a képkockák létrehozása mellett a különböző textúrák és egyéb tartalmak kitömörítésével is foglalkoznia kell, azaz ebben az esetben aszinkron módon kell a számításokat végeznie, így ebben az „üzemmódban” hatékonyan helyt kell állnia. A GPU által kitömörített adatok a VRAM-ba kerülnek, azaz ezen a téren is fejlődésre van szükség, ugyanis az extra adatforgalomnak extra helyre lesz szüksége, még akkor is, ha a GPU által a VRAM-ba tömörített adatok egy részét később a rendszermemóriába is át tudja másolni a rendszer, majd onnan vissza, ha éppen szükség lesz rájuk.
Ahhoz, hogy ez az egész működjön, a GPU részéről feltétlenül szükség van arra a támogatásra, ami a PCI Express eszközök közötti közvetlen memória-forgalmat lehetővé teszi, ám ez szerencsére elég régóta elérhető mind az AMD, mind pedig az Nvidia térfelén. Az adatforgalom kiszolgálásához úgynevezett DMA (Direct Memory Access) motorokra is, amelyek aszinkron módon tudják mozgatni a nagyméretű adatblokkokat a PCI Express csatolón keresztül, ilyen DMA blokkok az NVMe SSD vezérlők fedélzetén is jelen vannak. Maga a technológia az Nvidia háza táján GPU Direct néven fut, míg az AMD-nél DirectGMA névvel találkozhatunk.
A DirectStorage segítségével összességében csökkenthető a játékok betöltési ideje, növelhető a képminőség is, valamint spórolhat a rendszer a CPU ciklusokkal, a felszabaduló erőforrásokat pedig jobb fizikára, vagy egyéb dolgokra lehet „költeni”.
DirectStorage 1.0 és 1.1
A DirectStorage PC-s változatának fejlesztésével kapcsolatban először 2020 szeptemberében érkezett hír, majd ezt követően elég sokáig csend volt az újítás körül, javában zajlottak a fejlesztéssel és teszteléssel kapcsolatos feladatok. A technológia első implementációja, amely az 1.0-s verziószámot viselte, még egy komoly limitet tartalmazott, ugyanis a gyors NVMe SSD-n helyet foglaló tömörített tartalmakat eleinte nem a GPU, hanem a CPU vette kezelésbe, ez pedig erősen behatárolta a gyorsulás mértékét, hiszen a CPU nem olyan hatékony a több ezer I/O művelet elvégzésében, mint a GPU.
Maga a DirectStorage 1.0 még 2022. márciusában vált elérhetővé, és igazából mindenféle adattároló esetében segített a gyorsulás elérésében, de a legjobb eredményt és teljesítményt természetesen NVMe alapú SSD-k mellett várhattuk. Noha ez a verzió régóta elérhető, igazából nem mutattak iránta érdeklődést a játékfejlesztők, inkább a GPU alapú tömörítést használó kiadást várták meg, jó példa erre a Forspoken, amiről később még lesz szó.
Később elkészült és elérhetővé vált az 1.1-es változat is, erre egészen 2022 novemberéig kellett várni. A legnagyobb újítás az volt, hogy innentől kezdve végre a GPU alapú tartalom-kitömörítésben rejlő lehetőségek is kiaknázhatóvá váltak, ami nagyobb gyorsulást eredményezett. A funkció használatához persze DirectX 12 és Shader Model 6.0 támogatással rendelkező videokártyára van szükség az NVMe SSD mellett, ami nem egy komoly kitétel, ugyanis ennek az elmúlt néhány évben kiadott videokártyák már maradéktalanul megfelelnek. GPU terén nem elég a fenti kitételeknek megfelelni, az adott GPU gyártónak megfelelő drivert is kell készítenie ahhoz, hogy a DirectStorage API-ban rejlő lehetőségek elérhetőek legyenek. A hardverek működését a drivereken keresztül optimalizálhatják, vagyis metaparancsokat is használhatnak, ami segíthet a teljesítmény növelésében.
A Microsoft tesztje alapján míg a Zlib alapú tömörítést használó rendszer, ami a CPU alapú tömörítésre támaszkodott, 2,36 másodperc alatt végzett a tömörítése feladattal, közben pedig 100%-os maximális CPU terhelést mutatkozott, addig a nyílt forráskódú GDeflate-re támaszkodó, azaz GPU alapú tömörítést használó rendszernek mindössze 0,8 másodpercre volt szüksége a feladat teljesítéséhez, a maximális CPU terhelés pedig mindössze 15,08% volt. Ez remekül szemlélteti, mekkora hatalmas előny rejlik a GDeflate algoritmust használó DirectStorage 1.1-ben.
A DirectStorage 1.1 bejelentését követően az Intel arról számolt be, hogy a DirectStorage demó futtatásakor egy Core i9-12900K processzor mellett 7,88 GB/s-os adatátviteli sávszélességet sikerült elérni, míg ugyanez az érték a GPU alapú tömörítés, azaz a GDeflate használata mellett egy 16 GB-os Intel Arc A770-es videokártyával karöltve már 21,67 GB/s-ra katapultált, azaz 2,7x-es gyorsulás jött össze.
Ez nyilván egy optimális eset, hiszen egy Feature Testről van szó, de így is remekül szemlélteti a technológiában rejlő lehetőségeket. Az persze külön említést érdemel, hogy míg a CPU alapú tömörítés alkalmával 100%-os maximális CPU terhelés jött össze, addig a GPU alapú módszernél már csak 1,29%-os maximális CPU terhelést produkált a rendszer, ami rendkívül szép eredmény.
Mire van szükség a DirectStorage használatához?
Operációs rendszer szintjén eredetileg a Windows 11-hez készült az újítás, már ami a PC-s verziót illeti, ám a Windows 10 alá is elérhetővé tették. Mivel a Windows 11 már egy modernebb, optimalizált adattároló-kezelő keretrendszert kapott, a legjobb teljesítményt Windows 11 alatt érhetjük el, de Windows 10 alatt is próbálkozhatunk a 1909-es kiadástól felfelé.
Mindenképpen szükség lesz egy kellően gyors SSD kártyára, ami legalább PCI Express 3.0-s csatolófelületet használ és rendelkezik az NVMe protokoll támogatásával. Adattároló kapacitás terén legalább 1 TB-ban kell gondolkodni, legalábbis a Microsoft eleinte ezt ajánlotta, ám ez a kitétel idővel eltűnt a leírásból és magyarázatot sem adtak arra, miért került bele eredetileg. Videokártyák terén a GeForce RTX 2000-es, az Intel Arc Alchemist és az AMD RDNA 2 sorozatú, vagy ezeknél újabb termékei jöhetnek szóba, plusz szükség lesz DirectStorage támogatással ellátott GPU driverre, ami manapság már nem probléma, ez a friss kiadások esetében adott. Amennyiben ez mind-mind megvan, még olyan játékra is szükség lesz, ami rendelkezik DirectStorage támogatással, ekkor ugyanis automatikusan használni fogja a rendszer a DirectStorage API-t a különböző tartalmak másolásához és kitömörítéséhez, azaz gyorsabban betöltődhetnek a játékok és az egyes pályák is.
Amennyiben nem rendelkezünk megfelelő hardverrel, a DirectStorage támogatással ellátott játék akkor is működni fog, ám a modern hardver adta gyorsulásról le kell mondanunk.
Január végén megjött az első DirectStorage támogatással felvértezett játék, a Forspoken
Nemrégiben végre kiderült, mekkora gyorsulást hozhat a Microsoft újítása, hiszen megjelent a Square Enix és a Luminous Studios közös alkotása, a ForSpoken, ami már kiaknázhatja a DirectStorage API-ban rejlő lehetőségeket, ráadásul annak legfrissebb, 1.1-es verzióját támogatja, ami a GPU alapú tömörítésre támaszkodik. A játékkal készült is néhány teszt, köztük a Compusemble is mutatott eredményeket, amelyekből kiderül, hogy egy RYZEN 7 7700X processzor, 32 GB-nyi DDR5-ös fedélzeti memória, illetve egy GeForce RTX 3080 Ti videokártya mellett hogyan teljesítenek az egyes SSD kártyák. A tesztben egy mérnöki tesztpéldányként funkcionáló Phison E26-os PCIe 5.0-s, egy Samsung 990 Pro típusú PCIe 4.0-s, illetve egy ADATA XPG SX8200 Pro típusú PCI Express 3.0-s NVMe SSD szerepelt. A betöltési idők között természetesen volt különbség, igaz, nem annyira látványos, mint azt sokan várhatták, ahogy az a lenti videóból is kiderül.
A DigitalFoundry ennél sokkal szemléletesebb tesztet készített, amelyben a Sony PlayStation 5 mellett többféle konfiguráció is szerepelt, méghozzá kikapcsolt és bekapcsolt DirectStorage támogatással egyaránt, így az új technológia hatásait nagyon szépen lehetett szemléltetni. A lenti felsorolás megmutatja a lényeget:
Betöltési idők a DigitalFoundry tesztjei alapján:
- PS5 (performance mode): 4.4s
- PC, DirectStorage bekapcsolva(Core i9 12900K + NVMe SSD): 4.1s
- PC, DirectStorage kikapcsolva (Core i9 12900K + NVMe SSD): 5.4s
- PC, DirectStorage bekapcsolva (Ryzen 5 3600 + NVMe SSD): 6.8s
- PC, DirectStorage kikapcsolva (Ryzen 5 3600 + NVMe SSD): 11.7s
- PC, DirectStorage bekapcsolva (Core i9 12900K + SATA SSD): 10.2s
Az eredmények alapján a PC-s DirectStorage még gyorsabb is volt, mint a PlayStation 5-ös, igaz, csak 0,3 másodperccel töltött be gyorsabban a játék PC-n, mint PS5-ön, és ehhez Core i9-12900K processzorra is szükség volt. Ugyanez a teszt egy RYZEN 5 3600-as processzor mellett már nem 4,1, hanem 6,8 másodperces betöltést mutatott, azaz sokat számít, milyen CPU foglal helyet a rendszerben. A SATA SSD-vel és Core i9-12900K processzorral végzett teszt mellett 10,2 másodperces betöltés mutatkozott, ami gyorsabb, mint amit DirectStorage nélkül tudott egy NVMe alapú RYZEN 5 3600-as rendszer.
Noha a DirectStorage 1.1 a SATA SSD mellett is működött, a betöltési idő egy ugyancsak DirectStorage technológiát használó NVMe SSD-hez képest így is kétszer lassabb – hiába Core i9-12900K alapú mindkét konfiguráció. A DirectStorage Windows 10 alatt is működik, igaz, mivel a Windows 11 adattároló-kezelő rendszere fejlettebb, a Windows 10 alatt elérhető előny szerényebb. Míg Windows 11 alatt NVMe SSD-vel és DirectStorage támogatással 6,8 másodperc a betöltési idő, addig Windows 10 alatt ugyanez már 8,8 másodperc, azaz két másodpercet vesztünk.
Ez összességében nem tragédia, ám ahogy a DirectStorage elkezd majd terjedni, a játékkészítők egyre jobban tömörített állományokat készíthetnek a megnövekedett I/O teljesítmény miatt, ez pedig idővel egyre nagyobb hátrányt jelenthet Windows 10 alatt a gyengébb DirectStorage teljesítmény következtében. Ugyanis a DirectStorage 1.1 jóvoltából a GPU gyors kitömörítési sebességét kamatoztatva kisebb állományok készülhetnek majd a nagyobb fokú tömörítés miatt a nem is oly távoli jövőben, amelyeknél egyre fontosabbá válik a DirectStorage támogatás megléte annak érdekében, hogy a játék betöltési ideje továbbra is gyors maradjon. A GPU-k fejlődni fognak, egyre nagyobb teljesítménnyel tudják kiszolgálni a DirectStorage technológiát használó rendszereket, ami a hatékonyabb tömörítéshez és a technológia egyre fontosabbá válásához vezethet.
A Forspoken után további címek is megkaphatják a DirectStorage támogatását. A legfrissebb hírek szerint hamarosan a Diablo IV is csatlakozik a sorba, de újabb játékok bejelentésére is számíthatunk, azaz a technológia idővel egyre nagyobb teret hódíthat magának és egyre fontosabbá válhat a támogatása.