Разъяснения и определения: rate, tickrate и т.д

Здесь хранится вся документация по созданию выделенных серверов
Сообщение
Автор
Optima
VIP
VIP
Сообщения: 2337
Зарегистрирован: 11.01.2008
Поблагодарили: 1 раз
Контактная информация:

#1 Сообщение 29.10.2008, 14:47

Ну что ж, начнём.
1.0 Серверная часть:
tickrate
Тикрейт - на протяжении каждого тика, сервер обрабатывает принятые команды, контролирует gamerules. После каждого такого тика сервер обвноляет информацию про игровую зону и т.д и посылает эту информацию клиенту. Большой тикрейт несомненно принесет больше удовольствия от игры, но не каждый сервер потянет такую нагрузку да и не каждый клиент сможет полностью насладится им.

2.0 Клиентская часть:
Определения
rate - количество байтов, который клиент может получить от сервера за секунду.
cl_updaterate - количество пакетов, который клиент может получить от сервера.(информация о других игроках)
cl_cmdrate - количество пакетов, который клиент может отослать серверу. (информация о вас)

2.2 Получение максимального удовольствия от игры.
2.2.1 У меня интернет на скорости 256/256 кб/с. Давайте выясним, какие значения рейтов подходят мне. Переводим килобиты в килобайты (не умеете? пользуйтесь гуглом!), 256 кб/с = 32кБ/с. Полученное число подставляем в пример:

Код: Выделить всё

x / 1024 = полученное число
Решаем:

Код: Выделить всё

x / 1024 = 32
x = 32 * 1024
x = 32'768, что примерно 32'000.
Не догадываетесь что мы с вами только что нашли? Нет? Тогда я вам скажу, мы нашли оптимальное значение rate для скорости 256 кб/с. Это было не сложно, каждый из вас сможет проделать данный "опыт" со своим каналом.

2.2.2 cl_updaterate
Следуем далее, теперь у нас cl_updaterate. Чем больше можете выжать из этого значения, тем лучше будет ваша игра. Игра Team Fortress 2 практически никогда не требует размер пакета больше 250, что это значит? Приведу пример из 3 класса, урок математики:

Код: Выделить всё

32'000 / x =  225
Первое число - ваше rate значение, второе число, значение cl_updaterate, которое нам надо найти, третее число, максимальное число потребление байтов от сервера для TF2 (описано выше). Решаем:

Код: Выделить всё

32'000 / x = 255
x = 32'000: 225
x= ~140
Вуаля.

2.2.3 cl_cmdrate
Тоже самое что и с cl_updaterate.


Клиентский rate ограничивается серверным sv_maxrate
Клиентский cl_updaterate ограничивается серверным sv_maxupdaterate
Клиентский cl_cmdrate ограничивается серверным sv_maxcmdrate




3.0 net_graph
Разбираем net_graph, со скринами :wink:

Начнём с FPS - это кадры в секунду, чем больше FPS(фпс), тем лучше вам играть. Играть с FPS ниже 15, не рекомендовано! Нервные клетки не востанавливаются!
Изображение


In - Первое число - размер пакета в байтах , за ним правее входящий трафик в килобайтах/с, и только последнее крайнее правое число - число полученных пакетов за секунду.
Изображение


Out - Первое число - размер пакета в байтах, за ним правее исходящий трафик в килобайтах/с, и только последнее крайнне правое число - число отправленных пакетов за секунду.
Изображение


Ping - задержка между сервером и клиентом в милисекундах. Чем меньше задержка, тем быстрей у вас из дула будут вылетать пули. :)
Изображение


by optima @ csmania.ru
thx to koshmel @ csmania.ru
thx to [»Twilight«] @ csmania.ru
(c) csmania.ru
Последний раз редактировалось Optima 05.01.2009, 16:35, всего редактировалось 9 раз.

Аватара пользователя
koshmel
VIP
VIP
Сообщения: 373
Зарегистрирован: 24.03.2007
Контактная информация:

#2 Сообщение 29.10.2008, 15:30

rate - количество пакетов, который клиент может отослать серверу за секунду.
не точность
ето не количество пакетов, а количество байтов
UPD1
ещё забыл про
Loss Choke
их видно с net_graph 4 или 3
UPD2
ето net_graph на Source2007
для КС:С
Изображение
UPD3
думаю будет лутше ето перевести)
Изображение
kadet89 писал(а):Не врубился в этот алгоритм...но думаю моно попробовать через бинарник изменить саму команду...только вот в каком файле она?

tov_Mayor
Нович0к
Нович0к
Сообщения: 22
Зарегистрирован: 26.06.2008

#3 Сообщение 29.10.2008, 15:53

Расчет теоретически верный, с одним условием, если самое узкое место - это от вас до провайдера, а не какой-нибудь шлюз в метро ))

Optima
VIP
VIP
Сообщения: 2337
Зарегистрирован: 11.01.2008
Поблагодарили: 1 раз
Контактная информация:

#4 Сообщение 29.10.2008, 16:43

koshmel писал(а):
rate - количество пакетов, который клиент может отослать серверу за секунду.
не точность
ето не количество пакетов, а количество байтов
UPD1
ещё забыл про
Loss Choke
их видно с net_graph 4 или 3
UPD2
ето net_graph на Source2007
для КС:С
Изображение
UPD3
думаю будет лутше ето перевести)
Поправил кое что, net_graph 3 и 4 не стал ставить в качестве примера, ибо его редко используют, если используют, то для проф проверки сервера. Также в примере виден Source2007 и TF2, поскольку эта игра более популярна чем ксс и другие онлайн игры на этом source.
tov_Mayor писал(а):Расчет теоретически верный, с одним условием, если самое узкое место - это от вас до провайдера, а не какой-нибудь шлюз в метро ))
спасибо, старался.

Аватара пользователя
t0x1c_r1v3r
HL Fan
HL Fan
Сообщения: 412
Зарегистрирован: 03.08.2008
Благодарил (а): 2 раза
Поблагодарили: 13 раз

#5 Сообщение 30.10.2008, 08:18

In - число получаемых пакетов. В следующем столбике вы видите скорость приёма этих пакетов.
Out - число передаваемых пакетов. В следующем столбике вы видите скорость отправки этих пакетов.
поправка
там где in - 1 столб - последний входящий полученный пакет в байтах, 2столб - траффик в кб/с
там где out - тоже самое только направление исходящее
cl_updaterate - количество байтов в секунду, который клиент может получить от сервера.(информация о других игроках)
cl_cmdrate - количество байтов в секунду, который клиент может отослать серверу. (информация о вас)
не байтов, а ПАКЕТОВ!!!
t_rrrrrrrrrrrrrrkl

Аватара пользователя
[»Twilight«]
Капитан
Капитан
Сообщения: 277
Зарегистрирован: 22.05.2007
Откуда: "Heaven's Night" Club, 2121 Carroll Street, Silent Hill, ME [Ukraine]
Контактная информация:

#6 Сообщение 01.11.2008, 23:01

t0x1c_r1v3r указал на наиболее грубые ошибки, ну а я хочу конкретизировать.
Optima писал(а):Ну что ж, начнём.
1.0 Серверная часть:
tickrate
Единица времени сервера - тик, чем больше этих тиков, тем плавней у клиента будет картинка(меньше лагов), тем лучше игроку будет играть. Это означает, чем больше у вас тиков с сервером, тем быстрее сервер будет реагировать на действия клиента. Тикрейт сервера зависит от канала и железа сервера.
Очень неточно сформулированное разъяснение. Это как раз у сервера "картина" игрового мира от высокого тикрейта будет плавнее. Клиент - это отдельная песня, он как зеркало для сервера, при том обычно кривое :) .
Фраза "чем больше у вас тиков с сервером" вообще бредом попахивает.
Насчет зависимости от канала и железа. Допустим есть 100-тиковый сервер. Он будет 100-тиковым, и должен выдавать 100 тик, даже если канал отдачи позволяет отправить каждому клиенту лишь 80 пакетов, вместо 100. И страдать от этого сервер не будет, в отличии от клиентов, которые недополучат 20 пакетов каждую секунду, а это серьезные лаги.
Зависимость от железа, то-есть показателя FPS сервера более очевидна. Если пригрузить сервер до уровня 80FPS, 100 тиков он никак не успеет просчитать. И теперь лаги будут и на стороне сервера тоже.
Осталось добавить, что в Source есть 3 значения серверных тикрейтов: или 33, или 66, или 100.
Optima писал(а):2.0 Клиентская часть:
Определения
rate - количество байтов, который клиент может отослать серверу за секунду.
Не верно. Это переменная клиента, указывающая серверу максимальное количество байт, которое клиент готов принять от сервера за секунду.
Часто считают, что она должна отражать ширину входящего канала клиента, но для движка Source это не совсем так, верней, совсем не так.
Именно заниженное значение переменной есть частой причиной появления choke, т.е. пакетов, которые не доходят до клиента из-за узкого канала либо лимитированного rate'ом объема трафика за секунду.
Допустим, у меня канал на скачку 256kbit/s. Сервер за одну секунду хочет отдать моему клиенту 16000 байт. Но на клиенте стоит rate 10000. И сервер пошлет лишь 10000, ведь мой клиент сказал ему, что готов принять лишь столько. А остальные 6000 сервер просто обрежет и выбросит. В результате мой клиент недополучит ХХнадцать идущих подряд пакетов, что и отразиться на датчике choke.
В идеале, на движке Source клиент может установить себе как можно большее значение rate, даже в случае, если его входящий канал сможет пропустить в несколько раз меньше байт. Например, при rate 100000 датчик choke практически всегда будет показывать 0.
Увы, очень мало серверов, у которых достаточно широкий канал отдачи для всех клиентов и переменной sv_maxrate 100000. В основном из-за незнания админами сетевого протокола Source'а.
Потому, ставить rate выше, чем sv_maxrate сервера проку особого, к сожалению, нет.
Optima писал(а):cl_updaterate - количество байтов в секунду, который клиент может получить от сервера.(информация о других игроках)
В корне не верно. Это количество пакетов, которое клиент хочет получить от сервера.
Приведу пример. На клиенте стоит cl_updaterate 66, то есть клиент ожидает получать от сервера не более 66 пакетов в секунду. Возьмем два сервера с sv_maxupdaterate 100 (то есть позволят моему клиенту требовать 66 пакетов и даже больше), один на тикрейте 33, другой на 100. 33-тиковый сервер отдавать мне будет лишь 33 пакета, ведь он больше в секунду не просчитывает. 100-тиковый же отдавать будет лишь 66, ведь клиент большего числа не ожидает. А теперь представим, что у меня канал больше 70-75 пакетов не пропустит, а я поставил cl_updaterate 100. 100-тиковый сервер будет спокойно пытаться отдавать мне все 100 пакетов, и это не его (сервера) забота, что ко мне все 100 не дойдут.
Выходит, не смотря на отсутствие фиксированного размера пакета, в Source зависимость от ширины клиентского входящего канала должна быть видна в первую очередь по значению переменной cl_updaterate, а не rate, как думают многие. rate пускай будет чем повыше и сколько сервер позволяет (sv_maxrate), это сократит choke к минимуму. А вот завышенное значение cl_updaterate может привести к тому, что пакеты "не влезут" во входящий клиентский канал.
Значения updaterate, в зависимости от размера входящего канала, для игры на Source-сервере с 20 играющими обычно вполне достаточно:
до 128 kbit/s »» cl_updaterate 33
на 128-256 kbit/s »» cl_updaterate 66
на 512 kbit/s и выше »» cl_updaterate 100
Optima писал(а):cl_cmdrate - количество байтов в секунду, который клиент может отослать серверу. (информация о вас)
Опять же, это количество пакетов, которое клиент хочет послать серверу.
Именно из-за заниженного значения этой переменной можно видеть на сервере игрока с минимальным пингом, но со страшными дерганиями и задержками анимации и действий. Попасть в такого игрока становиться трудно, ведь инфа о клиенте при низком cmdrate приходит редко, и серверу трудно угадать где ж эта св*лочь на самом деле находиться. В Source 2007, если я правильно понял, новый сетевой код позволяет серверу более удачно регистрировать попадания в таких лагеров.
Как и в случае с updaterate, cmdrate нужно брать в зависимости от ширины канала клиента на отдачу. Можно также учесть, что фактический cmdrate не будет выше за FPS в игре (точно так же как updaterate и tickrate выше FPS сервера).
Значения cmdrate, в зависимости от размера исходящего канала, для игры на Source-сервере несколько менее требовательны, ведь там информация только об одном игроке (клиенте):
до 32 kbit/s »» cl_updaterate 33
на 64-128 kbit/s »» cl_updaterate 66
на 256 kbit/s и выше »» cl_updaterate 100
Optima писал(а):Тогда я вам скажу, мы нашли оптимальное значение rate для скорости 256 кб/с.
Надеюсь, будет учтено все выше мною изложенное.
Отлично особенности сетевого кода Source описаны тут: http://www.jason35.com/Netcode.htm (на английском).
Optima писал(а):Примечание: максимальное значение updaterate и cmdrate устанавливаются сервером(tickrate)!
Осталось сказать, что update/cmdrate могут иметь значения 0-100. И максимальное определяется не всегда тикрейтом (помним о sv_maxupdaterate, sv_maxcmdrate). Однако ставить на клиенте меньше 33 считаю преступлением :wink:
Optima писал(а):In - число получаемых пакетов. В следующем столбике вы видите скорость приёма этих пакетов.
Первое число идет размер в байтах последнего полученного пакета, за ним правее входящий трафик в килобайтах/с, и только последнее крайнее правое число - число полученных пакетов за секунду.
Optima писал(а):Out - число передаваемых пакетов. В следующем столбике вы видите скорость отправки этих пакетов.
Первое число идет размер в байтах последнего отосланного пакета, за ним правее исходящий трафик в килобайтах/с, и только последнее крайнне правое число - число отправленных пакетов за секунду.
Optima писал(а):Ping - задержка между сервером и клиентом в милисекундах. Чем меньше задержка, тем быстрей у вас из дула будут вылетать пули. :)
Быстрее hit registration на сервере - да. Но не быстрота вылета пуль.


P.S.
Optima писал(а):Также в примере виден Source2007 и TF2, поскольку эта игра более популярна чем ксс и другие онлайн игры на этом source.
о_0

http://store.steampowered.com/stats/
Жмешь »View Steam players per game

Еще не разу не видел, что бы игроков TF2 было хотя бы в половину КССовцев. И дело тут не в том, что в стате берутся только игроки с лицензий.
Последний раз редактировалось [»Twilight«] 05.11.2008, 04:13, всего редактировалось 1 раз.
If you are the Receiver of Wisdom, you will understand my words...
Изображение

Аватара пользователя
Kick-Bum
Полковник
Полковник
Сообщения: 2311
Зарегистрирован: 29.04.2008
Откуда: Behind you
Поблагодарили: 6 раз
Контактная информация:

#7 Сообщение 01.11.2008, 23:35

так какой rate мне ставить ?
у меня 1024/1024 кб/сек

Аватара пользователя
Bulych
Сержант
Сержант
Сообщения: 67
Зарегистрирован: 16.02.2007
Откуда: Талнах
Поблагодарили: 2 раза
Контактная информация:

#8 Сообщение 02.11.2008, 04:09

Подскажите возможно ли для серверов css и tf2 Установить автоматически либо дать серверу возможность самостоятельно определять сетевые параметры?Или самому нужно высчитывать?локaльнaя сeть гигaбиткa

Аватара пользователя
Kick-Bum
Полковник
Полковник
Сообщения: 2311
Зарегистрирован: 29.04.2008
Откуда: Behind you
Поблагодарили: 6 раз
Контактная информация:

#9 Сообщение 02.11.2008, 14:45

мля, после того как я выставил эти параметры, у меня в ТФ2 всё ужасно лагает!!! всё отрывками! :dash:
как сделать по дефолту?

Аватара пользователя
[»Twilight«]
Капитан
Капитан
Сообщения: 277
Зарегистрирован: 22.05.2007
Откуда: "Heaven's Night" Club, 2121 Carroll Street, Silent Hill, ME [Ukraine]
Контактная информация:

#10 Сообщение 02.11.2008, 14:56

2 Kick-Bum: Я не знаю, что ты ставил, но если у тебя действительно стабильный мегабит, то
rate 100000
cl_updaterate 100
cl_cmdrate 100

Если лаги останутся, значит или ты на сервер с "грамотными" сетевыми настройками ломишся (тут вина на админе), или пакеты на линии пропадают (тут вина на провайдере). Точней сказать не могу, не видя net_graph.

2 Bulych: для гигабита все настройки на максимум, думаю вполне очевидно; о плагинах для авт. сетевых настроек сервера не слыхал.
If you are the Receiver of Wisdom, you will understand my words...
Изображение

Аватара пользователя
Bulych
Сержант
Сержант
Сообщения: 67
Зарегистрирован: 16.02.2007
Откуда: Талнах
Поблагодарили: 2 раза
Контактная информация:

#11 Сообщение 02.11.2008, 15:14

я Имел в виду если в bat Файле прописать только ticrate и fps a в server.cfg Неписать ничего касающегося сетевых параметров то что сервер выдаст по дeфолту?

Аватара пользователя
[»Twilight«]
Капитан
Капитан
Сообщения: 277
Зарегистрирован: 22.05.2007
Откуда: "Heaven's Night" Club, 2121 Carroll Street, Silent Hill, ME [Ukraine]
Контактная информация:

#12 Сообщение 02.11.2008, 15:27

Как не странно, он выдаст дефолт :crazy:

Код: Выделить всё

sv_maxrate
"sv_maxrate" = "0"
 replicated
 - Max bandwidth rate allowed on server, 0 == unlimited
sv_minrate
"sv_minrate" = "3500"
 replicated
 - Min bandwidth rate allowed on server, 0 == unlimited
sv_maxupdaterate
"sv_maxupdaterate" = "60"
 replicated
 - Maximum updates per second that the server will allow
sv_minupdaterate
"sv_minupdaterate" = "10"
 replicated
 - Minimum updates per second that the server will allow
sv_maxcmdrate
"sv_maxcmdrate" = "40"
 replicated
 - (If sv_mincmdrate is > 0), this sets the maximum value for cl_cmdrate.
sv_mincmdrate
"sv_mincmdrate" = "0"
 replicated
 - This sets the minimum value for cl_cmdrate. 0 == unlimited.
ну и т.д.
If you are the Receiver of Wisdom, you will understand my words...
Изображение

Аватара пользователя
Kick-Bum
Полковник
Полковник
Сообщения: 2311
Зарегистрирован: 29.04.2008
Откуда: Behind you
Поблагодарили: 6 раз
Контактная информация:

#13 Сообщение 02.11.2008, 15:53

[»Twilight«] спс помогло)
эм... а на 512\512 кб\сек, как должно быть?
какие там различия?

Аватара пользователя
Bulych
Сержант
Сержант
Сообщения: 67
Зарегистрирован: 16.02.2007
Откуда: Талнах
Поблагодарили: 2 раза
Контактная информация:

#14 Сообщение 02.11.2008, 15:58

вот что И требовалось доказать. Всем спасибо за соучастие .Надеюсь это многим поможет.

Аватара пользователя
[»Twilight«]
Капитан
Капитан
Сообщения: 277
Зарегистрирован: 22.05.2007
Откуда: "Heaven's Night" Club, 2121 Carroll Street, Silent Hill, ME [Ukraine]
Контактная информация:

#15 Сообщение 02.11.2008, 16:06

Kick-Bum писал(а):[»Twilight«] спс помогло)
эм... а на 512\512 кб\сек, как должно быть?
какие там различия?
Да так же. :) Врятли средний размер пакета будет превышать 500 байт.
If you are the Receiver of Wisdom, you will understand my words...
Изображение

Ответить