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


Фотография

Оптимизация и производительность сервера

оптимизация производительность лаги

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 156

#41 Apocalypse 2

Apocalypse 2

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 485 сообщений

Отправлено 03 Апрель 2016 - 15:59

А что эта вещь дает? Без нее что не так будет? )  Я минималист, не люблю лишнее =)


Ужас какой вы предлагаете О_О

И .so и .vdf файл в папку addons.

 


Сообщение отредактировал Apocalypse 2: 30 Январь 2017 - 12:19

  • MixJay это нравится

#42 MixJay

MixJay

    Пользователь

  • Пользователь
  • PipPipPip
  • 199 сообщений

Отправлено 05 Апрель 2016 - 18:30

Чтобы настройки сохранялись, можно их прописать в параметры запуска игры:

1) Steam - Свойства игры - Общие - Установить параметры запуска...

2) Прописать (пример):

-console -novid +rate 100000 +cl_updaterate 100 +cl_cmdrate 100 +cl_interp 0,02

 

console - сразу открытая консоль после входа в игру (может кому будет удобно)

novid - отключает надоевший вступительный видеоролик при входе в игру

rate - максимальное кол-во байт в секунду, посылаемых серверу клиентом. По умолчанию 10000. Предел ограничивается настройками сервера.

cl_updaterate - сколько обновлений в секунду посылает сервер клиенту. По умолчанию 20. Предел ограничивается настройками сервера.

cl_cmdrate - обратно предыдущей команде. Сколько раз в секунду будет клиент отправлять информацию на сервер. Предел ограничивается настройками сервера.

cl_interp - интерполяция (сглаживание промежуточных кадров). Чем ниже, тем лучше, т.к. будет получена более точная обстановка на сервере (игроки, объекты, выстрелы и т.д.). По умолчанию = 0.1 (lerp при этом, обычно, = 100). Необходимо найти для себя оптимальное значение, чтобы lerp был обязательно белого цвета. Если не вникать - лучше не трогать этот параметр вообще.

 

* Цифры выставляются персонально по вкусу и качеству вашего интернета + сервера.

* cl_updaterate  и  cl_cmdrate можно ограничить на значении, равном fps, например в 60.


без расширения бесполезны настройки

sv_maxupdaterate "100"

sv_maxrate "60000"

https://bitbucket.or...ckrate_enabler/


всё верно я поторопился и опять херню сморозил 
 

 

А как понять что оно работает? В meta list не отображается. При вводе rate более 30к, так же пишет, что максимум 30. Оба файла в корне addons поселил.



#43 Accelerator

Accelerator

    Пользователь

  • Пользователь
  • PipPipPip
  • 195 сообщений

Отправлено 05 Апрель 2016 - 18:49

plugin_print. Остальное зависит от ваших настроек рейтов.


Сообщение отредактировал Accelerator: 05 Апрель 2016 - 18:50

  • MixJay это нравится

#44 MixJay

MixJay

    Пользователь

  • Пользователь
  • PipPipPip
  • 199 сообщений

Отправлено 06 Апрель 2016 - 2:31

плагин у вас есть все нужные настройки там имеются 
вам осталось только поставить расширение 
L4D https://bitbucket.or...abler/downloads
tickrate_enabler.vdf (в папку addons)
tickrate_enabler.so (в папку extensions)
 

 

Версия 1.3 под windows (тестовый сервер) дает ошибку при старте...

Прикрепленный файл  2016-04-06 09_28_05-10.254.254.103 — Подключение к удаленному рабочему столу.jpg   58,46К   3 Количество загрузок:

Под Linux тоже не пошла (без ошибок), просто будто игнорируется.

 

Стоит ли использовать версию 1.4, которая по штату есть в панели управления? Она завелась без проблем. В plugin_print отображается!


Сообщение отредактировал MixJay: 06 Апрель 2016 - 7:01


#45 MixJay

MixJay

    Пользователь

  • Пользователь
  • PipPipPip
  • 199 сообщений

Отправлено 07 Апрель 2016 - 6:06

Оставил штатный Tickrate Enabler 1.4.0 от Арены. Tickrate 100 (разница в цене копейки). На деле 66 vs 100 разницы пока не понял. Провел тесты на сервере с ордой в 70-100 зомбей. Получил для себя конфиг:

 

sv_minrate 30000;
sv_maxrate 125000;
sv_mincmdrate 30; // по умолчанию у клиента = 30
sv_maxcmdrate 100;  // по умолчанию у клиента = 40
sv_minupdaterate 25; // по умолчанию у клиента = 20
sv_maxupdaterate 100;
sv_client_min_interp_ratio 0;
sv_client_max_interp_ratio 2;
nb_update_frequency 0.05; // по умолчанию 0.1. При 0.03 растет нагрузка.
net_splitpacket_maxrate 50000; // Tick множим на 500
fps_max 125; // для меня оказался оптимально 125 - меньше всего пинг. Можно выше, вплоть до 505, но растет нагрузка на сервер!

 

Наконец то пинг значительно снизился! У некоторых (особенно иностранцев) в 2 раза! Спасибо всем, кто помог разобраться в этом деле! )

Минимальные значения не стал задирать, кроме minrate. Кому надо - сами подстроят, т.к. дело индивидуальное. В расчете отталкивался от: 20-40 зомби + 16 игроков + 5-7 боссов.

При настройках клиента updaterate = 30 и cmdrate = 30, rate 30000 хватало, чтобы не получать choke выше пары единиц. При максимальных настройках, 125к хватило, чтобы избежать потерь.


Сообщение отредактировал MixJay: 07 Апрель 2016 - 6:17


#46 Apocalypse 2

Apocalypse 2

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 485 сообщений

Отправлено 07 Апрель 2016 - 13:20

Версия 1.3 под windows (тестовый сервер) дает ошибку при старте...

attachicon.gif2016-04-06 09_28_05-10.254.254.103 — Подключение к удаленному рабочему столу.jpg

Под Linux тоже не пошла (без ошибок), просто будто игнорируется.

 

Стоит ли использовать версию 1.4, которая по штату есть в панели управления? Она завелась без проблем. В plugin_print отображается!


Сообщение отредактировал Apocalypse 2: 30 Январь 2017 - 12:20


#47 MixJay

MixJay

    Пользователь

  • Пользователь
  • PipPipPip
  • 199 сообщений

Отправлено 10 Май 2016 - 19:20

У кого нибудь есть изменения в использовании ОЗУ ?

По какой то причине сегодня примерно на 100мб меньше график показывает в ПУ... Обычно значения в р-не 500-550 мб.

Прикрепленный файл  2016-05-11 02_10_26-MyArena.ru __ Аренда игровых серверов. Аренда сервера Counter-Strike. Панель упр.jpg   29,09К   0 Количество загрузок:



#48 Apocalypse 2

Apocalypse 2

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 485 сообщений

Отправлено 10 Май 2016 - 22:36

...


Сообщение отредактировал Apocalypse 2: 30 Январь 2017 - 12:20

  • MixJay это нравится

#49 MixJay

MixJay

    Пользователь

  • Пользователь
  • PipPipPip
  • 199 сообщений

Отправлено 12 Май 2016 - 11:19

...
в большинстве случаев этот баг выползает после обновления ​конкретно в L4D2  и спасает только полная переустановка сервера 
...

 

В точку! ) После переустановки все нормально стало.



#50 MixJay

MixJay

    Пользователь

  • Пользователь
  • PipPipPip
  • 199 сообщений

Отправлено 29 Июнь 2016 - 8:33

Господа, кто разбирается в SM, подскажите оптимальный вариант такой вещи...

Есть несколько плагинов, которые необходимо связать между собой. Например, в одном плагине мы получаем имя карты на старте в переменную sMap. Во втором необходимо просто использовать эту переменную.

 

1) Создать cvar и хукать его изменение, либо проверять значение cvar'a по событию\таймеру. Будет потеря производительности на поиск, извлечение\обработку...

2) Создать нативную функцию + AskPluginLoad2. Думай, будет определенная потеря производительности...

3) Слить оба плагина в один. Не теряем производительности вовсе, но может получиться каша, если грамотно не выстроить скелет!

4) ... ???



#51 maloi9208

maloi9208

    Пользователь

  • Пользователь
  • PipPipPip
  • 273 сообщений

Отправлено 29 Июнь 2016 - 10:29

    if (FindConVar("sm_ar_doorlock_sec") == null) l4d2_plugin_keyman = false;
    else l4d2_plugin_keyman = true;

 

нашел в 1м плагине проверку плагина кейман, не оно?



#52 MixJay

MixJay

    Пользователь

  • Пользователь
  • PipPipPip
  • 199 сообщений

Отправлено 29 Июнь 2016 - 10:37

    if (FindConVar("sm_ar_doorlock_sec") == null) l4d2_plugin_keyman = false;
    else l4d2_plugin_keyman = true;

 

