Форум администраторов игровых серверов

Форум администраторов игровых серверов (https://forum.zone-game.info/TT.php)
-   Игровой клиент (https://forum.zone-game.info/forumdisplay.php?f=54)
-   -   Патч от Hool1gan(антирелог) (https://forum.zone-game.info/showthread.php?t=40397)

luslighter 07.06.2016 15:52

Re: Патч от Hool1gan(антирелог)
 
Цитата:

Сообщение от L2Patch (Сообщение 413234)
Да есть же сервера где онлайна и побольше, например кетра, на баюме бывало до 300 доходило, на валике около 400-500. Ну заведи например фулку, и просто пусть все баттлхилом себя похилят. Потом из моей группы скачай патч, и похильтесь с ним. С моим патчем фпс не будет забиваться, а с обычным уже через 1 минуту сядет до 10-20. Так это только 1 фулка, а прикинь если больше и каждый постоянно что-то юзает. Нужен релог.

Добавлено через 4 минуты
Зубастик тоже блин, сначала отписал мне в лс, типа ой скажи да расскажи, а теперь поливает грязью, так еще и не правду говорит. Пусть каждый запустит патч и посмотрит разницу. Правда в версии 3.0 не полностью пофикшено, но разницу вы увидите и очень даже большую.

Опять же говорю - когда это кому то будет реально нужно, может и заюзают твой "Патчик" , а скорее найдут реальную первопричину и пофиксят таким образом чтобы работало только у них, ибо то что ты мутишь это не есть реальный фикс, а больше похоже на борьбу с ветряными мельницами, в первой версии не вышло ну так третью выпущу там точно прокатит, а что выпускает - как это реально отражается в движке ты никакого понятия не имеешь. А раз не имеешь ты не видишь первопричину проблемы(именно в коде), все это тупо твои предположения, так можно вечно выпускать патчи толку 0 будет.

n3k0nation 07.06.2016 18:53

Re: Патч от Hool1gan(антирелог)
 
Реальная причина такова, что из скриптов, это уж никак не пофиксить :D
У ладвы есть менеджемент хип, который используется для скриптовых объектов, а так же для объектов движка игры. Туда впиливаются текстуры, модели и много др. фигни. Реальная очистка хипа происходит при запуске сборщика мусора, который запускается только при загрузке уровня игры с нуля.
Есть аж несколько причин почему FPS падает:)
Первая из них - какие-то эффекты не возвращаются в пул (на более новых версиях клиента пофикшено).
Вторая причина - фрагментация менеджемент хипа.
Третья причина - загрузка левела, с нуля, происходит не то что редко, а очень редко, из-за чего запуск GC становится манной небесной.
Четвертая причина - тупенький GC, который неумет разбирать сложные ссылки.

Данные дефекты могут пофиксить только корейцы и только они, но уж ни как не парень "вася", который чето там подредактировал в скриптах :D Максимум, это исправить первую причину, которая лишь отсрочит "конец".
Реальный вариант исправить "это" - вручную вызывать перезагрузку левела (при том надо дать серверу знать, что клиенту требуется заного переслать все объекты в регионе), попутно перефигачив половину core.dll & engine.dll.

И да, ручной запуск GC, в процессе игры, выгрузит все загруженные ресурсы, поэтому такой вариант не канает.

FaintSmile 07.06.2016 19:02

Re: Патч от Hool1gan(антирелог)
 
Цитата:

Сообщение от n3k0nation (Сообщение 413248)
при запуске сборщика мусора

Щас бы имея возможность полного ручного контроля за памятью сборщики мусора вызывать. Эх корейцы, всё на скорую руку, лишь бы работало. Хотя, кого-то они мне напоминают kappa

luslighter 07.06.2016 19:34

Re: Патч от Hool1gan(антирелог)
 
Цитата:

Сообщение от n3k0nation (Сообщение 413248)
Реальная причина такова, что из скриптов, это уж никак не пофиксить :D
У ладвы есть менеджемент хип, который используется для скриптовых объектов, а так же для объектов движка игры. Туда впиливаются текстуры, модели и много др. фигни. Реальная очистка хипа происходит при запуске сборщика мусора, который запускается только при загрузке уровня игры с нуля.
Есть аж несколько причин почему FPS падает:)
Первая из них - какие-то эффекты не возвращаются в пул (на более новых версиях клиента пофикшено).
Вторая причина - фрагментация менеджемент хипа.
Третья причина - загрузка левела, с нуля, происходит не то что редко, а очень редко, из-за чего запуск GC становится манной небесной.
Четвертая причина - тупенький GC, который неумет разбирать сложные ссылки.

Данные дефекты могут пофиксить только корейцы и только они, но уж ни как не парень "вася", который чето там подредактировал в скриптах :D Максимум, это исправить первую причину, которая лишь отсрочит "конец".
Реальный вариант исправить "это" - вручную вызывать перезагрузку левела (при том надо дать серверу знать, что клиенту требуется заного переслать все объекты в регионе), попутно перефигачив половину core.dll & engine.dll.

И да, ручной запуск GC, в процессе игры, выгрузит все загруженные ресурсы, поэтому такой вариант не канает.

Это бред, достаточно вызывать Garbage Collector, нежели инициировать прогрузку уровня, это ведь затрагивает пакетку и много еще чего, но опять же стоит ли оно того(как ты определишь когда именно это должно произойти) ?

Ну и саму проблемы ты очень плохо описал, если простым языком, то объекты грузятся в память - по несколько раз, и не как оттуда не выгружаются, поскольку клиент не как это не регулирует(в плане источника - все очень разобщено(т.е не важно грузиться текстура либо скелетная модель, либо эмитер) все идет в общий поток, и на сколько я понял как раз эмитеры не передают флага - на выгрузку из памяти(когда игрок заюзал какой то скилл, предыдущий эмиттер остается) ибо время выполнения анимации скила - имеет не фиксированное значение, т.е от скила к скилу оно разное. А вот как это объяснить движку и стоит ли вообще - совсем другой вопрос.

Цитата:

Сообщение от Connie (Сообщение 413249)
Щас бы имея возможность полного ручного контроля за памятью сборщики мусора вызывать. Эх корейцы, всё на скорую руку, лишь бы работало. Хотя, кого-то они мне напоминают kappa

Что за чушь - причем тут корейцы ? Архитектура движка это прямое наследие Epic Games, во всех играх на этом движке так же, если ничего не менять - целенаправленно.

n3k0nation 07.06.2016 19:37

Re: Патч от Hool1gan(антирелог)
 
Цитата:

Сообщение от Connie (Сообщение 413249)
Щас бы имея возможность полного ручного контроля за памятью сборщики мусора вызывать. Эх корейцы, всё на скорую руку, лишь бы работало. Хотя, кого-то они мне напоминают kappa

Это, кстати, нормальная практика. Единственное, что не нормально - то что при телепорте не происходит нормальная сборка мусора (т.к. там по сути можно вообще почти все выгрузить).

Добавлено через 2 минуты
Цитата:

Сообщение от luslighter (Сообщение 413250)
Это бред, достаточно вызывать Garbage Collector, нежели инициировать прогрузку уровня, это ведь затрагивает пакетку и много еще чего, но опять же стоит ли оно того(как ты определишь когда именно это должно произойти) ?

Дизассемблер в руки и вперед, узнавать новые горизонты и почему нельзя просто вызвать GC (и к каким последствиям это приведет).
Даю подсказку: краш. Почему? Все отлично описано в моем посте выше.


Цитата:

Сообщение от luslighter (Сообщение 413250)
Ну и саму проблемы ты очень плохо описал, если простым языком, то объекты грузятся в память - по несколько раз, и не как оттуда не выгружаются, поскольку клиент не как это не регулирует(в плане источника - все очень разобщено(т.е не важно грузиться текстура либо скелетная модель, либо эмитер) все идет в общий поток, и на сколько я понял как раз эмитеры не передают флага - на выгрузку из памяти(когда игрок заюзал какой то скилл, предыдущий эмиттер остается) ибо время выполнения анимации скила - имеет не фиксированное значение, т.е от скила к скилу оно разное. А вот как это объяснить движку и стоит ли вообще - совсем другой вопрос.

А теперь идем читать, что такое управляемый хип под контролем GC и как работает GC.
Вы можете сколько угодно устанавливать флаги в объектах (в объектах, КАРЛ!), только вот от фрагментации и от занятости памяти этими объектами, это не спасет.

luslighter 07.06.2016 19:48

Re: Патч от Hool1gan(антирелог)
 
Цитата:

Сообщение от n3k0nation (Сообщение 413251)
Это, кстати, нормальная практика. Единственное, что не нормально - то что при телепорте не происходит нормальная сборка мусора (т.к. там по сути можно вообще почти все выгрузить).

Добавлено через 2 минуты

Дизассемблер в руки и вперед, узнавать новые горизонты и почему нельзя просто вызвать GC (и к каким последствиям это приведет).



А теперь идем читать, что такое управляемый хип под контролем GC и как работает GC.
Вы можете сколько угодно устанавливать флаги в объектах (в объектах, КАРЛ!), только вот от фрагментации и от занятости памяти этими объектами, это не спасет.

Я не вдавался в это все на столько - насколько нужно, ибо мне это нафиг не надо.
Но если бы такая потребность возникла, решалась бы она примерно по такой схеме(С проработкой механизма Garbage Collectora) возможно еще что-то, да я бы убил не мало времени на все это, но в целом это задача решаема(без костылей вроде перезагрузки всего уровня, который как раз запускает Garbage Collector и опять же, объясни мне как ты будешь определять когда нужно перезагрузить уровень, а когда нет ?)

n3k0nation 07.06.2016 19:49

Re: Патч от Hool1gan(антирелог)
 
Цитата:

Сообщение от luslighter (Сообщение 413250)
Что за чушь - причем тут корейцы ? Архитектура движка это прямое наследие Epic Games, во всех играх на этом движке так же, если ничего не менять - целенаправленно.

Потому-что в ладве используется свой сборщик мусора и это далеко не наследие Unreal Engine.

Добавлено через 9 минут
Цитата:

Сообщение от luslighter (Сообщение 413254)
Я не вдавался в это все на столько - насколько нужно, ибо мне это нафиг не надо.
Но если бы такая потребность возникла, решалась бы она примерно по такой схеме(С проработкой механизма Garbage Collectora) возможно еще что-то, да я бы убил не мало времени на все это, но в целом это задача решаема(без костылей вроде перезагрузки всего уровня, который как раз запускает Garbage Collector и опять же, объясни мне как ты будешь определять когда нужно перезагрузить уровень, а когда нет ?)

фамильярность:
Свернуть ↑Развернуть ↓


Вы походу вообще не въежаете о чем речь. Окей, я объясню подробно.

При вызове GC будет очищен выделенный хип, это означает:
1. Текстуры
2. Модели
3. Скриптовые объекты
4. Карты
5. ???
Будут ВЫГРУЖЕНЫ. Указатели на них могут сохраниться, где-то в недрах движка игры (unsafe, такой unsafe) и при обращении к памяти, где был раньше объект, либо ресурс, мы получим мусор. Далее поведение неопределенно, но, в большинстве случаев, это краш.
Это понятно? Идем дальше.

При загрузке нового левела игры, мы выгружаем старый, в этот момент, после выгрузки, мы по хорошему, должны запустить GC, а так же почистить указатели, там где требуется и уже после этого вгружать новый уровень. Все эти действия происходят при:
1. Телепорте (только GC не вызывается, плюс остаются референсы)
2. Входе в игру
3. Выходе из игры

Вы бы убили всю свою жизнь, но не починили бы это, я это гарантирую. Вы даже не понимаете о чем идет речь:D
Хотя, давайте попробуем. Вот флаг/маска, который должен передаваться на вызов GC, при телепорте: 67108864u, ах да, не забываем, что вызов GC деклалирован thiscall и нужно передавать в ecx указатель на объект. Если у Вас получится, то с меня пиво, в хорошем баре.

Я даже облегчу задачу, вот код вызова GC, для Interlude:
Свернуть ↑Развернуть ↓

Emperor 07.06.2016 20:23

Re: Патч от Hool1gan(антирелог)
 
n3k0nation, Почему никто из вас ещё не перепилил эту систему? Зубастик что-то пытался, но у него быстро иссяк энтузиазм.

Zubastic 07.06.2016 20:28

Re: Патч от Hool1gan(антирелог)
 
Цитата:

Сообщение от Emperor (Сообщение 413261)
n3k0nation, Почему никто из вас ещё не перепилил эту систему? Зубастик что-то пытался, но у него быстро иссяк энтузиазм.

Разобрались, но выхлоп мне не особо понравился. Забил на это :)

luslighter 07.06.2016 20:45

Re: Патч от Hool1gan(антирелог)
 
Цитата:

Сообщение от n3k0nation (Сообщение 413255)
Потому-что в ладве используется свой сборщик мусора и это далеко не наследие Unreal Engine.

Добавлено через 9 минут

фамильярность:
Свернуть ↑Развернуть ↓


Вы походу вообще не въежаете о чем речь. Окей, я объясню подробно.

При вызове GC будет очищен выделенный хип, это означает:
1. Текстуры
2. Модели
3. Скриптовые объекты
4. Карты
5. ???
Будут ВЫГРУЖЕНЫ. Указатели на них могут сохраниться, где-то в недрах движка игры (unsafe, такой unsafe) и при обращении к памяти, где был раньше объект, либо ресурс, мы получим мусор. Далее поведение неопределенно, но, в большинстве случаев, это краш.
Это понятно? Идем дальше.

При загрузке нового левела игры, мы выгружаем старый, в этот момент, после выгрузки, мы по хорошему, должны запустить GC, а так же почистить указатели, там где требуется и уже после этого вгружать новый уровень. Все эти действия происходят при:
1. Телепорте (только GC не вызывается, плюс остаются референсы)
2. Входе в игру
3. Выходе из игры

Вы бы убили всю свою жизнь, но не починили бы это, я это гарантирую. Вы даже не понимаете о чем идет речь:D
Хотя, давайте попробуем. Вот флаг/маска, который должен передаваться на вызов GC, при телепорте: 67108864u, ах да, не забываем, что вызов GC деклалирован thiscall и нужно передавать в ecx указатель на объект. Если у Вас получится, то с меня пиво, в хорошем баре.

Чувак ты вроде меня не понял, я тебе сразу сказал мне нафиг не сдалась эта фигня(может в будущем еще столкнусь).
И на счет GarbageCollector, он весь завязан на флагах, и обрабатывает все глобальные объекты, с пометкой GExitPurge(требующие выгрузки) RF_Native(загруженные в память)P.S> тот самый 67108864u, я не очень уверен что в самом классе эмиттеров - существует обработчик который эти самые флаги устанавливает, если условия соблюдены(к примеру объект создан), но скорее это в каком то более глобальном классе(Ибо только благодаря этим флагам происходит выгрузка из памяти по средствам GarbageCollect(по средствам того хука ты говоришь ему что все объекты с флагом native(т.е память), должны быть выгружены),и вообще их можно устанавливать и раньше и вызывать Destroy() намного раньше, но вот толку ? ).
А решил бы я это как раз допиливанием класса эмитеров, и самого метода очистки, ибо он предназначен для более простой работы - нежели той где этот самый класс вызывают over9000 раз воимя хила ! Естественно он запускает рендер этих самых 9000 Объектов, тем самым грузит систему, и удаляет он их медленее чем они создаются, а возможно даже и не просчитывается это ввиду слишком быстрого запроса(отсюда и весь баг).
Короче говоря это можно сделать(и без костылей, по канону), было бы желание.


Текущее время: 10:00. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot