[st1m150]
Убираем лаги и понижаем пинг
Итак вы создали свой сервер CS 1.6, но вот ведь проблема, сервер периодически зависает или падает, у игроков жутко скачет пинг...
Как избавиться или же свести к минимуму риск возникновения подобных неприятностей:
1. Требования к "железу" и подключению
Одна из причин лагов на сервере - недостаточная мощность компьютера или недостаточная скорость и надежность сетевого соединения.
На самом деле ознакомиться с этим пунктом желательно еще до того как вы решите создавать сервер. Рассмотрим подробнее системные требования HLDS сервера. Внимание, все требования приведены с учетом того, что компьютер используется только для обеспечения работы сервера, если есть еще и параллельные задачи(например вы хотите поиграть на сервере с того же компьютера где он и установлен), требования необходимо повысить.
- Оперативная память
Наиболее важное системное требование. Зависит в первую очередь от числа слотов на сервере. Также зависит от модов и плагинов, но в меньшей степени. Во время работы HLDS сервер потребляет в среднем 8-12Мб на 1 игровой слот, но поскольку это значение может достаточно сильно варьироваться, то рекомендуемым значением является 20Мб на слот.
Таким образом при определении необходимого размера памяти под сервер руководствуйтесь требованиями:
10 слотов на сервере = 200Мб RAM
12 слотов на сервере = 240Мб RAM
16 слотов на сервере = 320Мб RAM
20 слотов на сервере = 400Мб RAM
24 слота на сервере = 480Мб RAM
- Процессор
Нагрузка на процессор во многом зависит от того будут ли на сервер установлены моды, и если да то какие. например сервер с Zombie-модом будет расходовать ресурсы CPU раза в 2 больше чем простой паблик. Также многое тут зависит от числа слотов, от требуемого FPS сервера. В общем для примерной оценки можно сказать что для нормальной работы паблика на 20 слотов с последней версией AMXX без дополнительных модов подойдет любой процессор Intel/AMD с частотой 2Ггц.
Если вы собираетесь поднимать более одного сервера, то желательно(но не обязательно) чтобы и ядер в процессоре было больше одного.
Остальные параметры железа играют незначительную роль и рассматривать их подробно не будем.
- Сетевое соединение (Если вы создаете сервер только для локалки, вам этот пункт не нужен)
Требование к скорости соединения с интернетом зависит в первую очередь от числа слотов, а также, в меньшей степени от плагинов. Наиболее требователен HLDS сервер к исходящей скорости (скорости отдачи), с этим нужно быть внимательнее, поскольку многие провайдеры делают в своих безлимитных тарифах исходящую скорость (скорость отдачи) заметно ниже, чем входящую скорость (скорость закачки).
Необходимая исходящая скорость на 1 слот примерно 15 кбайт/сек (120 кбит/сек)
Необходимая входящая скорость на 1 слот примерно 2 кбайт/сек (16 кбит/сек)
Заметим, что реально средний потребляемый трафик, будет несколько ниже приведенных значений, но скорость сильно меняется в процессе работы сервера, поэтому нужно руководствоваться максимальными значениями.
Умножаем эти значения на число слотов на сервере и получаем требование к скорости.
2. FPS сервера
FPS сервера означает скорость работы сервера. Не стоит путать его с клиентским FPS, которые означают число кадров в секунду на мониторе клиента.
Latency игроков зависит в том числе и от того, насколько быстро сервер обрабатывает полученные от клиентов пакеты данных и формирует отправляемые пакеты клиентам. То есть чем больше FPS сервера, тем быстрее он работает и тем ниже пинг игроков. Но высокое значение FPS потребует большей нагрузки сервера на процессор.
Методы повышения FPS:
Linux
На линуксе все очень просто: добавляем в параметры командной строки -pingboost 3 для обеспечивания максимальной нагрузки на CPU и максимального FPS. Если нагрузку надо снизить то понижаем значение до -pingboost 2 или -pingboost 1.
Windows
Тут все несколько сложнее. По-умолчанию в Windows установлена слишком низкая частота MMTimer(мультимедиа таймер), в следствии чего HLDS сервер обрабатывает пакеты с низкой частотой, из-за этого fps сервера не будет больше 64, что хорошему пингу не способствует. Есть 2 пути решения этой проблемы:
- Увеличение частоты mmtimer.
Самый простой способ - запуск любого приложения Windows, который увеличивает частоту mmtimer, например Windows Media Player. Просто запускаете WMP в фоновом режиме и FPS увеличивается до 500 а возможно и до 1000. Во время работы сервера в зависимости от нагрузки на процессор FPS изменяется в диапазоне от 150 до 500 или до 1000.
Также можно использовать Booster 1.7 (я юзаю этот, можно 2.40) - плагин к Metamod.
Действует он таким же образом, изменяя mmtimer для обеспечения заданного FPS.
Вот настройки Booster 1.70 по-умолчанию: (добавлять в server.cfg)
booster_show_connmsg 1
booster_autofps 150
booster_minsleepms 3
booster_force_systicrate 0
booster_cpu_enabled 0
booster_cpu_spikemax 3
booster_cpu_spikelevel 75
booster_cpu_mminc 2
Из всех этих настроек наиболее важны booster_autofps и booster_minsleepms, первая означает каким FPS должен быть в среднем, вторая ограничивает максимум FPS следующим образом, например:
booster_autofps 150 означает, в среднем FPS сервера будет около 150 fps
booster_minsleepms 3 означает, что максимум FPS сервера = 1000/3 = 333 fps
Настраивать их нужно по своему усмотрению, в зависимости от нагрузки сервера на ваш процессор. Помните, что не всегда имеет смысл гнаться за слишком высоким FPS, иногда лучше снизить нагрузку. Отличия в пинге игроков и нагрузке на CPU между серверами работающие допустим на 200 и на 500 FPS достаточно небольшие. Эти же самые различия для серверов к примеру на 64 и на 200 FPS гораздо больше. То есть пинг не будет снижаться пропорционально увеличению FPS.
Важно, если вы используете Booster - никаких других приложений, увеличивающих частоту mmtimer не должно быть запущено, иначе контроль максимума fps booster_minsleepms теряет смысл.
Функция мониторинга нагрузки CPU - booster_cpu_enabled 1 работает только на английской версии Windows и только для одноядерных процессоров.
Есть еще один плагин схожий по функциям, но шире по настройкам и возможностям, чем Booster. Это ALX Lowping. Использовать его можете на свое усмотрение, на данный момент плагин очень хорошо себя арекомендовал, я пользуюсь им.
- Обработка пакетов HLDS в необходимое время.
При этом способе сервер HLDS обрабатывает пакеты только в то время, когда это необходимо, то есть, когда приходит пакет от клиента. FPS сервера будет увеличен ровно настолько, насколько это нужно для обработки пакета. Поскольку этот способ не требует увеличения частоты mmtimer, то он может неплохо сэкономить ресурсы CPU. Для этого нужно установить плагин Booster Lite
Настройки Booster Lite по умолчанию:
sys_ticrate 10000
booster_lite_mode 0 //контролирует степень нагрузки на CPU (от 0 до 3) 0 - самый высокий уровень, наиболее эффективно понижает пинг, 3 - самый низкий уровень, фактически отключает Booster-Lite
booster_lite_extra_sleep_frequency 10
Использование Booster-Lite позволяет добиться такого же, а возможно даже и лучшего результата, чем при использовании Booster. И при этом к тому же нагрузка на процессор будет существенно меньшей даже если ставить booster_lite_mode 0.
Есть лишь один минус - при использовании Booster-Lite нельзя запускать никакие приложения, повышающие частоту mmtimer (Windows Media Player, Winamp, QIP и т.д.). Иначе последствия будут непредсказуемыми, начиная от ускорения игрового времени на сервере и заканчивая вылетом сервера с ошибкой.
Какой из двух методов повышения FPS выбрать решать вам. Можно еще использовать Booster версии выше чем 2.0, там объединены функции Booster 1.7 и Booster-Lite, но его использование повышает риск падения сервера.
Если у вас несколько серверов и многоядерный процессор и вы хотите распределить разные сервера(нагрузку) по разным ядрам, не используйте Booster 1.70 или ALX LowPing, поскольку несмотря на заданное соответствие (Affinity), нагрузка всех серверов всегда будет ложиться только на 1 ядро.
3. Защита от атак
Сервер может сильно лагать или даже зависнуть в случае успешно проведенной DDos атаки. Для защиты от атак и эксплоитов рекомендуется использовать программу Anti CSDoS. Все что от вас требуется это запустить программу, нажать кнопку "Patch HLDS" и оставить в фоновом режиме. Последняя версия Anti CSDoS 3.2 защищает от всех известных атак практически любую версию сервера.
4. HLDS совместно с другими программами
Что делать, если вы хотите поиграть на собственном сервере, но как только на него заходите, он начинает ужасно лагать? Тут все дело в расстановке соответствий и приоритетов. Заходите в диспетчер задач (Ctrl+Alt+Del) находите в списке "Процессы" hlds.exe правая кнопка -> приоритет - выше среднего. На процесс hl.exe приоритет ставьте ниже среднего, но если это приведет к падению FPS(клиента), то лучше оставить средним.