Vánoce, eGPU, streamování her a naše LAN party pro chudé

Vánoce jsou jedním z mála období, kdy se nechám od bratra překecat k hraní her po síti. Je to téměř tradice, protože za posledních deset let se to stalo už aspoň třikrát. Vzhledem k tomu, že se tentokrát nedalo moc dělat (minimálně ne ty věci, co bych chtěl) kromě „promořování“ v kruhu rodinném, svolil jsem k hraní. Jen se ukázalo, že ty naše staré vykopávky už nejsou tak vhodné na moderní hry, takže bylo potřeba hledat alternativní řešení…

egpu-a-streaming-01

Když mluvím o hraní po síti, jde vlastně v poslední dekádě téměř výhradně o hraní her ze série Borderlands. Právě tahle série je totiž stvořená pro kooperativní hraní celého příběhu, což je můj nejoblíbenější typ multiplayeru už od Dooma a Duke Nukem 3D.

Od prvního dílu už uběhla celá dekáda. Tehdy jsme měli pořádně našlapané stroje – všichni tři sourozenci jsme měli nějaké stolní profesionální pracovní stanice vybavené hi-end komponentami. Já hrál na dvouprocesorovém HP Z600, jeden bratr měl DELL Precision a druhý Apple Mac Pro – všichni s pořádnou grafikou a desítkami GB operační paměti. Od té doby se stalo akorát to, že stolní počítač už zůstal jen jednomu z nás a je to ten samý, který měl i tenkrát. Jen se v něm o pár let později vyměnila grafická karta. Můj nejvýkonnější notebook byl Acer Aspire V15 Nitro s GeForce GTX 860M. Prostě žádná sláva.

Další díly a datadisky bratrův počítač zvládal bez problému a já si vždycky na Vánoce tahal výkonné herní notebooky. Jenže Borderlands 3 je jednak o dost náročnější a jednak já nic tentokrát nesehnal (tedy jo, Lenovo ThinkPad L14 s integrovanou grafikou od AMD).

eGPU box a NVIDIA GeForce RTX 2070 SUPER

Na mém notebooku hra běžela průměrně v benchmarku 26 fps v 1920×1080 na low, takže žádná velká sláva. Bratr měl ve stejném nastavení (s výhodou DirectX 12) tuším 32 fps. Nebylo to o moc lepší, ale aspoň dosáhl na 30 fps s vertikální synchronizací. Bylo tedy jasné, že já to u sebe na notebooku hrát nebudu – sice to pořád bylo hratelné a taky jsem mohl snížit rozlišení, jenže jsem už prostě rozmazlený hi-end hardwarem.

Vzal jsem tedy pracovní notebook HP EliteBook 840 G5 (i5-8350U, 32GB RAM, grafika Intel UHD620) a rozhodl se, že z něj udělám herní počítač jednoduše tím, že k němu externě připojím výkonnou grafickou kartu. Dobrý kamarád naštěstí po dřívějších diskuzích se mnou nedávno sehnal RTX 2070 a kompletní externí box Sapphire GearBox Thunderbolt 3 eGFX pro svůj překlopný DELL XPS13 a rovnou mi to půjčil, protože stejně moc nehraje.

Tenhle box od Sapphire je moc pěkně řešený. Po updatech firmware už je schopný naplno používat všechny čtyři PCIe linky v portu Thunderbolt 3 pro potřeby grafické karty, je v něm dost místa i na výkonnější grafiky, podporuje power delivery a ještě má vzadu pár USB a gigabitový ethernet (USB Realtek). Za mě je velkou výhodou, že power delivery podporuje až 100 wattů, takže pokud notebook podporuje napájení přes Thunderbolt, může sloužit tento box jako kompletní dokovací stanice, kdy notebooku stačí připojení všeho jediným kabelem.

O levném eGPU jsem tu v minulosti už psal, ale tam se ještě tahala jediná PCIe linka buďto z vnitřku notebooku, nebo ze slotu ExpressCard. Zkoušel jsem to jen na starém ThinkPadu T400, kde byla navíc stará verze PCIe, takže ta jediná linka byla ještě docela pomalá. Reálně ta pomalá sběrnice brzdila grafiku natolik, že cokoli víc než úplně low-end karta, bylo brutálně zpomalené. Bylo to dobré jako řešení pro lepší podporu videa a možnost připojit velké externí monitory s vysokým rozlišením, které samotný notebook už nezvládá, ale pro 3D hry to bylo spíše k ničemu.

Proti tomu Thunderbolt3 má v sobě až čtyři linky PCIe 3.0, což je v podstatě stejně jako používá nižší třída notebookových dedikovaných grafik. To už by snad mohlo stačit. Jenže čtyři linky nejsou zapojené u každého notebooku s tímto rozhraním – třeba jako u mého EliteBooku, kde jsou zapojené jen dvě a má to logické vysvětlení. Důvodem je malý počet linek PCIe v úsporných procesorech. Osmá generace 15W Intel Core má pouze dvanáct linek (následující generace jich dostala šestnáct). Dvanáct linek není v takovém notebooku mnoho – to máte čtyři pro M.2 SSD, čtyři pro dedikovanou grafiku (konfigurace s integrovanou mají na tištěném spoji místo, kde chybí grafický čip i jeho paměti, ale ty čtyři linky tam vedou tak jako tak), pak je ještě potřeba jedna linka pro slot M.2 s Wi-Fi a jedna linka pro slot M.2 s volitelným bezdrátovým modemem.

V notebooku je tedy využito deset linek bez započítání Thunderboltu. Je tedy jasné, že víc než dvě už dostat nemohl. Tohle mimochodem vysvětluje, proč úsporné notebooky (jako kamarádovo XPS13), které nemají konfigurace s dedikovanou grafikou, mají větší šanci na plné osazení Thunderboltu.

egpu-a-streaming-02

Docela jsem se bál, že hra moc dobře na mé sestavě nepoběží, protože dvě linky PCIe už možná nejsou dostatečné a 15W čtyřjádrový procesor taky není žádné žihadlo. Nakonec jsem byl příjemně překvapen, protože hra běžela naprosto stabilně 60 fps (VSync) při nativním rozlišení monitoru (2560×1440) a mixem středních a vyšších detailů. Dvě linky PCIe problémem nakonec vůbec nebyly – hra si umí nová data plynule donačítat, a pokud to trvá déle (například při přesunu do nové mapy), klidně nejdřív zobrazuje textury a modely s nižší úrovní detailů a postupně je nahrazuje, jak se načítají detailnější verze. Zvolená grafická karta navíc má 8 GB vlastní paměti, takže co už se tam nahraje, to tam může dlouho zůstat, a nedochází k problémům, kdy se neustále v malé paměti musí během vykreslování přehazovat data. V případě eGPU vnímám velkou paměť grafické karty jako výhodu.

Větším omezením se ukázal být slabý procesor – při hraní běžel neustále na stabilních 100 %, takže se z něho už nedalo vydolovat ani o trošku více výkonu. Reálně by ta RTX 2070 SUPER měla zvládnout tuto hru na plné detaily (ultra) přes 60 fps, což se u mě nestalo (bylo jen ~40 fps). Jsem přesvědčený, že brzdou byl právě pomalý procesor. Zajímavé je, že třeba Cyberpunk 2077 běží na této sestavě dobře v 1920×1080 (AI upscale na 2560×1440) na RTX/Ultra – přitom všichni tvrdí, jak je to děsně neoptimalizovaná hra.

Kdybych měl shrnout praktické nevýhody, napadají mě dvě. První se týká samotného boxu, jehož zdroj jemně píská… a já to bohužel ještě slyším. Řekl bych, že by se to možná nedělo, kdyby byla uvnitř nějaká slabší grafika. Stejně tak je možné, že jiný kus to nedělá. Otázkou je, co by s tím udělala reklamace, ale to bude spíš dotaz na kamaráda, jestli do toho půjde. Já to vyřešil dlouhým propojovacím kabelem a umístěním boxu za stůl tak, aby to zvuky vyšších frekvencí odstínilo.

Druhá nevýhoda se týká obecně chování Windows při použití více grafických čipů, když monitory nejsou připojeny jen k jednomu z nich (to se týká i řady herních notebooků s NVIDIA Optimus). Externí monitor jsem měl zapojený přímo do GeForce, a abych získal opravdu plný výkon (tj. stabilních 60 fps, kde není pravidelné drobné zaškubávání), musel jsem se odhlásit/přihlásit do Windows s tím, že už byla GeForce nastavena jako primární (jediné) zobrazovací zařízení. Pak se integrovaný Intel vůbec nepoužil (0 MB využité paměti) a kompozitor oken Windows běžel na GeForce. Pokud se grafika připojila a výstup se přepnul na ni až po přihlášení, bylo vidět, že se nejspíš obraz kopíruje mezi grafikami tam a zpět a obraz chvílemi nebyl úplně plynulý.

Vtipné je, že kdybych připojil externí monitor do HDMI výstupu přímo na notebooku a nechal GeForce posílat jen obraz hry po PCIe, tento problém bych vůbec neměl (sběrnice je full-duplex a směrem z karty do počítače není přenosové pásmo tak vytížené, takže kupodivu ani neklesne výkon). Jenže já chtěl vždy jen přijít k bratrovi a zapojit notebook jediným kabelem, takže jsem radši vždy absolvoval odhlášení/přihlášení.

Mimochodem, pokud se přihlásíte s GeForce jako primární a následně ji odpojíte, žádný problém tímto opačným směrem není. Absence GeForce donutí Windows přesunout vše na integrovanou grafiku. Mile mě překvapilo, že nemusíte systému ani dát vědět, že grafiku odpojíte. Stačí vytrhnout kabel a vše se stane během dvou sekund samo. Žádné pády aplikací a podobně – jen se přepne výstup, jako by šlo o kabel od monitoru.

Streamování hry ze serveru

Pro sebe jsem si výkonný počítač zajistil, ale po jednom dni hraní jsem si říkal, že by se možná dalo něco vymyslet i pro bratra, aniž bychom museli něco kupovat. Pak mi v hlavě uzrál nápad, že bych si mohl vypomoct hardwarem z práce. Já tu o své práci prakticky nepíšu, protože ty nejzajímavější věci, které řeším, jsou všechny pod NDA a na veřejnost se dostávají třeba i po několika letech. Nicméně v rámci toho, že jsem zaměřený na superpočítače, výpočetní clustery a aplikace využívající grafické karty, mám i přístup k trochu silnějším počítačům – jen to nejsou ty běžné počítače (desktopy, notebooky…).

Z práce jsem si vypůjčil server, který používám na testování různých typů VDI (virtual desktop infrastructure) a rozběhávání deep learning frameworků, a občas jej na školeních rozebírám a vysvětluju, jak se taková věc správně konfiguruje. Kdysi jsem ho objednal s dvěma dvanáctijádrovými Xeony Gold 6126, 192GB RAM (12x16G, abych měl na každém procesoru využitých všech šest paměťových kanálů) a dvěma grafikami NVIDIA Tesla P4 (8GB). Celé to stálo do půl miliónu korun.

egpu-a-streaming-03

NVIDIA Tesla P4 je low-profile, jednoslotová, pasivně chlazená grafika se stejným čipem, jako má GeForce GTX 1080 (2560 CUDA jader), ale má omezené TDP a s tím i takty. Parametrově více méně odpovídá tomu, co nabídne v některých herních noteboocích GeForce GTX 1080 Max-Q. Tím, že je malá a pasivně chlazená, by sice mohla vypadat jako vlhký sen skládačů HTPC, nicméně ona je tak malá a pasivně chlazená jen díky tomu, že na ni žene vzduch šest velmi výkonných ventilátorů točících se rychlostí až 20 tisíc rpm. Navíc jako každá grafika řady NVIDIA Tesla nemá fyzické výstupy na připojení monitoru. Je tedy jasné, že server nebude přímo použít jako „desktop replacement“. A vlastně by to ani nebylo vhodné s ohledem na hlučnost, které umí dosáhnout.

Tím, že server už předtím sloužil na VDI, zdálo by se, že ho stačí přinést domů, nainstalovat na něj hru a může se hrát. Jenže všechno se začalo komplikovat, čím víc jsem nad tím přemýšlel – operační systém VMware vSphere i virtuální počítače s Windows totiž nejsou uložené přímo na serveru, ale na výkonném diskovém poli mnohem větším a těžším než server (spolu je to pak propojeno optikou přes 16Gb/s FibreChannel). Diskové pole jsem domů rozhodně tahat nechtěl. I kdybych ho vzal, rázem bych ještě řešil, že musím někde rozběhat Active Directory, SQL server, ale i třeba NVIDIA GRID Licensing Server. Prostě enterprise infrastruktura je v tomto hrozně překomplikovaná tak nějak od počátku věků.

