Загрузка...
 
Страница 1
Автор
Сообщение
Papa_Rimskiy 
Admin ]Papa_Rimskiy

Регистрация: 01.11.2011
Сообщений: 1939
Откуда:


Оптимизация сетевых настроек Team Fortress 2

 
создано 09.03.2013 09:12:51

Статья предназначена

-для тех, кого я до сих пор вижу дергающимися на своих серверах с пингом в 5 мс;
-для ПРО, которым важна каждая милисекунда;
-для геев, которые загрузили у себя ПРО-конфиги, не понимая их сути.




Для того, чтобы настроить сетевые параметры нам потребуется

net_graph 4 - команда отображает график, позволяющий в реальном времени контролировать сетевые параметры вашей игры.
Для этого внесем в autoexec.cfg следующее:

alias netgraph4 "net_graph 4; alias +netgraph netgraph0"
alias netgraph0 "net_graph 0; alias +netgraph netgraph4"
alias +netgraph "netgraph4"
bind "N" "+netgraph"


Теперь по нажатию "N" у нас отобразится график, по следующему - исчезнет.

алиасы, позволяющие подстраивать lerp (что это узнаем дальше) клавишами "INS" "DEL" "PGUP" "PGDN" в зависимости от качества трассы до сервера, на котором вы играете:

alias lerpb+ "incrementvar cl_interp 0.01 0.09 +0.001" // cl_interp +0.001
alias lerpb- "incrementvar cl_interp 0.01 0.09 -0.001"// cl_interp -0.001
alias lerpc+ "incrementvar cl_interp 0.01 0.09 +0.01"// cl_interp +0.01
alias lerpc- "incrementvar cl_interp 0.01 0.09 -0.01"// cl_interp +0.01
bind "INS" "lerpb+"
bind "DEL" "lerpb-"
bind "PGUP" "lerpc+"
bind "PGDN" "lerpc-"


Теперь немного о том, как читать график (net_graph 4)



область 1 отвечает за данные, получаемые с сервера (читаем сверху вниз, справа налево):

кол-во пакетов в секунду, которое мы хотим получать от сервера (cl_updaterate из вашего конфига);

кол-во пакетов в секунду, которое мы реально получаем с сервера (это реальное cl_updaterate, назначенное сервером);

lerp - на сколько миллисекунд время вашей игры отстает от серверного. Эта задержка необходимо для интерполяции. Всегда надо добиваться минимальной задержки.
Допустимы значения lerp белого и оранжевого цветов. Желтый lerp сигнализирует об ошибочно установленном времени интерполяции;

количество КБайт в секунду, которые мы получаем с сервера;
размер в Байтах последнего принятого пакета.

область 2 отвечает за данные, отправляемые на сервер (читаем снизу вверх, справа налево):
кол-во пакетов в секунду, которое мы хотим отправлять на сервер (cl_cmdrate из вашего конфига);

кол-во пакетов в секунду, которое мы реально отправляем на сервер (реальное cl_cmdrate);

количество КБайт в секунду, которые мы отправляем на сервер;

размер в Байтах последнего отправленного пакета.

область 3 отвечает за возникающие ошибки (читаем слева направо):

loss - физически потерянные из-за плохой трассы между вами и сервером пакеты (лечится сменой провайдера);

chooke - количество пакетов, которые сервер не успел пропихнуть к вам из-за ваших кривых настроек (эти пакеты с обновлением игрового мира от сервера были просто отброшены).

Итак, начнем тонкую настройку

Мои серверы отдают и принимают пакеты с обновлением игрового мира не менее, чем 33 раза в секунду, но не более 66 раз в секунду (как и большинство серверов, собственно). Скорость потока, выделяемая сервером для одного клиента, ограничена диапазоном:15000-60000 Байт/с.

Рассчитываем клиентский rate:
rate - максимальное количество байт в секунду, которое клиент хочет получать от сервера из-за узости клиентского интернет-канала.

возьмем максимально возможную скорость, которую готов отдавать сервер для клиента (60000 Байт/с) и посчитаем необходимую для клиента ширину канала: необходимая ширина канала = 60000*8/1024 = 468 Кбит/с. Т.е., если ваша скорость больше 512Кбит/с, смело ставим:

rate 60000


Когда ваша скорость инета менее 512Кбит/с, то rate надо считать. Например, у вас 256Кбит/с: rate=256*1024/8=32768Байт/с

rate 30000 //немного занизим, чтобы не занимать весь канал


Рассчитаем клиентский cl_updaterate:
cl_updaterate - максимальное количество пакетов с обновлениями игрового мира в секунду, которое клиент хочет получать от сервера.
Казалось-бы, а зачем его считать? Мы сообщили серверу на какой скорости хотим получать обновления (rate), а дальше он пусть сам рассчитывает количество пакетов с обновлениями в секунду, чтобы не превысить rate.
Но размер пакетов с обновлениями, приходящими от сервера, дискретен - серверу нужно иногда передать горку с кучкой, а иногда просто кучку. Следовательно сервер должен динамически менять количество пакетов в секунду, но тут возникает косяк с интерполяцией.
Поэтому твердое количество пакетов с обновлениями за секунду приходится подбирать нам, дабы сервер его не занижал.

Для начала ставим:

cl_updaterate 66


смотрим на график и на чоки. Если у нас график изобилует провалами (большие значения чоки):

понемногу снижаем значение cl_updaterate так, чтобы у вас было минимум чоков и график смещался без провалов

Рассчитаем клиентский cl_cmdrate:

cl_cmdrate - максимальное количество пакетов в секунду, которое клиент хочет отправлять серверу.

Если у вас симметричный канал, принимаем:

cl_cmdrate = cl_updaterate

Если у вас не симметричный канал (например, ADSL-подключение):

смотрим по графику исходящую скорость и занижаем cl_cmdrate до приемлемой для вашего канала на отдачу скорости

Интерполяция
Для того, чтобы между обновлениями игрового мира (а так-же в случае задержки или потери пакетов с ними) ваш ТФ мог самостоятельно интерполировать статичные промежутки между изменяющимся каждые 15 мс (1/66) игровым миром, необходимо правильно настроить параметры интерполяции.

Рассчитаем клиентский cl_interp_ratio:
cl_interp_ratio - клиент хочет интерполировать игровой мир, используя не более: "1" - 2-х пакетов от сервера (1 промежуток), "2" - 3-х пакетов от сервера (2 промежутка).
cl_interp_ratio зависит от качества трассы между сервером и вами:
при стабильной трассе без потери пакетов выбираем:
cl_interp_ratio 1

при поганой трассе с плавающим пингом и потерей пакетов, выбираем:
cl_interp_ratio 2


Рассчитаем клиентский cl_interp:
cl_interp - временной промежуток в течении которого клиент интерполирует игровой мир.
Формула рассчета базового cl_interp такова: cl_interp = cl_interp_ratio/cl_updaterate.
Ремарка:
cl_updaterate здесь берется не то, которое вы запросили у сервера, а то, которое он вам разрешил.

Некоторые гейские серверы не разрешают нормально играть игрокам со слабым инетом, лоча их cl_updaterate на 66 (сервер фигачит пакеты по максимуму и его не заботит, что половина пакетов у игрока не обрабатывается).
Правильно настроенный сервер разрешит вам диапазон cl_updaterate:33-66.

Теперь можно посчитать и ввести в консоль подходящие пары команд:
при стабильной трассе без потери пакетов между вами и сервером:
- cl_updaterate=66 (скорость инета более 512Кбит/с)
cl_interp_ratio 1; cl_interp 0.0152

- cl_updaterate=33 (скорость инета менее 512Кбит/с)
cl_interp_ratio 1; cl_interp 0.0304

при поганой трассе с плавающим пингом и потерей пакетов:
- cl_updaterate=66 (скорость инета более 512Кбит/с)
cl_interp_ratio 2; cl_interp 0.0304

- cl_updaterate=33 (скорость инета менее 512Кбит/с)
cl_interp_ratio 2; cl_interp 0.0608


Более тонкую корректировку cl_interp (в зависимости от сервера, на котором играем) мы сделаем забинджеными в начале статьи алиасами, жамкая клавишами "INS" "DEL" "PGUP" "PGDN".
Помним, что lerp должен быть белого или оранжевого цвета. Желтый lerp сигнализирует об ошибочно установленном времени интерполяции.

ВАШИ СЕТЕВЫЕ ПАРАМЕТРЫ НАСТРОЕНЫ!!!

Примеры
НЕ ЗАБЫВАЕМ ЗАНОСИТЬ СДЕЛАННЫЕ НАСТРОЙКИ В AUTOEXEC.CFG
я играю с инетом в 20Мбит/с, стабильным пингом 10-20 мс. без потери пакетов.
В конец autoexec.cfg забиваем:

rate 60000; cl_cmdrate 66; cl_updaterate 66; cl_interp_ratio 1; cl_interp 0.0152

я играю с инетом в 256Кбит/с, стабильным пингом 20-40 мс. без потери пакетов.
В конец autoexec.cfg забиваем:

rate 30000; cl_cmdrate 33; cl_updaterate 33; cl_interp_ratio 1; cl_interp 0.0152

я играю с инетом в 6Мбит/с, ужасным плавающим пингом 40-120 мс. и потерями пакетов.
В конец autoexec.cfg забиваем:

rate 60000; cl_cmdrate 66; cl_updaterate 66; cl_interp_ratio 2; cl_interp 0.0304

я играю с инетом в 256Кбит/с, ужасным плавающим пингом 40-120 мс. и потерями пакетов.
В конец autoexec.cfg забиваем:

rate 30000; cl_cmdrate 33; cl_updaterate 33; cl_interp_ratio 2; cl_interp 0.0608



Материал взят тут







А чего мне бояться? - Подумала Красная Шапочка"Лес я знаю,Секс Люблю"



Reply 
babaj 
Admin ]babaj

Регистрация: 20.06.2008
Сообщений: 1815
Откуда: moskva


Оптимизация сетевых настроек Team Fortress 2

 
создано 09.03.2013 12:18:24

лайк римскому и 2 лайка автору grin



MineCraft MCZone server - mc.mczone.ru



Reply 
Регистрация
 Зарегистрироваться
Комментарии

Рейтинг@Mail.ru