İçeriğe geç

Performans

Dürüst versiyon: ağır olan scriptler değil. Harita.

[the_apocalypse_project], Los Santos’un üstüne tüm haritayı kapsayan bir dönüşüm; yaklaşık 166 ymap ve bir MLO. Ymap’lerinin çoğunun streaming extent’leri kilometrelerce, içindeki proplardan çok daha büyük. Bu yüzden motor haritanın yarısının aynı anda menzilde olduğunu sanıyor ve her şey spawn olan oyuncunun etrafında aynı anda yükleniyor. Pool baskısı buradan geliyor.

Gerçek çözüm haritalarda: şişirilmiş extent’leri CodeWalker’da güvenli bir payla daraltmak. Aşağıdaki tüm pool satırlarından daha değerli.

server.cfg bazı pool’ları increase_pool_size ile artırır (modern yol, gameconfig.xml artık dikkate alınmıyor):

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

Bunlar bilerek ılımlı, maksimum değil. Maksimuma çıkarmak her istemcide bellek yer ve Building ~500’ün çok üstünde kendi sorunlarını çıkarır.

set onesync_population false olarak kalsın. Ortam nüfusu tam da artıramadığın pool’ları doldurur.

Zombi limitleri zaten kendiliğinden düşüyor:

  • sunucu kare süresi Zombies.Net.perfBudgetMs (70) üstüne çıkarsa limit perfMinFactor’a kadar kesilir
  • toplam entity sayısı entitySoft ile entityHard (1400 / 1900) arasındaysa limit kesilir, hard’ın üstünde en uzaktaki yürüyenler gider
  • fpsLow FPS altındaki bir oyuncunun yakınında daha az yürüyen olur

perfBudgetMs’i boştaki bir sunucuda /znet’in gösterdiği kare ortalamasına göre ayarla. Sunucun sadece daha yavaşsa, varsayılan değer sürekli zombi keser.

İstemci tarafında Streaming.PoolGuard.clientPedLimit (180), ped havuzu dolmadan yeni yürüyen ped’lerini durdurur ve acil temizlik önce cesetleri, sonra en uzaktaki yürüyenleri kaldırır.

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

/bsperf yok, resource’lar dahili zamanlayıcı tutmuyor. resmon kullan.

Ekim’de her istemci scriptini gözden geçirdim. Neredeyse her kare başına döngü zaten kısıtlı (boştayken 250-1000 ms uyur). Her zaman kare başına çalışan birkaçı, motorun her karede ihtiyaç duyduğu şeyler (HUD parçalarını gizleme, nüfus yoğunluğu, elektrik kesintisi ışıkları). Boştayken bizim bir scriptin resmon’da yüksek olduğunu görürsen, bu bir hatadır, bana söyle.