нашел в 1м плагине проверку плагина кейман, не оно?

Спасибо, но это не то о чем речь. Ваш пример просто проверяет существование консольной переменной.

 

Интересуют альтернативные подходы, либо совет по наиболее удачной реализации поставленной задачи.



#53 Figa

Figa

    Участник

  • Пользователь
  • PipPip
  • 60 сообщений

Отправлено 30 Июнь 2016 - 4:57

Есть несколько плагинов, которые необходимо связать между собой.

 

http://www.sourcemod...teGlobalForward

http://world-source....orum/100-2382-1


Сообщение отредактировал Figa: 30 Июнь 2016 - 5:28

  • Apocalypse 2 и MixJay это нравится

#54 MixJay

MixJay

    Пользователь

  • Пользователь
  • PipPipPip
  • 199 сообщений

Отправлено 13 Июль 2016 - 9:39

Небольшой тест производительности функций.

Число повторов каждого теста: 10000000.

ig_client = 1;

 

1) if (IsClientInGame(ig_client)){}

2) if (IsFakeClient(ig_client)){}

3) if (GetClientTeam(ig_client) == 2){}

4) if (IsPlayerAlive(ig_client)){}

5) if (GetEntProp(ig_client, Prop_Send, "m_zombieClass") == 8){}

6) if (IsClientConnected(ig_client)){}

 

Результаты (в секундах):

1) 0.141901

2) 0.152312

3) 0.208294

4) 0.187713

5) 1.583985

6) 0.133592

 

+ Бонус. Выгоднее использовать конструкцию:

for (int i = 1; i <= MaxClients; i++)
{
    if (IsClientInGame(i))
    {
        PrintToChat(i, "text");
    }
}

....чем штатную PrintToChatAll. А вот почему:
stock void PrintToChatAll(const char[] format, any ...)
{
    char buffer[254];
    for (int i = 1; i <= MaxClients; i++)
    {
        if (IsClientInGame(i))
        {
            SetGlobalTransTarget(i);
            VFormat(buffer, sizeof(buffer), format, 2);
            PrintToChat(i, "%s", buffer);
        }
    }
}

И это касается некоторых других функций. (Спасибо за советы iHX)


Сообщение отредактировал MixJay: 13 Июль 2016 - 9:42

  • anarki1980 это нравится

#55 Accelerator

Accelerator

    Пользователь

  • Пользователь
  • PipPipPip
  • 195 сообщений

Отправлено 13 Июль 2016 - 12:07

Не думаю, что вы вызываете подобные функции по 10000000 раз в 1 тик непосредственно в игре :D По сути, смысла искать в них времени обработки вообще никакого, и отламывать колесо у велосипеда тоже нет смысла (PrintToChatAll).

Могу привести пример хорошей оптимизации:

SetEntProp(client, Prop_Send, "m_iHealth", 100);

Данная конструкция выполняется в 4 раза дольше, чем эта:

int m_iHealth;
 
public void OnPluginStart()
{
         m_iHealth = FindSendPropInfo("CTerrorPlayer", "m_iHealth");
}
 
SetEntData(client, m_iHealth, 100);

Это сугобо для примера. К примеру если вы используете доп. урон в событии player_hurt, которое вызывается очень много раз.

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


Сообщение отредактировал Accelerator: 13 Июль 2016 - 12:10

  • MixJay и anarki1980 это нравится

#56 MixJay

MixJay

    Пользователь

  • Пользователь
  • PipPipPip
  • 199 сообщений

Отправлено 13 Июль 2016 - 17:29


Данная конструкция выполняется в 4 раза дольше, чем эта:

int m_iHealth;
public void OnPluginStart()
{
         m_iHealth = FindSendPropInfo("CTerrorPlayer", "m_iHealth");
}
SetEntData(client, m_iHealth, 100);

Перепроверил в тесте. Так и есть. Разница не менее 4-х крат! ))

Не подскажите как самом найти нужный класс необходимого свойства (чтобы не тратить кучу времени на поиски)? Например:

m_iClip1 = FindSendPropInfo( " ?????? " , "m_iClip1");



#57 Accelerator

Accelerator

    Пользователь

  • Пользователь
  • PipPipPip
  • 195 сообщений

Отправлено 13 Июль 2016 - 18:46

sm_dump_netprops

 

Вроде так. Для вашего примера должно подойти CTerrorWeapon. Тут надо главное понять, оффсет какой Entity вы хотите найти :)


Сообщение отредактировал Accelerator: 13 Июль 2016 - 18:52


#58 MixJay

MixJay

    Пользователь

  • Пользователь
  • PipPipPip
  • 199 сообщений

Отправлено 14 Июль 2016 - 1:24

sm_dump_netprops

 

Вроде так. Для вашего примера должно подойти CTerrorWeapon. Тут надо главное понять, оффсет какой Entity вы хотите найти :)

В данном случае экспериментировал с перезарядкой пилы.

Подобрал "CBaseCombatWeapon", проверил, работает.Проверю так же и "CTerrorWeapon".

...

Проверил. Получается CBaseCombatWeapon и CTerrorWeapon дают один и тот же эффект (m_iClip1 = 5140). :mellow:


Сообщение отредактировал MixJay: 14 Июль 2016 - 1:42


#59 Pringles

Pringles

    Пользователь

  • Пользователь
  • PipPipPip
  • 155 сообщений

Отправлено 21 Декабрь 2018 - 21:30

Привет всем)

Можно пару вопросов.

1. Сервер 100тик установить плагин Tickrate Enabler 1.4.2  и все? Больше ничо устанавливать не нужно?

2. Если сервер не на моем компе, а арендован myarena то игра что у меня самого(когда зашел на своей серв) что у игроков играющих со мной будет +\- одинаковой(лаги, пинг и прочее)?

3. На лаги и прочее влияет не только сервер myarena, но и железо самих игроков? Т.е если у кого то комп слабый - зависать, подлагивать будет по любому какой бы сервер крутой нибыл?

P.s свой какие то настройки делаете или все по умолчанию оставляете(имею в виду sv_minrate,sv_maxrate,sv_mincmdrate,sv_maxcmdrate... ну вы поняли)


Сообщение отредактировал Pringles: 21 Декабрь 2018 - 21:33


#60 dr_lex

dr_lex

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 569 сообщений

Отправлено 22 Декабрь 2018 - 1:12

Привет всем)

Можно пару вопросов.

1. Сервер 100тик установить плагин Tickrate Enabler 1.4.2  и все? Больше ничо устанавливать не нужно?

2. Если сервер не на моем компе, а арендован myarena то игра что у меня самого(когда зашел на своей серв) что у игроков играющих со мной будет +\- одинаковой(лаги, пинг и прочее)?

3. На лаги и прочее влияет не только сервер myarena, но и железо самих игроков? Т.е если у кого то комп слабый - зависать, подлагивать будет по любому какой бы сервер крутой нибыл?

P.s свой какие то настройки делаете или все по умолчанию оставляете(имею в виду sv_minrate,sv_maxrate,sv_mincmdrate,sv_maxcmdrate... ну вы поняли)

1. Данное расширение нужно для tick 66 и 100.
Исправляет много проблем, самое заметно для всех это пинг игроков.
2. Нет все будет по разному. У игроков зависит от скорости интернета и железа (на больших серверах рекомендую снижать настройки игры в плане графики, это помогает).
Короткая информация, так как походу мало кто вообще знает из простых людей как это работает. По этому скажу более понятным языком.
 Клиент - Это пользователь который подключается к серверу для он-лайн игры.
 Сервер - Это машина которая соединяет всех клиентов, и передает им пакеты данных.
 Пинг - Это скорость обмена данных между Клиентом и Сервером

Разные настройки виде tick играют роль в плане количества пакетов которые будут отправляться и приниматься сервером от клиента.
То есть чем больше tick тем больше обмена пакетом данных игрок получит. То есть игрок будет лучше видеть цель и события на сервере, что будет влиять на комфортную игру самого Клиента. Актуально если много людей.
Если сервер на 8 человек то норм с 33 до 66
Если сервер на 9 -12 то лучше 66
Если сервер на 13 - 20 то 66 - 124 (на l4d2 макс 100 можно)
Если сервер на 20 и выше то 124

Пинг это скорость соединения каждого Клиента и Сервера.
Разные настройки виде tick это какое количество пакетов будет

3. Лаги будут только у Клиента
Бывает ещё такое что Серверу может не хватать памяти и т.д на самой машине.
- В плане памяти тут может быть много плагинов или утечка памяти.


Сообщение отредактировал dr_lex: 22 Декабрь 2018 - 1:16




Темы с аналогичным тегами оптимизация, производительность, лаги

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных