PDA

Просмотр полной версии : [Plugin] Profiler plugin (профайлер)



Daniel_Cortez
13.11.2015, 18:33
Данный плагин помогает узнать, какие функции в скрипте выполняются дольше всего, благодаря чему можно понять, какие отрывки кода следует оптимизировать в первую очередь.
Он измеряет количество вызовов и время выполнения каждой функции. Полученная информация сохраняется в одном из поддерживаемых на данный момент форматов: HTML, XML или в виде обычного текста.

Профилирование начинается при загрузке скрипта и завершается при его выгрузке (т.е., когда вы закрываете сервер или выполняете RCON-команды exit/gmx/unloadfs/reloadfs). Во время выгрузки статистические данные сохраняются в файл <имя_скрипта>-profile.<расширение>. Расширение зависит от выбранного вами формата сохраняемой информации (см. выше).

Плагину можно указать дополнительные параметры в server.cfg:

profile_gamemode <0|1>

Если указано 1, плагин будет профилировать мод, запускаемый на сервере. Значение по умолчанию: 0.

profile_filterscripts <fs1> <fs2>

Список фильтрскриптов, которые нужно профилировать. Может быть пустым.

profile_format <xml|html|text>

Формат вывода статистики. Значение по умолчанию: html. Примечание: в HTML-документе можно сортировать данные статистики, щёлкая по заголовкам колонок!!


Скачать:

https://github.com/Zeex/samp-plugin-profiler/releases

Исходный код:

https://github.com/Zeex/samp-plugin-profiler


Примечания:
Я не перевёл пункты про параметры call_graph и call_graph_format. В них было сказано о программе GraphViz (http://www.graphviz.org), ссылка на сайт которой мертва, поэтому у меня не было возможности разобраться.
Не забудьте указать "profile_gamemode 1" в server.cfg для профилирования мода, т.к. по умолчанию профилирование почему-то выключено.
Остальные пункты в принципе указывать не обязательно: при их отсутствии фильтрскрипты профилироваться не будут, а отчёт будет сохраняться в формате HTML в одной папке со скриптом мода.
Profiler не совместим с плагинами JIT и CrashDetect. Эти плагины созданы для совершенно разных целей и их использование вместе само по себе абсурдно, поэтому для использования Profiler уберите "jit(.so)" и "crashdetect(.so)" из server.cfg.
Профилируются только нативные функции, коллбэки и функции, вызываемые с помощью других нативных функций (SetTimer, SetTimerEx, CallLocalFunction, CallRemoteFunction, etc.)
Чтобы вы могли сразу увидеть плагин в действии, прикрепляю скриншот:
http://ihost.pro-pawn.ru/image.php?di=CXX4
Здесь я отсортировал данные, щёлкнув по заголовку столбца "Overall" (под "Total Time").
Впрочем, если щёлкнуть по стоблцу "%" (тоже под "Total Time"), сортировка не изменится.
Как видно, больше всего времени отнимает функция OnPlayerUpdate, следовательно код в ней следует переделать.
На втором месте OnGameModeInit, но её можно пропустить, т.к. загрузка/выгрузка мода не сильно критична по времени.
Следующие кандидаты на оптимизацию - @__CruiseControlTimer, CheckGas, CheckStatus и SyncUp. Также следует проверить все места, где используется функции GetVehicleModel и GetVehicleVelocity и по возможности убрать лишние вызовы этих функций.


Оригинал: http://forum.sa-mp.com/showthread.php?t=271129
Автор: Zeex (https://github.com/Zeex)
Перевод: Daniel_Cortez (http://pro-pawn.ru/member.php?100-Daniel_Cortez)



Специально для Pro-Pawn.ru (http://www.pro-pawn.ru)
Копирование данной статьи на других ресурсах без разрешения автора запрещено!

Роуди.
13.11.2015, 19:42
Кхм..

There aren’t any uploads for this repository.

Daniel_Cortez
13.11.2015, 19:51
Кхм..

There aren’t any uploads for this repository.
Исправил ссылку. Видимо, оригинал на sa-mp.com долго не обновлялся и за это время Zeex успел переместить загрузки на другую страницу.

Роуди.
13.11.2015, 20:21
Что значит?

normal unknown@00000438

scory
13.11.2015, 20:34
А что с инклудом? в мод ничего добавлять не нужно?

Profyan
13.11.2015, 21:15
Отличный плагин.Только вопрос: как запустить этот мониторинг?
Нашел в инклуде

native Profiler_GetState();
native Profiler_Start();
native Profiler_Stop();
native Profiler_Dump();


Вставил Profiler_Dump(); в OnGameModeInit : отмониторило всего лишь 1 секунду.
Вставил в ежесекундный таймер: через 30 мин краш сервера, и в столбце Overall на первом месте ежесекундный паблик, на втором native Profiler_Dump .

Видимо я что-то не так делаю.Подскажите, как правильно установить?

scory
13.11.2015, 21:35
Что значит?

normal unknown@00000438
Cкомплируй мод с -d3

StevenH
13.11.2015, 23:52
1. Я так и не понял как подключить. Добавил инклуд в мод, потом плагин прописал в cfg, и в кфг же прописал:

profile_gamemode 1
profile_format html

Запустил сервер -> 5 минут поиграл и оффнул. Нечего не появилось..

2. Сколько надо времени что бы был запущен сервер?

BossArturKA
14.11.2015, 12:42
1. Я так и не понял как подключить. Добавил инклуд в мод, потом плагин прописал в cfg, и в кфг же прописал:

profile_gamemode 1
profile_format html

Запустил сервер -> 5 минут поиграл и оффнул. Нечего не появилось..

2. Сколько надо времени что бы был запущен сервер?
Отчет появляется в папке с модом (gamemodes).

StevenH
14.11.2015, 12:55
Отчет появляется в папке с модом (gamemodes).

Нечего не появилось. Запускал на Windows`e, плагин и инклуд подключил. В server.cfg прописал:

profile_gamemode 1
profile_format html

StevenH
14.11.2015, 13:51
Кстати, в логе увидел:

[12:50:20] [profiler] Attached profiler to gamemodes/Atlant.amx (no debug info

Daniel_Cortez
14.11.2015, 13:56
1. Я так и не понял как подключить. Добавил инклуд в мод, потом плагин прописал в cfg, и в кфг же прописал:

profile_gamemode 1
profile_format html

Запустил сервер -> 5 минут поиграл и оффнул. Нечего не появилось..
Вангую: выключаете сервер простым закрытием консоли? Не надо так делать.



2. Сколько надо времени что бы был запущен сервер?
Хоть сколько, главное, чтобы вы выгрузили скрипт мода так, как это описано в статье.

Профилирование начинается при загрузке скрипта и завершается при его выгрузке (т.е., когда вы закрываете сервер или выполняете RCON-команды exit/gmx/unloadfs/reloadfs).



А что с инклудом? в мод ничего добавлять не нужно?

Отличный плагин.Только вопрос: как запустить этот мониторинг?
Нашел в инклуде

native Profiler_GetState();
native Profiler_Start();
native Profiler_Stop();
native Profiler_Dump();

Эти функции предназначены для управления процессом профилирования. Profiler_Start начинает профилирование, Profiler_Stop - останавливает, Profiler_GetState - узнаёт, производится ли профилирование, и Profiler_Dump сохраняет отчёт.
Они могут пригодиться, если вы хотите профилировать мод не всё время от старта до выключения мода, а только в нужные промежутки времени.
Но если вы не умеете или не хотите пользоваться теми функциями, можете просто в server.cfg установить profile_gamemode в 1.

StevenH
14.11.2015, 14:01
Вангую: выключаете сервер простым закрытием консоли? Не надо так делать.

Работает всё. А по чём лучше сортировать (по каким колонкам и так далее)? Например я отсортировал по Total Time (Overall) везде написано 0.0

Daniel_Cortez
14.11.2015, 19:16
Работает всё. А по чём лучше сортировать (по каким колонкам и так далее)? Например я отсортировал по Total Time (Overall) везде написано 0.0
Значит мало держали сервер включенным или ещё что-то делаете неправильно. Ещё раз повторю, не используйте функции из profiler.inc, если не знаете, как они работают.

vovandolg
20.12.2015, 04:10
Проблема, при старте в логах замечаю:

Profiler: Error loading symbols from gamemodes/beta40.amx
Плагин стоит(краш и лт плагины не подключены), инклуд на месте, с отладкой -d3 компилил....
В кфг прописал что ниже написано:


Не забудьте указать "profile_gamemode 1" в server.cfg для профилирования мода, т.к. по умолчанию профилирование почему-то выключено.

В гугле не чего не нашёл в решении этой ошибки.

DeimoS
28.04.2021, 08:10
Там у настроек плагина синтаксис поменялся + неплохо было бы добавить перевод с описанием вариантов статистики (https://github.com/Zeex/samp-plugin-profiler/wiki/Terminology), так как для многих это остаётся страшной тайной и как-то нагуглить эту информацию нереально (по крайней мере у меня сейчас не получилось через гугл выйти на ту страницу гитхаба, а на всяких сторонних ресурсах, даже иноязычных, написана полная чушь.