Перейти к содержимому

Производительность

Честная версия: тяжёлые не скрипты. Тяжёлая карта.

[the_apocalypse_project] это конверсия всей карты поверх Лос-Сантоса, около 166 ymap и один MLO. У многих её ymap границы стриминга в километры, намного больше, чем props внутри. Поэтому движок считает, что половина карты в зоне видимости одновременно, и всё подгружается в один момент вокруг появляющегося игрока. Отсюда и нагрузка на пулы.

Настоящее решение в самих картах: сузить раздутые границы в CodeWalker, оставив безопасный запас. Это ценнее всех строк с пулами ниже.

server.cfg увеличивает некоторые пулы через increase_pool_size (современный способ, gameconfig.xml больше не учитывается):

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

Они умеренные специально, не максимум. Максимум стоит памяти на каждом клиенте, а Building сильно выше ~500 создаёт свои проблемы.

Оставь set onesync_population false. Фоновое население заполняет как раз те пулы, которые нельзя увеличить.

Лимиты зомби уже сами уменьшаются:

  • время кадра сервера выше Zombies.Net.perfBudgetMs (70) режет лимит, вплоть до perfMinFactor
  • общее число сущностей между entitySoft и entityHard (1400 / 1900) тоже режет его, а выше hard пропадают самые дальние ходячие
  • у игрока с FPS ниже fpsLow рядом меньше ходячих

Подбери perfBudgetMs по среднему времени кадра, которое показывает /znet на простаивающем сервере. Если твой сервер просто медленнее, значение по умолчанию будет постоянно срезать зомби.

На стороне клиента Streaming.PoolGuard.clientPedLimit (180) останавливает новых педов ходячих до заполнения пула педов, а аварийная чистка сначала убирает трупы, потом самых дальних ходячих.

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

Команды /bsperf нет, ресурсы не ведут внутренних таймеров. Используй resmon.

В октябре я прошёл по всем клиентским скриптам. Почти каждый цикл на кадр уже ограничен (в простое спит 250-1000 мс). Те немногие, что всегда идут каждый кадр, нужны движку каждый кадр (скрытие частей HUD, плотность населения, свет блэкаута). Если увидишь, что один из наших высоко в resmon в простое, это баг, скажи мне.