ru en de fr pt

Производительность (Performance tests / Benchmark)

На данной странице будут собраны тесты скорости продукта и различных функций. Зачёркнутыми являются функции от которых решено было отказаться. Красными - над которыми ведется работа по ускорению. В настоящее время все расчеты игровых механик и физики ведутся лишь на процессоре

Железо: 

  • CPU 2 ядра (2300 Mhz на ядро)
  • 4Gb Ram
  • PHP 8.1 
  • SSD

Условные обозначения

  • RPS WebSocket сервера - максимальное количество принятых пакетов отправленных из игрового клиента на WebSocket сервер
  • RPS игрового сервера - рассматривается как максимальное количество самых медленных игровых механик переданных на исполнение игровому серверу которые он способен выполнить в секунду
  • RPS к игровому серверу от WebSocket сервера - максимальное количество пакетов переданных на исполнение игровому серверу из WebSocket сервера 
  • FPS игрового сервера - количество циклов (кадров/тиков) игрового сервера в секунду максимальное количество которых устанавливается администратор (в игровом движке Unity этот параметр известен как FixedUpdate time)
  • RPS HTTP сервера - количество запросов отправленных через браузер с компьютеров пользователей на сайта и админ панель , обработанных и отправленных назад клиенту
  • RPS к админ панели и сайту из HTTP сервера - скорость с которой запрос полученных HTTP сервером перейдет в среду выполнения кода на котором написана админ панель и сайт (php-fpm)
  • RPS среды выполнения кода PHP - количество запросов из игрового сервера к среде разработке языка программирования PHP в секунду (без учета времени выполнения самого кода и получения результата)
  • RPS среды выполнения кода Lua - количество запросов из игрового сервера к среде разработке языка программирования Lua в секунду (без учета времени выполнения самого кода и получения результата)
  • RPS среды выполнения кода JavaScript - количество запросов из игрового сервера к среде разработке языка программирования JavaScript в секунду (без учета времени выполнения самого кода и получения результата) 

RPS WebSocket сервера (на базе фреймворка workerman)

Согласно публичным тестам при передачи пакета с текстом Hello World

RPS игрового сервера

Актуальные показатели скорости работы игровых механик (расчет физики, команд пользователя, алгоритмов и т.п.) на основании которых высчитывается RPS игрового сервера и их перечень (который продолжает увеличиваться) доступны в админ панели во вкладке API
Время выполнения кода игровой механики указано в мс. (среднее, минимальное и максимальное в скобках) и включает в себя время вызова среды выполнения кода (название среды указано перед названием механики). Пример :

FPS игрового сервера

В связи с тем что RPS игрового сервера замедляет скорость работы отдельного кадра (игрового цикла в котором выполняются все механики всех существ на локации) и в целом количество этих кадров в секунду то реальный FPS на конкретной локации так же доступен в админ панели. Максимальное количество кадров в секунду настраивается администратором. В случае если в конкретном кадре время работы всех механик существ которых нужно обработать в этом кадре больше выделенного на кадр - время кадра увеличивается тем самым снижая и количество кадров в секунду. Пример: если максимальное количество кадров (FPS) будет установлено равным 1000 то на 1 кадр приходится 1 мс, а в случае если в кадре игровые механики будут выполнятся 2 мс. фактическое количество FPS (кадров) будет равно 500 в секунду

RPS HTTP сервера (apache)

???

RPS к админ панели и сайту из HTTP сервера (php-fpm)

??? переданных команд в секунду (при условии что настройки fpm max_children установлено в достаточном количестве и ядер процессора достаточно для поднятия соединений в нормальном режиме скорости и ни один потомок не ждет освобождения пула) согласно.

Минимальное потребление CPU на поднятый процесс 0.7%.

RPS к игровому серверу от WebSocket сервера (php-cli)

1.600.000 запросов в секунду благодаря обмену данными между параллельно работающими процессами (библиотека parallel). 

RPS среды выполнения кода PHP

~1.500.000 запросов в секунду т.к. и WebSocket и игровой сервер написаны на одном языке программирования PHP.

RPS среды выполнения кода Lua 

70.000 вызовов среды разработки в секунду без учета времени выполнения самого кода (8 ядер процессора дают 700.000, подробнее)

RPS среды выполнения кода JavaScript (используется движок V8js)

~150.000 вызовов среды разработки в секунду без учета времени выполнения самого кода (8 ядер дают ~750.000, подробнее)

Максимальное число игроков на игровом сервере (локации)

Будет равно количеству игроков и других объектов имеющих игровые механики суммарное время выполнение алгоритма в кадре которых (RPS игрового сервера) не будет понижать количества этих кадров (FPS игрового сервера) ниже минимально допустимого комфортного для игры (60 FPS). Другими словами максимальное число игроков и объектов на карте будет являться тем числом при котором обработка этих игроков и существ сервером не занимает более 16.6 мс. за один цикл (кадр/тик) сервера.

Использование игровым сервером CPU и RAM от 11.2022

CPU (Процессор) от 2 Ядер (чем больше тем быстрее смогут работать параллельно работающие программные сервера и производиться расчеты системой ):

  • Нагрузка в покое CPU ~ 0,05% (load average 1, 5 и 15 минут): 0.07, 0.02, 0.01
  • Нагрузка 100 ходящий ботов (эмуляция игроков) CPU 4.7% 0.1, 0.09, 0.02

RAM (оперативная память) от 4ГБ, нужна в целом для работы служб “железа” , сам программный сервер потребляет доп мощности по следующей формуле:

  • 1 Мб на запуска 1 экземпляра программного сервера ( 1 карта = 1 сервер )
  • ~ 1 Мб данных на загрузку информации о где на карте ходить можно, где препятствия
  • + ~ 0.005 Мб на каждого монстра, объект, игрока (в зависимости насколько много данных из базы будет браться)
GPU (видеокарта) - в настоящее время сервер не поддерживает расчет на видео карте (речь идет про видео карту именно сервера, не игроков), однако прибавка в скорости гарантирована (за счет того что в видео карте в сотни раз больше процессоров)

Минимальная скорости интернета для игры (тест от 11.2022)

Для теста было взята нагрузка 100 блуждающих объектов что постоянно отправляли поток пакетов с координатами. При скорости интернета 0.22 Мбит/Сек при одновременной действии 100 мобов (игроков) на карте игровой пакеты будут отправляться и приходить в клиент игры и игра будет с начальными признаками freez’ов (критический порог когда она начнет тормозить) тк Ping (разница между отправкой пакета и получением назад данных) составляет 0.2 секунды (игра НЕ тормозит в 90% времени за счет технологий интерполяции позволяющая игрокам с медленным интернетом побыстрее выполнять действия в игре уравновешивая ситуацию)



О дополнительных тестах отдельных функция языка и используемых библиотеках (в т.ч. баз данных)  можно ознакомиться по ссылке