RE:NODE

Dimenzování13 min čtení

CPU herního serveru: taktovací frekvence, nebo jádra

Proč o chodu většiny herních serverů rozhoduje jedno rychlé jádro, kolik vCPU která hra doopravdy využije, co znamená procento CPU a jak dokázat, že limitem je procesor.

1 čtenář

Téměř každý herní server vede simulaci v jednom vlákně, takže požadavek na CPU není „kolik jader“, ale „jak rychlé je jedno jádro a mám ho k dispozici, když ho potřebuju“. Typický server potřebuje jedno rychlé jádro pro hlavní smyčku plus půl až jedno jádro navíc na ukládání, síť a garbage collection - proto 1,5 až 2 vCPU stačí většině her a proto 8 pomalých jader prohraje s 2 rychlými pokaždé. Výjimky jsou skutečné, ale krátké: obří továrny ve Factoriu, silně skriptované servery Arma a FiveM a modované survival hry, které na pozadí generují svět. Tento článek vysvětluje, proč hlavní vlákno rozhoduje o všem, uvádí realistický počet jader pro jednotlivé hry a ukazuje, jak dokázat, že CPU je tvůj limit, než za něj zaplatíš víc.

Práci dělá hlavní vlákno#

Herní server je smyčka. V každém ticku přečte vstupy hráčů, pohne každou entitou, vyhodnotí zásahy, spustí skripty a pluginy a pošle každému klientovi snímek toho, co se změnilo. Pak spí do dalšího ticku. Smyčka běží pevnou rychlostí a každá rychlost dává serveru pevný rozpočet času na tick:

Hra nebo engineTick nebo frekvence aktualizacíRozpočet na tick
Minecraft20 TPS50 ms
Factorio60 UPS16.7 ms
Counter-Strike 2, Source hry64 tick15.6 ms
Source hry na 128 ticků128 tick7.8 ms
Terraria60 aktualizací za sekundu16.7 ms

Důležitou vlastností té smyčky je, že je sekvenční. Pohyb entity B závisí na tom, kde skončila entita A, obsluha události v pluginu běží až po události, kterou obsluhuje, a snímek se sestavuje po dokončení všeho ostatního. Enginy mohou a dělají odsouvat vedlejší úlohy do jiných vláken - načítání chunků, požadavky na hledání cesty, kompresi, zápisy na disk - ale samotná simulace se musí odehrát popořadě, v jednom vlákně, v mezích rozpočtu. Když se nevejde, tick je pozdě a hráči pozdní tick cítí jako rubber-banding, zpožděné zásahy a dveře, které se otevřou o vteřinu později, než stiskli klávesu. Jak který engine tick hlásí, rozebírá co tick rate doopravdy znamená.

To je celý důvod, proč taktovací frekvence váží víc než počet jader. Jádro o 30 % rychlejší dokončí každý tick o 30 % dřív. Druhé jádro pomůže jen s prací, která už byla mimo hlavní vlákno, a jakmile ta práce má kde běžet, třetí a čtvrté jádro zůstávají nevyužité.

Co ti vCPU a procento CPU doopravdy dávají#

Hosting prodává CPU dvěma způsoby a znamenají různé věci.

vCPU ve virtuálním stroji je obvykle jedno hardwarové vlákno. Na procesoru s hyper-threadingem nebo SMT nabízí každé fyzické jádro dvě vlákna a dvě zaneprázdněná vlákna na jednom jádru sdílejí jeho výkonné jednotky, takže každé dostane znatelně míň než celé jádro. Někteří hostitelé prodávají jedno vCPU jako jedno fyzické jádro a někteří jako jedno vlákno; z označení se to nepozná.

Procento CPU je způsob, jakým ho vyjadřuje Pterodactyl a většina kontejnerových panelů. 100 znamená čas jednoho jádra, 150 jedno a půl, 250 dvě a půl. Vynucuje to účtování CPU v jádře, takže server na limitu je do dalšího účtovacího období škrcen. Na RE:NODE je ten limit tvrdé škrcení na podíl, který sis koupil: server může využít přesně tolik a ne víc, a server na 100 % svého podílu je pomalý, ne rozbitý, a nikdy se za to nepozastavuje.

Praktický důsledek pro hru: limit 1,5 vCPU je jedno plné jádro pro hlavní vlákno plus půl jádra na všechno ostatní. Limit 2,5 vCPU je jedno plné jádro plus jedenapůl na všechno ostatní. Ani jedno nezrychlí hlavní vlákno víc, než jedno jádro dokáže. Pokud hlavní vlákno tvého serveru už dostává celé jádro, vyšší tarif pomůže jen tehdy, když bylo „všechno ostatní“ stlačené - což se stává hlavně při ukládání, při generování světa a když běží garbage collector.

Sdílené CPU a hluční sousedé pokrývá druhou polovinu otázky: jestli je tvůj podíl rezervace, nebo zbytek, a jak zevnitř serveru změřit steal time.

Kolik jader která hra doopravdy využije#

Jsou to realistické hodnoty pro běžnou skupinu na čistém nebo mírně modovaném serveru. „Hlavní vlákno“ je práce, kterou nejde rozdělit; „vedlejší práce“ je to, co těží z druhého jádra.

HraRozumné vCPUK čemu je podíl navíc
Minecraft (Paper)1.5-2Asynchronní načítání chunků, GC, síť
Minecraft (velký modpack)2-3Generování světa, vlákna modů, GC
Valheim1.5-2Ukládání a síť
Terraria0.75-1Skoro nic; smyčka je lehká
Counter-Strike 2, TF21.5-2Pluginy, GOTV, změny map
Factorio1.5-2.5Některé vícevláknové části aktualizace
Rust2-4Ukládání, GC, síťování entit
7 Days to Die2-3Meshování chunků, AI, ukládání
Project Zomboid2-3Java GC, streamování světa
DayZ2-3Server FPS pod zátěží
Arma 32 plus headless klientiAI přesunutá do jiných procesů
FiveM1.5-3Počet resourců, servírování assetů
Palworld, The Front, Satisfactory2-3Vedlejší vlákna Unreal enginu

Vyčnívají tři věci.

Zaprvé, spodek tabulky není „slabý“. Terraria a Counter-Strike 1.6 opravdu využívají zlomek moderního jádra. Kupovat jim víc znamená kupovat nečinnost.

Zadruhé, hry v horní části tabulky tam jsou proto, že jejich vedlejší práce je velká, ne proto, že by simulace škálovala. Server Rustu zapisuje v intervalech save o desítkách či stovkách megabajtů a nad velkou spravovanou haldou spouští garbage collector; obojí chce jádro, které není hlavní vlákno. 7 Days to Die staví meshe chunků a provádí spoustu hledání cest pro AI zombíků. Žádná z nich nedostane rychlejší tick z pátého jádra.

Zatřetí, dvě hry řeší limity CPU spouštěním víc procesů místo víc vláken. Arma 3 přesouvá AI na headless klienty - samostatné herní procesy, které se připojují k serveru jako hráči a přebírají skupiny AI - takže mise se stovkami AI jednotek využije tři nebo čtyři jádra jako tři nebo čtyři hlavní vlákna. Nastavení pokrývá headless klienti pro Arma 3. Don't Starve Together provozuje povrch a jeskyně jako dva procesy serveru, takže cluster s jeskyněmi jsou dvě hlavní vlákna sdílející jedno přidělení.

Rychlost jednoho jádra: co porovnávat#

Pokud vybíráš hardware pro VDS nebo porovnáváš hostingy, porovnávej výkon jednoho vlákna, ne počet jader ani celkové skóre benchmarku.

  • Skóre benchmarků jednoho vlákna (Geekbench single-core, PassMark single-thread, Cinebench single-core) jsou nejbližší náhrada času ticku. Vícejádrové skóre násobí špatné číslo.
  • Boost frekvence váží víc než základní, ale jen když se udrží. Desktopový procesor, který jedno jádro celý den drží na plném boostu, se chová úplně jinak než hustý serverový, jehož frekvence všech jader pod zátěží je o gigahertz nižší.
  • Cache pro simulace záleží. Hry každý tick procházejí velké seznamy entit a chunků; procesor s větší cache na jádro drží víc z toho seznamu blízko, a proto některé desktopové procesory s velkou cache v herní zátěži předčí serverové čipy s vyšším počtem jader.
  • Generace záleží. Nedávné desktopové jádro při stejné frekvenci zvládne na tick znatelně víc než jádro o pět generací starší. Samotná frekvence mezi architekturami srovnatelná není.

Upřímná odpověď pro většinu lidí, kteří si pronajímají herní server, je, že přesný procesor se nedozvíš a nemůžeš si ho vybrat, takže benchmark, kterému můžeš věřit, je čas ticku tvého vlastního serveru pod tvou vlastní zátěží. Na RE:NODE je jediný uvedený model procesoru Intel i9-9900K v řadě VDS; sdílené herní uzly model uvedený nemají a níže popsané metody měření ticku fungují na všech stejně.

Jak dokázat, že limitem je CPU#

Než něco koupíš, ověř, že vyčerpané je opravdu CPU. Otázka paměť versus CPU je nejčastější chyba při dimenzování a dlouhou verzi má článek CPU, nebo RAM: co tvůj server brzdí.

Přečti si čísla ticku z hry samotné

Každý seriózní herní server hlásí, jak dlouho jeho ticky trvají. Zjisti, kde to dělá ten tvůj:

  • Minecraft: /mspt na Paperu nebo /spark tps. MSPT nad zhruba 40-45 znamená server blízko limitu; TPS pod 20 znamená, že je za ním.
  • Factorio: číslo je UPS, které připojený klient zobrazí přes ladicí volby na F4. Továrna, která nedrží 60 UPS, je podle definice vázaná na CPU a zpomalují se s ní všichni hráči.
  • Rust: server.fps hlásí aktuální snímkovou frekvenci serveru. Zdravý server běží výrazně nad 30; ten, který při raidech klesá k jednociferným hodnotám, nemá čas v hlavním vlákně.
  • Arma 3: #monitor 1 z admin klienta vypisuje server FPS a paměť každou sekundu. Server FPS pod asi 20 je místo, kde AI a vozidla viditelně trpí.
  • Source hry: stats v konzoli serveru ukazuje CPU, provoz dovnitř a ven, uptime a FPS.
  • FiveM: server varuje ve vlastní konzoli, když tick trvá příliš dlouho, a profiler record zachytí, kam čas odešel.

Čti graf proti limitu

Graf CPU v panelu se měří vůči přidělení. Tři tvary, tři významy:

  1. Plochý na limitu, zatímco hráči si stěžují. Přidělení je strop. Vyšší tarif pomůže, pokud je co absorbovat jako vedlejší práci.
  2. Hluboko pod limitem, zatímco hráči si stěžují. Hlavní vlákno je vytížené na zhruba jedno jádro, nebo je špatně něco jiného. Větší přidělení nepomůže; pomůže méně práce na tick.
  3. Špičky v pravidelných intervalech. Ukládání, plánované úlohy nebo zálohy. Než cokoli změníš, ověř, jestli špičky odpovídají hlášením o lagu.

Dívej se na vlákna, ne na proces

Na VDS nebo vlastním stroji vidíš každé vlákno zvlášť:

bash
$ top -H -p "$(pgrep -f RustDedicated)"$ pidstat -t -p "$(pgrep -f RustDedicated)" 1

top -H vypíše vlákna místo procesů. Pokud jedno vlákno sedí na 98-100 % a ostatní jsou téměř nečinná, je to hlavní vlákno a to je strop. pidstat -t (z balíčku sysstat) dává stejný pohled jako průběžný log, který můžeš nechat běžet celý rušný večer. Název procesu nahraď binárkou své hry. Obrázek jednoho vlákna podrobněji vysvětluje čtení využití CPU herního serveru a stranu panelu pokrývá čtení grafu zátěže serveru.

Co zvyšuje využití CPU bez nárůstu hráčů#

Většinu problémů s CPU vytvářejí lidé, kteří server provozují, ne lidé, kteří na něm hrají. V pořadí podle toho, jak často se objevují:

  • Pluginy a skripty. Každá obsluha události pluginu pro Minecraft, každý plugin SourceMod, každý resource ve FiveM se smyčkou while true a krátkým čekáním běží v hlavním vlákně. Jediný špatně napsaný může stát víc než třicet hráčů. Na to existují profilery - spark, profiler FiveM, vlastní profiler SourceModu - a viníka pojmenují.
  • Entity. Farmy mobů, hromady itemů, deployables v Rustu, populace zombie v Zomboidu, tamed zvířata v ARK, horda v 7 Days to Die. CPU škáluje s tím, co je třeba každý tick aktualizovat, a počty entit mezi restarty nenápadně rostou.
  • Generování světa. Prozkoumávání nového terénu je nejdražší věc, kterou většina survival a sandbox serverů dělá. Předgenerování mapy (Chunky pro Minecraft, mapy Rustu s pevným seedem vygenerované jednou) přesune tuto cenu do klidné hodiny.
  • Vzdálenost simulace. simulation-distance v Minecraftu, ServerMaxAllowedViewDistance v 7 Days to Die, síťová bublina v DayZ - každé nastavení, které rozšiřuje aktivní oblast, znásobuje práci na tick.
  • Samotný tick rate. Provoz Source hry na 128 ticků půlí rozpočet na tick oproti 64. Pro kompetitivní server CS2 je to smysl věci; pro nezávazný server je to CPU utracené za nic.

Poznámky k jednotlivým hrám, které stojí za to znát#

Minecraft. Paper přesouvá načítání chunků a část práce s osvětlením mimo hlavní vlákno, a proto server na Paperu využívá víc než jedno jádro, aniž by o to žádalo jakékoli nastavení. Folia jde dál a rozděluje svět na regiony, které tikají v samostatných vláknech, ale rozbije většinu pluginů; je pro velké servery, které přerostly všechno ostatní. Pro všechny ostatní je místem, kde se CPU vyhrává, optimalizace Paperu.

Factorio. Aktualizace Factoria je deterministická a synchronní: každý klient spouští stejnou simulaci, takže server je rychlý jen tak, jak je rychlý nejpomalejší stroj, který musí stíhat. Části aktualizace byly v nedávných verzích paralelizovány, ale velké továrny zůstávají vázané na jedno jádro. UPS vrací méně entit, méně pásů s itemy a méně inserterů kontrolujících prázdné truhly. Podrobnosti má mody Factoria a výkon UPS.

Rust. Cena Rustu je počet entit. Server v den wipu a stejný server o šest dní později jsou dva různé stroje, protože každý stavební blok a deployable je entita, kterou server musí přenášet každému v okolí. CPU roste během wipového cyklu spolu s pamětí.

Střílečky. Counter-Strike 2, TF2 a Insurgency: Sandstorm načtou pevnou mapu a drží ji v paměti; jejich cena je práce na tick pro každého hráče, která je malá a stálá. Čistý server CS2 pro deset hráčů si skoro nevšimne. Co to mění, jsou pluginy, boti a GOTV.

Survival hry na Unreal enginu. Palworld, ARK, The Front, Satisfactory a Soulmask provozují dedikovaný server Unrealu, který pro síť, načítání a fyziku opravdu používá několik vláken. Jejich hlavní herní vlákno je stále limitem, když základny zvětšují, a jejich chuť na paměť obvykle stejně vynutí tarif s dostatkem CPU.

Výběr podílu CPU#

Krátký postup, který platí pro většinu her:

  1. Začni u podílu doporučeného pro hru: 1-1,5 vCPU pro lehké hry, 2 pro survival a sandbox hry, 2,5-3 pro velké modované nebo skriptované servery.
  2. Nech to týden běžet se skutečnými hráči a čti čísla ticku z hry v nejvytíženější hodině, ne průměr.
  3. Pokud je čas ticku zdravý, přestaň. Extra podíl CPU nepocítíš.
  4. Pokud je čas ticku špatný a graf v panelu je plochý na přidělení, přejdi na vyšší tarif. Na RE:NODE podíl CPU s každým tarifem roste a změna tarifu změní limit na serveru, který už máš, místo aby ho přestavěla.
  5. Pokud je čas ticku špatný a graf je pod přidělením, stropem je hlavní vlákno. Profiluj a odstraň zátěž; žádný tarif to nespraví.

Většina herních tarifů RE:NODE jde od 0,5 vCPU u nejmenších tarifů Terrarie a Counter-Strike 1.6 po 3,5 u největších survival tarifů, přičemž RAM a disk rostou spolu s tím. Výchozí bod pro každý titul v jedné tabulce dává požadavky herních serverů podle hry.

FAQ#

Používají herní servery víc jader?

Část práce ano: ukládání, načítání, síť, garbage collection a v některých enginech generování chunků nebo fyziku. Samotná simulace téměř vždy běží v jednom vlákně. Proto dvě jádra hodně pomůžou oproti jednomu a osm téměř nepomůže oproti dvěma.

Je hyper-threading pro herní servery špatný?

Není špatný, ale hyper-thread není jádro. Dvě zaneprázdněná vlákna na jednom fyzickém jádru ho sdílejí, takže hlavní vlákno umístěné vedle vytíženého souseda běží pomaleji, než by běželo samo. Na VDS je to dobré vědět při přidělování jader; na sdíleném hostingu je to součást toho, co si pronajímáš a nevidíš.

Proč můj server laguje, když CPU používá jen 40 %?

Protože procento je průměrované přes přidělení a přes interval vzorkování. Server s 2,5 vCPU, jehož hlavní vlákno je nasycené, ukazuje zhruba 40 % využitého přidělení a přitom mu úplně došel čas na tick. Čti raději číslo ticku nebo FPS z hry.

Opraví rubber-banding rychlejší CPU?

Jen pokud rubber-banding pochází z pozdních ticků. Pokud jsou čísla ticku ve hře zdravá, příčinou je latence sítě, ztráta paketů nebo, ve hrách jako Valheim, hráč se slabým připojením, který simuluje část světa. Nejdřív zkontroluj časy ticků, pak síť.

Kolik CPU potřebuje modovaný server?

Obvykle o jeden tarif víc než čistá hra a záleží na tom, co mody dělají, ne na tom, kolik jich je. Obsahové mody, které jen přidávají itemy, stojí na tick málo. Mody, které přidávají stroje, AI, automatizaci nebo skripty na tick, stojí hodně. Před přidáním velkého a po něm profiluj nástroji samotné hry.


Komentáře

Zcela anonymně: žádný účet, žádný e-mail, žádné cookie. Ukládáme jen jméno, které napíšeš, text a čas - nic dalšího. Počet odkazů je omezený a značkování se nevykresluje.

0/2000