Przejdź do głównej zawartości

Wydajność

Uczciwa wersja: skrypty nie są najcięższe. Mapa jest.

[the_apocalypse_project] to konwersja całej mapy na bazie Los Santos, około 166 ymap i jedno MLO. Wiele jej ymap ma zasięgi streamingu rzędu kilometrów, dużo większe niż propy w środku. Silnik uważa więc, że połowa mapy jest w zasięgu naraz, i wszystko ładuje się w tej samej chwili wokół spawnującego gracza. Stąd bierze się presja na pule.

Prawdziwa naprawa jest w mapach: zawęzić rozdęte zasięgi w CodeWalkerze, z bezpiecznym zapasem. Warte więcej niż wszystkie linie pooli poniżej.

server.cfg podnosi część pooli przez increase_pool_size (nowoczesny sposób, gameconfig.xml nie jest już respektowany):

increase_pool_size "Building" 500
increase_pool_size "StaticBounds" 2000
increase_pool_size "EntityDescPool" 5000
increase_pool_size "TxdStore" 8000
increase_pool_size "FragmentStore" 4000
increase_pool_size "fragInstGta" 800
increase_pool_size "Object" 800
# + interior/portal/occlusion, LightEntity, AttachmentExtension

Wartości są celowo skromne, nie maksymalne. Maksimum kosztuje pamięć u każdego klienta, a Building znacznie powyżej ~500 powoduje własne problemy.

Zostaw set onesync_population false. Ambientowa populacja zapełnia dokładnie te pule, których nie da się podnieść.

Limity zombie same się już zmniejszają:

  • czas klatki serwera powyżej Zombies.Net.perfBudgetMs (70) tnie limit, aż do perfMinFactor
  • łączna liczba encji między entitySoft a entityHard (1400 / 1900) też go tnie, a powyżej hard znikają najdalsze szwendacze
  • gracz poniżej fpsLow FPS dostaje mniej szwendaczy w pobliżu

Dostrój perfBudgetMs na podstawie średniej klatek, którą /znet pokazuje na bezczynnym serwerze. Jeśli twój serwer jest po prostu wolniejszy, domyślna wartość będzie ciągle ucinać zombie.

Po stronie klienta Streaming.PoolGuard.clientPedLimit (180) zatrzymuje nowe pedy szwendaczy, zanim pula pedów się zapełni, a awaryjne czyszczenie usuwa najpierw zwłoki, potem najdalszych szwendaczy.

resmon 1 -- client, per resource ms
profiler record 500 -- then profiler view
/znet -- zombie caps and server frame
/pools -- client ped pool

Nie ma /bsperf, resource’y nie trzymają wewnętrznych liczników. Użyj resmon.

W październiku przejrzałem każdy skrypt klienta. Prawie każda pętla na klatkę jest już ograniczona (w bezczynności śpi 250-1000 ms). Te nieliczne, które zawsze chodzą co klatkę, to rzeczy potrzebne silnikowi w każdej klatce (ukrywanie części HUD, gęstość populacji, światła blackoutu). Jeśli zobaczysz któryś z naszych wysoko w resmon w bezczynności, to błąd, daj mi znać.