1. gudaus Команда форума

    Регистрация:
    27.02.15
    Сообщения:
    1.516
    Симпатии:
    1.107
    Пол:
    Мужской
    tss-1-2014-48-50-fr-1.jpg
    Рейты
    - общее название для параметров, определяющих частоту и объём обмена информации сервера с клиентом. Существует ряд причин, по которым игра на сервере может быть некомфортной для клиента, то есть с лагами. Это:​
    1. Ддос. Тут он нас ничего не зависит, с таким справляется хостинг/Датацентр.
    2. Неправильно настроенные рейты. А вот это можно поправить.
    3. Плохая связь у конкретного клиента с сервером. Виновен провайдер клиента, опять же мы помочь не можем ничем.
    4. Плохие маршруты у хостинга/VDS. Надо разговаривать с ТП. Если ничего не решается за неделю, то выход один - переезжать на другую локацию, так как подобные проблемы приводят к лагам у всех игроков и нежеланию играть на таком сервере. Зачем нам терять онлайн из-за подобных вещей?
    Вначале пройдёмся по терминологии.
    • sv_maxrate и sv_minrate - максимальное / минимальное количество байт за одну секунду времени которые сервер посылает клиенту, включая потери пакетов (loss).
    • sv_minupdaterate и sv_maxupdaterate - минимальная / максимальная частота отсылки обновлений от сервера к клиенту. Влияет на фпс. Если сервер отошлёт клиенту, к примеру, 40 обновлений за 1 секунду, у клиента фпс будет 40 либо ниже.
    • loss - количество потерянных пакетов из последних 100. Пакеты могут теряться из-за перегрузки канала либо плохой связи между сервером и клиентом. Проблема в 90% случаев неустранимая.
    • choke - количество пакетов, отправка которых была задержана сервером, чтобы не превысить лимит полосы, устанавливаемый sv_minrate, sv_maxrate. Также зависит от sv_minupdaterate и sv_maxupdaterate. Причина - сервер генерирует либо слишком много трафика. Это проблему можно решить настройками.
    Как настраивать рейты?
    Настройка рейтов - дело для каждого сервера индивидуальное, зависящие от железа, канала, билда, нагруженности, так что искать некие "оптимальные" в интернете - занятие интересное, но, увы, малополезное. Лучше это сделать самому по следующим принципам:
    • sv_maxrate 20 000 на билдах 5***. sv_maxrate 50 000-100 000 на билде 6***. На билдах 5*** выше, чем 20 000 устанавливать было нельзя. Вы можете прописать любое число в конфиге, хоть миллион, но реально максимум будет 20 000. На билдах 6*** появилась возможность повысить до 100 000, но если канал связи не очень хороший, то имеет смысл поискать оптимальное значение в диапазоне 50 000 - 100 000.
    • sv_minrate 50 000 - 100 000 на билдах 5***. sv_minrate 25 000 на билдах 6***. Да, на билдах 5*** нельзя было выставить sv_maxrate больше, чем 20 000, но это обходилось условием sv_minrate. Никакой магии, дело в принципе отбора рейтов HLDS. Работает это так:
      PHP:
      If rate>sv_maxrate then rate=sv_maxrate;
      if 
      rate<sv_maxrate then rate=rate;
      if 
      rate>sv_minrate then rate=rate;
      if 
      rate<sv_minrate then rate=sv_minrate;
      Под rate имеется в виду клиентский rate. То есть что происходит? В начале HLDS смотрит на maxrate. Если клиентский выше, то понижаем до серверного, если ниже - оставляем как есть. Затем HLDS смотрит на minrate. Если клиентский выше серверного, то оставляем всё как есть, а если клиентский ниже серверного, то приравниваем клиентский к серверному. Вот и получалось на билдах 5***, что клиентский rate всегда ниже, чем серверный(100 000), и принудительно выставлялось значение 100 000. На билдах 6*** максимальное значение sv_maxrate повысили до 100 000, и эта хитрость стала бессмысленной.
    • sv_minupdaterate 20-30. 20 - значение по умолчанию, 30 - разумный минимум для человеческого глаза.
    • sv_maxupdaterate 60 - 101 для билдов 5*** и sv_maxupdaterate 60 - 102 для билдов 6***
    Теперь можно начать выставлять значения.
    Заходим в server.cfg, сперва выставляем всё по максимуму.
    Для билдов 5*** это

    PHP:
    sv_maxrate 20000
    sv_minrate 100000
    sv_minupdaterate 30
    sv_maxupdaterate 101
    Для билдов 6*** это
    PHP:
    sv_maxrate 100000
    sv_minrate 25000
    sv_minupdaterate 30
    sv_maxupdaterate 102
    Далее анализируем поведение сервера. Заходим в игру, включаем в консоли график нагрузки (net_graph 0/1/2/3), играем и параллельно смотрим на выданные в нём значения.
    1. Если сервер фризит, то понизьте sv_minrate на билде 5*** / sv_maxrate на билде 6***. Понизьте sv_minupdaterate до 20.
    2. Если у клиента choke, то имеет смысл повышать sv_minrate. По сути на билде 5*** вы должны жёстко задать rate клиенту путём sv_minrate>sv_maxrate, а на билде 6*** можно поэкспериментировать с sv_maxrate 100 000 sv_minrate [20 000; 100 000]. Значения выше 100 000 ставить крайне не рекомендуется. Также можно понизить значение sv_maxupdaterate. Зачем слать обновления клиенту, если они всё равно не доходят? Но лучше всего будет, если вы сумеете убрать choke и фризы, не уменьшая sv_maxupdaterate.
    3. Если избавились от фризов и choke, то можно попробовать потихоньку снижать рейты, дабы лишний раз не нагружать канал. Понизьте sv_minupdaterate до 20, к примеру. Потихоньку снижайте sv_minrate.
    Вопросы и ответы
    1) Вопрос: Я видел, что на билдах 6*** ставят sv_minrate 100 000, sv_maxrate 25 000, как на старых. А в статье сказано ставить наоборот. Где правда?
    Ответ: никакой путаницы нет. Вспомним правило расчёта рейтов
    PHP:
    If rate>sv_maxrate then rate=sv_maxrate;
    if 
    rate<sv_maxrate then rate=rate;
    if 
    rate>sv_minrate then rate=rate;
    if 
    rate<sv_minrate then rate=sv_minrate;
    Оно одинаково для всех билдов.
    В случае с sv_minrate 100 000, sv_maxrate 25 000 клиентский rate жёстко задаётся в 100 000. На старых билдах делали именно так, потому что не было возможности превысить ограничение в 20 000 иначе.
    В случае с sv_minrate 20 000, sv_maxrate 100 000 клиентский rate колеблется между значениями 20 000 и 100 000. На стиме и клиентах нового билда это оптимально, на клиентах старого билда (с бустов) rate клиента станет скорее всего 25 000, так как именно такое значение чаще всего прописывают владельцы бустов. Его можно увеличивать, повышая sv_minrate.

    Поясню на примерах
    В случае с билдом 6***
    sv_minrate 100 000, sv_maxrate 25 000 => rate 100 000
    sv_minrate 70 000, sv_maxrate 40 000 => rate 70 000
    sv_minrate 30 000, sv_maxrate 100 000 => rate между 30 000 и 100 000 на стимах, 30 000 на бустах.
    sv_minrate 10 000, sv_maxrate 50 000 => rate между 10 000 и 50 000 на стимах, 25 000 на бустах.
    Откуда 25 000? Это значение чаще всего выставляют владельцы бустов в клиенте.


    В случае с билдом 5***
    sv_minrate 100 000, sv_maxrate 25 000 => rate 100 000
    sv_minrate 70 000, sv_maxrate 40 000 => rate 70 000
    sv_minrate 30 000, sv_maxrate 100 000 => rate 30 000
    sv_minrate 10 000, sv_maxrate 50 000 => rate между 10 000 и 20 000, скорее всего 20 000.
    Откуда 20 000? Владельцы бустов в клиенте обычно ставят 25 000, но сервер с билдом 5*** поддерживает только sv_maxrate <=20 000

    2) Вопрос: Что такое фриз и как понять, есть ли он?

    Ответ: Фриз - остановка игры. От английского Freeze. Представляет собой кратковременную остановку. Игровой мир замирает, после чего игра продолжается. Обычно бывают 2 ситуации - или небольших фризов много, каждый - доли секунды, или фризов мало, на каждый - по 1-2 секунды. На графике net_graph 1/2 выглядит как резкое подскакивание фиолетовой полоски вверх.
    freeze.png
     
    Последнее редактирование: 05.10.15
    wopox1337, BaJIepbI4, Hnt и 4 другим нравится это.
  2. ThePhoenix Пользователь

    Регистрация:
    08.03.15
    Сообщения:
    1.424
    Симпатии:
    136
    Пол:
    Мужской
    Skype:
    the.phoenix666
    Только почему-то у многих на 6153 стоит,мин рейт 100к :) а мах.25к
     
  3. badboy2115 Пользователь

    Регистрация:
    27.02.15
    Сообщения:
    52
    Симпатии:
    12
    Пол:
    Мужской
    Очевидно, чтобы принудительно работать на 100000.
     
  4. gudaus Команда форума

    Регистрация:
    27.02.15
    Сообщения:
    1.516
    Симпатии:
    1.107
    Пол:
    Мужской
    ThePhoenix, это равносильно sv_maxrate = sv_minrate = 100 000.

    If rate>sv_maxrate then rate=sv_maxrate;
    if rate<sv_maxrate then rate=rate;
    if rate>sv_minrate then rate=rate;
    if rate<sv_minrate then rate=sv_minrate.

    Ладно на старых билдах не было выхода, но зачем так жёстко лимитировать на новых? Лучше не канал перегрузить, а найти оптимальный вариант.
     
    primm нравится это.
  5. ThePhoenix Пользователь

    Регистрация:
    08.03.15
    Сообщения:
    1.424
    Симпатии:
    136
    Пол:
    Мужской
    Skype:
    the.phoenix666
    Так у Ивана стоит,он бомжам лимитирует))
    Из-за таких рейтов можно канал перегрузить?)
    Хотя да,логично))
    Думаешь стоит начать с :
    sv_maxrate 100000
    sv_minrate 20000
    и искать оптимальное?)
     
  6. gudaus Команда форума

    Регистрация:
    27.02.15
    Сообщения:
    1.516
    Симпатии:
    1.107
    Пол:
    Мужской
    Я искал именно так. В итоге стояло
    sv_maxrate 70000
    sv_minrate 25000
    sv_minupdaterate 30
    sv_maxupdaterate 80

    Что там стоит у Ивана/Хулигана/Федота-стрельца вообще без разницы, у них своя ситуация, у тебя своя. У меня на рейтах 100 000 фризило. Арена, тариф паблик 1000, многобайт.
    Вообще могу сказать, что от рейтов зависит процентов 10-15. Остальное - тачка и каналы.
     
    Oper и Cloud нравится это.
  7. ThePhoenix Пользователь

    Регистрация:
    08.03.15
    Сообщения:
    1.424
    Симпатии:
    136
    Пол:
    Мужской
    Skype:
    the.phoenix666
    у меня что на 100к мин,что на мах. зажим не айс))
    А на счёт фризило или нет,у меня никогда ничего не фризит,не лагает :D
    Да,были лаги буквально ПАРУ РАЗ и то из-за провайдера))
    Что ж,спасибо за совет,буду пробовать :)
    P.S.Последний вопрос.sv_maxupdaterate 80 - То есть мах.на сервере будет 80 фпс у игрока?
     
  8. gudaus Команда форума

    Регистрация:
    27.02.15
    Сообщения:
    1.516
    Симпатии:
    1.107
    Пол:
    Мужской
    ThePhoenix, по сути да.
     
  9. ThePhoenix Пользователь

    Регистрация:
    08.03.15
    Сообщения:
    1.424
    Симпатии:
    136
    Пол:
    Мужской
    Skype:
    the.phoenix666
    Попробую,может и 80 с головой хватит :)
     
  10. gudaus Команда форума

    Регистрация:
    27.02.15
    Сообщения:
    1.516
    Симпатии:
    1.107
    Пол:
    Мужской
    Добавил примеры в статью в конце. На самом деле будет лучше, если обойдёшься без понижения sv_maxupdaterate, чисто настройками sv_minrate . В моём случае был говнопроц, который банально не тянул.
     
  11. ThePhoenix Пользователь

    Регистрация:
    08.03.15
    Сообщения:
    1.424
    Симпатии:
    136
    Пол:
    Мужской
    Skype:
    the.phoenix666
    ну в моём случае,ксеон 3-го поколения ,мах 4.0 ггц))
    Попробую без понижения,хотя 80 или 100 не особо офигительная разница)
     
  12. Cloud Пользователь

    Регистрация:
    27.02.15
    Сообщения:
    252
    Симпатии:
    61
    Пол:
    Мужской
    У меня choke скачет до 30, когда кто-то в микрофон говорит, это нормально?
     
  13. gudaus Команда форума

    Регистрация:
    27.02.15
    Сообщения:
    1.516
    Симпатии:
    1.107
    Пол:
    Мужской
    С VTC нормально.Также choke имеет право быть при старте раунда.
     
  14. ThePhoenix Пользователь

    Регистрация:
    08.03.15
    Сообщения:
    1.424
    Симпатии:
    136
    Пол:
    Мужской
    Skype:
    the.phoenix666
    поставил:
    Замечаю choke . При стрельбе так точно,при беге и т.д. тоже есть немного :)
    Нужно мин повышать?
     
  15. jokin Команда форума

    Регистрация:
    28.02.15
    Сообщения:
    828
    Симпатии:
    212
    Хорошая работа. Все доступно и по полочкам :)
     
  16. gudaus Команда форума

    Регистрация:
    27.02.15
    Сообщения:
    1.516
    Симпатии:
    1.107
    Пол:
    Мужской
    ThePhoenix, что именно тебе непонятно из того, что написано в статье?
    Сначала повышаешь sv_minrate. Можно вплоть до sv_maxrate. Если не помогает, то снижаешь sv_maxupdaterate.
     
    ThePhoenix нравится это.
  17. Frank Пользователь

    Регистрация:
    11.03.15
    Сообщения:
    638
    Симпатии:
    122
    Пол:
    Мужской
  18. gudaus Команда форума

    Регистрация:
    27.02.15
    Сообщения:
    1.516
    Симпатии:
    1.107
    Пол:
    Мужской
    Frank, Судя по всему, ни на каком. Фриз - остановка игры. От английского Freeze. Обычно на долю секунды. Иногда - на 1-2 секунды.
    Если ты смотрел когда-нибудь стримы вживую, но наверняка такое видел.
    Красные двоеточия - потеря пакетов. Ничего страшного, потери нечастые.
    На графиках фриз смотрится как резкий подскок полоски. Зелёной или фиолетовой.
     
    Frank нравится это.
  19. Frank Пользователь

    Регистрация:
    11.03.15
    Сообщения:
    638
    Симпатии:
    122
    Пол:
    Мужской
    gudaus, Благодарствую за информацию. Думаю в пост стоит добавить скрин с фризом, что такие как имели представление, что это такое.
     
  20. HoBu4oK VIP user

    Регистрация:
    28.02.15
    Сообщения:
    352
    Симпатии:
    48
    Вот как примерно выглядит фриз

    Безымянный.png
     
    gudaus и Frank нравится это.