Došel jsem k závěru, že do serveru přidám lokální SSD, prdnu na něj Windows Server 2019 na přímo (bare metal) a vyřeším to všechno bez virtualizace, aby to zabralo, co nejméně času. Výhodou je, že hru jsme si oba koupili přes Steam, který má funkci Steam Remote Play, takže je v něm vlastně streamování již zahrnuté automaticky a ještě je předkonfigurované pro hraní her (odpadá tedy problém s relativním pozicováním myši a je snaha o minimální latenci).

Steam Remote Play funguje tak, že klonuje obrazovku počítače (případně jen okno hry), takže v případě notebooku/desktopu během vzdáleného hraní uvidíte obraz hry i na lokálních periferiích (a klávesnicí i myší můžete do hry zasahovat na obou místech). Nainstaloval jsem tedy na server VNC, abych mohl nastavovat rozlišení a připravit Steam, resp. hru (tohle nejde pomocí Vzdálené plochy, protože ta vytváří separátní virtuální obrazovku). Jenže tady přišel problém, virtuální fake výstup grafické karty (monitor „NVIDIA VGX“) nabízí maximálně rozlišení 1280×720, pokud není v ovládacím panelu NVIDIE nastavená adresa validního licenčního serveru s platnými licencemi. Steam Remote Play je tímto omezen a neumožňuje nastavit rozlišení vyšší, než co nabídne grafický čip a monitor.

egpu-a-streaming-05

Provizorní datacentrum v kumbálu

Už jsem přemýšlel, že bych to nakonec rozchodil standardní cestou, ale ten licenční server je taková dost labilní záležitost se spoustou chyb. Hledal jsem tedy způsob, jak to obejít – něco, co by si vytvořilo vlastní virtuální obrazovku, která se umí na grafickou kartu napojit a má vlastní pravidla. V tom měl napadlo, že jsem dříve používal univerzální dokovací stanici DELL D3100 poháněnou čipem DisplayLink a připojenou pomocí USB 3.0. DisplayLink sice uvádí, že má ovladače jen pro klientské verze Windows (7, 8.1, 10), ale někde jsem si našel drobnou informaci, že tento ovladač je možné nainstalovat i do serverových verzí, jen to nikdo netestuje. Instalace naštěstí proběhla úplně korektně a já si mohl připojit k serveru lokálně monitor, který se začal tvářit, jako by byl připojený Tesle P4 (server má taky výstup VGA přímo na sobě, ale ten vede do grafiky Matrox G200e, která nepoužívá žádnou 3D ani 2D akceleraci).

Moje domněnka se potvrdila a monitor připojený přes DisplayLink skutečně není omezený rozlišením 1280×720, i když v ovladači není platná licence. Zkusil jsem hru spustit lokálně přímo na takto připojený monitor, ale přenos obrazu po USB sice běžel asi 60 fps (rozhodně grafická karta tak rychle kreslila), jenže pravidelně byla patrná drobná trhání obrazu. Steam Remote Play nicméně bere obraz přímo z paměti grafické karty a není závislý na tom, co s ním dále dělá DisplayLink. Obraz se tedy zakomprimuje pomocí h.264 pomocí hardwarových obvodů grafické karty a pošle po síti.

Pokud by někoho zajímala latence v domácí síti, tak po kabelu a přes tři jednoduché switche/routery je zpoždění 20 ms (což by se rovnalo zpoždění o jeden snímek při 50 fps). Po domácí Wi-Fi už to bylo nejlépe 25 ms, anebo horší, pokud jsem nebyl s notebookem ve stejné místnosti jako Wi-Fi AP. Při výchozím nastavení automatického datového toku byl obraz značně rozkostičkovaný datovou kompresí, jak špatný rip nějakého filmu (dle statistik šlo o 3-6 Mb/s). Po nastavení datového toku 50 Mb/s sice stále bylo patrné, že jde o kompresi h.264, ale jen v pohybu a už to nevadilo při hraní. Když se člověk ve hře na chvíli zastavil, okamžitě všechno získalo lepší detaily.

Závěrem

Nakonec jsme hru takto dohráli, aniž by si aspoň jeden z nás došel koupit normální herní počítač. Kdybych měl shrnout zkušenosti, eGPU mě velmi potěšilo. Nebýt tam to pískání ve zdroji, nemohl bych si na hlučnost stěžovat, protože ani při hraní se ventilátory moc nerozjíždí a celé zařízení by mohlo být velmi tiché. V budoucnu bych už nechtěl notebook, který Thunderbolt nemá a ideální by bylo směřovat to k modelům, které mají zapojeny všechny čtyři linky PCIe. Po této zkušenosti vidím, že sice u lepších stolních grafických karet může být pořád limitem například slabý procesor, ale propustnost sběrnice až takový problém nakonec není. Kdyby Microsoft ještě přidal nějakou zkratku, která restartuje okenní systém tak, aby se hodil na grafiku, která je zrovna primární (i když nebyla primární v době přihlášení), šlo by to používat úplně bez problémů. Třeba na to jednou Microsoft s NVIDIÍ přijdou. Kdybych měl nějaké pěkné řešení s externí grafikou, klidně bych se vzdal dedikovaného grafického čipu uvnitř notebooku. Stejně jej 99 % času nepoužívám.

egpu-a-streaming-04

Pokud jde o streamování her, byl jsem k tomu podstatně skeptičtější, ale když o takových věcech a post-PC éře bratr tak rád mluví, přitáhl jsem to vlastně jen kvůli němu, ať si vyzkouší, co tak moc chce. Přímo Borderlands 3 jsem takto hrát nezkoušel, ale zkusil jsem si svůj oblíbený automobilový simulátor BeamNG.drive (protože kde jinde by se měla projevit latence, než při kličkování 150 km/h na úzkých cestičkách). Při stabilních 20 ms jsem vůbec neměl problém hrát. Jen to chtělo přenosové pásmo alespoň 40 Mb/s, aby obraz nebyl výrazně rozkostičkovaný. Z toho mi vychází, že po lokální síti streamování asi může fungovat, ale jakmile se do toho započítá taková průměrná Wi-Fi, nebo připojení na nějaký vzdálený server v internetu, je to z mého pohledu pořád nepoužitelné. Pokusem jsem ověřil, že už streamovací latence 30-40 ms pro mě byla mimořádně obtěžující. Na druhou stranu, jsou lidé, kteří hrají na LCD televizích s latencí klidně ve stovkách milisekund.

Uvidím, co bude třeba za rok, ale možná že si příště server lépe připravím, aby v něm běžely Windows virtualizovaně a mohlo na něm hrát více lidí současně (má dvě grafiky, takže minimálně dva lidé budou mít pořád plný výkon). Jen je pak otázka, jestli by to ještě vůbec šlo označit za „LAN party“, když budou všichni hrát na jednom počítači a jejich desktopy a notebooky budou jen klientské terminály. To je ale otázka spíše pro filozofy…

Komentáře k článku

  1. 1. Zivan  11.1.2021  15:24:56

    Tusis, jak na tom jsou notebooky s Ryzenem a Thunderboltem?

  2. 2. Ladis  12.1.2021  3:58:51

    [1] AMD CPU nemá podporu Thunderboltu. Intel sice patenty uvolnil už před nějakou dobou, ale je to celkem doba od návrhu procesoru po možnost koupit si zařízení s ním (zvlášť notebookové Ryzeny jsou až v další vlně za desktopovými). Uvidíme s generací s podporou USB4.

    Mimochodem jako terminál by stačil i např. Swarmův mobil Huawei, který podporuje Android Desktop Mode. K mobilu připojíte monitor, klávesnici, myš, repráky a pustíte tam oficiální Android aplikaci „Steam Link“.

    Co se týče lagu streamování, Borderlands 3 má bohužel nevypnutelný mouse smoothing (vyhlazuje pohyb myši, ale to znamená, že čeká na další frame). Pokud tedy hrajete na LAN (lag 20 ms) a nemáte to vedle sebe, tak po 5 minutách hraní na stream lag zapomenete.

  3. 3. addis  12.4.2021  14:23:05

    Ad videovystup: podobna upravicka:
    https://m.zive.cz/clanky/programator-obesel-omezeni-nvidie-na-geforce-lze-virtualizovat-stejne-jako-u-drahych-karet-tesla-a-quadro/sc-3-a-209525


Napsat komentář