Публикации
Статья-исследование для тех у кого лаги при игре на нашем сервере (советы и рекомендации прилагаются) |
Статья для тех кто испытывает проблемы при игре на наших серверах, связанные с высоким пингом, периодическими небольшими подвисаниями, низким ФПС и пр. и пр. Речь здесь пойдет не о проблемах, связанных непосредственно с подключением к серверу, а именно об анализе и оптимизации, когда уже игрок в игре, но испытывает дискомфорт. Публикация не претендует на сколько бы ты ни было большую объективность и связана с необходимостью скорее зафиксировать накопленный опыт в решении описанных выше проблем и дать направление куда двигаться в решении данных вопросов. |
С недавних пор у меня лично появились некоторые проблемы при игре на наших серверах в связи с чем было проведено много экспериментов и опытов, устранивших в конце концов мою проблему чем и спешу поделиться для желающих попытаться добиться того же у себя. Начнем с того, что проблемы в игре Team Fortress 2 на серверах могут быть вызваны большим кол-вом факторов и можно условно разделить их на 3 направления: 1) Проблемы клиента (непосредственно все что связано с "железом" и софтом играющего) 2) Проблемы сервера (соот-но железо и софт сервера) 3) Проблемы связи между сервером и клиентом (настройки клиента и сервера по работе с сетью в самой игре) Рассмотрим их по отдельности. Проблемы клиента Это проблемы, связанные прежде всего с компьютером игрока, а именно его мощностью и железом как таковым. Если вы используете старое железо то можно добиться некоторых подвижек с помощью настроек видео (минимальное разрешение и в минимум все остальные настройки) Еще можно добиться некоторого улучшения манипулируя переменными движка ТФ2, ухудшая графику и снижая тем самым нагрузку на железо. В этом "железячном" направлении можно дать несколько советов: а) сделать апгрейд железа выяснив предварительно, что является самым тормозящим фактором в системе. Сильно в прикидку мало мальски на чем можно играть, то я бы предложил двигаться в сторону 1 Гб оперативки (благо она стоит копейки), 2-x ядерного проца на Core 2 Duo (чем выше частота тем лучше, большее кол-во ядер сособого толку пока не дает), и видеокарта серии от GeForce 6600 и выше (кол-во оперативки от 256Мб и выше и без особой разницы на данный момент для движка ТФ2) б) почитать и применить конфиг или часть его из этой ветки нашего форума. Возможно это частично и поможет но пункт а) гораздо эффективней. в) сильно задуматься на тему эффективности охлаждения. Этот казалось бы неявный фактор меня лично и подвел в плане появления лагов последний раз. И причем столкнулся я с ним не первый раз уже, но тем не менее до последнего не мог понять в чем дело. В целом проблема это состоит в том что игра, особенно в моменты сильной и пиковой нагрузки (большое кол-во играющих или неоптимизированная и сложная по графике карта типа cp_gydan) вызывает сильный разогрев компонентов компьютера. Прежде всего это процессор и видеокарта. У меня слабым звеном оказалась видеокарта. Проявляется это так, в момент когда на экране начинает происходить много действия, начинаются странные подтормаживания, то ракету не видишь собственноручно выпущенную, то игроков видишь через раз, то тебя убивает некто неожиданно и ты при этом видишь это только уже когда твои кусочки начали разлетаться по уровню. В целом тоже самое можно увидеть и при плохом коннекте (есть потери пакетов например, большой пинг и т.д. о чем будет подробно рассказано позже), но если вы к коннекте уверены, но видите такие необоснованные лаги, то вплотную займитесь охлаждением. Современные процессоры и видеокарты при высокой температуре своего разогрева делают очень простую вещь, либо снижают частоту работы или просто пропускают определенное кол-во тактов. Естественно, что такой алгоритм вызывает сильное просаживание производительности, и иногда покадровое воспроизведение особо напряженных моментов, а ругающийся на всех юзер и не подозревает, что дело не в сети-сервере-провайдере и т.д. и т.п. а в его видеокарте или проце которые просто вот-вот начнут дымиться. Для отслеживания температурного режима сначала можно задействовать спец. программы которые отслеживают температуру ядра граф. карты и процессора или пишут их в лог. Но в целом как вариант могу предложить следующую методику. Поиграйте в игру на максимальных настройках до плотного появления лагов. Дальше быстро выключаете компьютер и пробуйте рукой радиатор видеокарты и процессора. Если вы рукой можете терпеть или вообще они еле теплые значит все в порядке. Если терпеть невозможно или на грани значит пора задуматься об улучшении охлаждения. Причем эффективность охлаждение (как и коннект) со временем без принятия доп. мер всегда только ухудшается под воздействием многих факторов. Как улучшить охлаждение это уже отдельный вопрос. Возможно стоит банально почистить компьютер. Возможно добавить вентиляторы в корпус на вдув и выдув. Возможно вообще поменять кулер на видеокарте или процессоре в сторону более эффективного. Есть смысл почитать на соот-щих тех. форумах и сайтах об этом уже отдельно. Что касается софта и настроек ОС на стороне клиента то позволю себе сделать еще ряд банальных но важных для выполнения условий и замечаний: 1) Поставьте антивирус со свежими обновлениями, проверьте свой компьютер и после всего это настройте антивирус так чтобы он не проверял в фоновом режиме папки с игрой ТФ2 (это улучшит значительно время запуска игры особенно во время подгрузки новой карты и вообще стартовой загрузки игры) Рекомендация с антивирусом связана с тем, что частенько юзер не подозревает, что на его компьютер попал вирус и не понимает с чем связаны странные непривычные глюки например такого плана: игра не всегда запускается или вываливается с странной ошибкой после некоторого времени игры. Вообще если встречаете странные и необоснованные проблемы на ровном месте в привычных уже для вас и РАЗНЫХ по сути программах, то первое, о чем есть смысл это подумать, что там у вас с антивирусом. Такие же проблемы правда иногда вызывает и "глючное железо" но это уже отдельная тема для разговора и будем считать, что в нем вы уверены на 100% в данной статье. 2) Вырубайте на время игры все приложения жрущие трафик. Канал не резиновый и если у вас в параллель с игрой пашет торрент или качается что-то шустро с ФТП вы не получите комфортного коннекта по определению 3) Если у вас есть местная локальная сеть (домашняя с несколькими компьютерами) и вы еще и раздаете со своей машины инет этой локальной подсети, то опять же хорошего коннекта вы не получите, т.к. все это будет зависеть от других юзеров которые делят с вами трафик вашего канала. Рекомендую поставить как минимум простой роутер в таком случае. И-нет тогда будет доступен всем и в любое время без включенного компьютера, а вот коннект будет более стабильный и при этом роутер можно еще и подкрутить на приоритезацию трафика например именно вашего игрового. В качестве качественной реализации таковой железяки могу предложить вот это http://tower.tomsk.ru/prices/item/20884/ (проверено на себе) Более простой вариант это http://tower.tomsk.ru/catalog/item/116283/ И не вздумайте подключаться к сети по беспроводному варианту. Ничего хорошего из этой затеи не выйдет. Только провода дадут 100% и стабильный рез-т. 4) Если вы используете внешку через так называемое VPN подключение то ОБЯЗАТЕЛЬНО поставьте себе разделение трафика. Как это сделать описано здесь (в самом низу) Если вы это не сделаете то весь трафик до нашего сервера будет идти через ВПН сервер провайдера к которому вы подключились. Мало того, что некоторые провайдеры могу посчитать это как внешний трафик, но главное то, что хорошего коннекта вы не получите однозначно, и пинг все равно просядет на дополнительные проценты, так что ставьте и наслаждайтесь идеальным пингом независимо от того подключена в данный момент внешка или нет 5) Избавьтесь от беспроводных соединений. Даже в идеальных условиях беспроводное соединение дает ухудшение пинга и связи в целом и тем хуже будет связь, чем сильнее вы будете загружать канал. 6) В некоторых форумах встречал такую рекомендацию: выключить службу (идем в Панель управления/Администрирование/Службы "Беспроводная настройка". Якобы она через определеные промежутки времени начинает сканировать сеть дополнительно подгружая канал. Не знаю, так это или нет, и насколько справедливо это для проводных сетей, но на всякий случай поставьте ее в состяние отключено, хуже не будет точно. 7) Поставьте самые свежие версии драйверов под ваше железо. Частенько только это дает некоторый прирост в игрухах. Особенно это касается свежего железа и особенно свежих видеокарт. Проблемы сервера Сейчас сервер TF2.Tomsk.Ru состоит из 4-х ядерного проца Q6600, матери на G33 чипсете, 4Гб памяти на Windows XP PRO платформе. Все процессы связанные с ТФ2 сайтом, БД, 4-ми игровыми серверами ТФ2 и прочими сервисами крутятся на одной машине. Анализ произ-ти показал, что загруженность сервера (процессор) в среднем колеблется от 1% до 11%, изредка подпрыгивая выше при сменах карты например и т.п. Загруженность сетевого канала (1Гбит внутри сетки, где установлен сервер, с 100 Мбит выходом в томиковскую сеть) тоже пляшет в вечернее время до 1-2% максимум. Из этого я делаю вывод, что дело явно не в перегруженности сервера как такового, а значит сервер в данный момент с успехом потянет нагрузку и в разы большую чем 50-100 клиентов на данный момент). Поскольку сервер и мой домашний компьютер, с которого я могу играть, разнесены по разным концам города, но подключены к одной сети (Томика), то о проблемах в этой сети я узнаю так сказать первый. Последнее время наблюдается ухудшение кач-ва связи у многих провайдеров в связи с растущим кол-вом подключений (кризис и посему народ пошел в сторону дешевых удовольствий) и при этом отстающим от текущей потребности железом у провайдеров. Ставка у Томики сделана прежде всего на качество предоставляемых услуг. Насколько я знаю, на всем протяжении их сетки проложена оптика с переходом уже в домах в ethernet 100Mbit. На данный момент проблем в сети томиковской нет по качеству связи по моим наблюдениям. Это не реклама, а констатация моего опыта. Ни одного пакета от меня до Томики не теряется при игре на сервере, пинг стабильный, скорость до нескольких мегабайт на пике и в целом трудно желать чего-то лучшего. Из этого пространного рассуждения можно сделать только один единственный вывод, что если хотите идеального коннекта к серверу ТФ2.Томск.Ру, то подключайтесь к провайдеру под названием "Томика". Получите пинг в игре 5, скорость торрента 12 Мбайт/сек и прочие прелести (и кстати дорогущую на мой взгляд внешку, но это уже другой вопрос) . При этом конечно есть много и других хороших провайдеров, где также наверняка доступен пинг 5 и даже где-то лучше (об этом ктсати позже). Но в плане коннекта к нашему серверу Томика будет идеальна. Проблемы связи между сервером и клиентом Эта часть моей публикации беззастенчиво слизана с сайта counterstrike.ru и модифицирована и адаптирована к ТФ2. В TF2 для многих игроков одной из основных проблем являются лаги. Но часто бывает так, что игрок жалуется на хреновый сервер, а проблема на самом деле на его стороне. Этот небольшая статья поможет игрокам понять, что за лаги у них появляются, а также объяснит значение слов ping, choke, rate и т.п. Статья будет полезна всем: и тем, у кого есть лаги, и тем, у кого их нет. Ведь в любой момент они могут появиться, но благодаря этой статье вы можете попытатся их устранить. Основные понятия. Lag (лаг) - термин, применяется к тем, у кого соединение нестабильное и медленное или другимим словами. Ping (пинг) - величина, которая определяет время прохождения сообщения от вашего компьютера до сервера и обратно, измеряется в миллисекундах. Latency (задержка) - величина, которая определяет время прохождения сообщения от вашего компьютера до сервера (она конечно же всегда меньше, чем Ваш пинг). Запомните - ping это не latency! Rates - максимальное кол-во байтов в секунду которое может принимать клиент Choke (буквально - удушье) - это серверный лаг. По сути, это означает, что ваш комп посылает позиции игроков и то, что он делает (стрельба, движения) на сервер, но это всё не доходит до сервера. По умолчанию в TF2 сделано так, что все действия игроков посылаются на сервер 20 раз в секунду. Choke может быть вызван двумя причинами: - Ваш комп посылает слишком много пакетов на сервер в секунду. Если вы пытаетесь послать 100 команд на сервер в секунду, а он может принять только 40, вы получите choke 60. Согласитесь, что это плохо, так как практически ни один из ваших выстрелов не будет зарегистрирован, и только 40% от того, что вы пытаетесь сделать на сервере вашим игроком, будет реально сделано (решение ниже). - Сервер не успевает обработать всю информацию, которая ему посылается. Причиной может быть сетевой лаг на сервере, или лаг CPU на сервере. Клиент не может это контролировать, но может подстроиться под это (решение ниже). Loss (потери) - это лаг вне вашего компа и как правило вне игрового сервера. Это означает, что пока Ваши команды, которые идут на сервер, проходят по определённому пути (иногда им необходимо пройти большое количество сетей), они на просторах сети. Loss очень часто возникает при использовании беспроводного соединения. Loss также нельзя контролировать - это просто плохое соединение. Вот по величине этого параметра можно смело принимать решение о смене провайдера. Если он равен нулю всегда, то у вас все отлично, но чем он больше тем хуже. Tickrate (тикрейт) - во время каждого тика сервер обрабатывает входящие команды, проверяет различные внутренние правила, обновляет состояния объектов игры. Больший тикрейт позволяет добиться большей точности, но и требует более мощный сервер. По рекомендациям Valve сервера с количеством слотов >20 должны иметь тикрейт 66. На нашем сервере ТФ2.Томск.Ру тикрейт 66. Команда net_graph 3 в TF2 Для начала, вам необходимо получит доступ к консоли TF2 (как правило, она автоматически открывается при запуске). Если нет, то нажмите кнопку ~ на клавиатуре. Введите команду "net_graph 3" и нажмите enter (чтобы убрать обратно, введите команду net_graph 0). Как только вы вошли в игру, то в правом нижнем углу вы должны увидеть примерно такую картинку: Описание значений на картинке: FPS - сколько кадров в секунду выдаёт ваша видеокарта на данный момент Ping - величина, которая определяет время прохождения сообщения от вашего компьютера до сервера и обратно, измеряется в миллисекундах. In/Out - сколько tcp/ip пакетов вы посылаете и получаете, а после In/Out (правее) показывается сколько реально килобит в секунду вы посылаете и получаете Loss - потери пакетов ( Если видите значения отличные от 0 то значит плохой коннект от вас до сервера. Это самая худшая ситуация и тут надо думать возможно о смене провайдера вообще) Choke - физически дошедшие но не обработанные по каким-то причинам пакеты А вот столбец из 4-х значений справа не подписан, но представляет для нас некоторый интерес. Сверху вниз это 1) Значение переменной cl_updaterate (Number of packets per second of updates you are requesting from the server) кол-во пакетов в секунду запрашиваемых от сервера (по умолчанию 20) 2) Текущее реальное кол-во пакетов в секунду запрашиваемых от сервера 3) Текущее реальное кол-во пакетов в секунду посланных серверу 4) Значение переменной cl_cmdrate ( Max number of command packets sent to server per second) максимальное кол-во посланных пакетов на сервер (по умолчанию 20) Для установки рейтов, просто введите в консоли нужное значение. Например: cl_cmdrate 30 Итак настроим cmdrate & updaterate. Зайдите на сервер и поменяйте ваши рейты на cl_cmdrate 80 и cl_updaterate 60. Поиграйте несколько минут. Вы должны убедится, что значения в области под номером 2 и 3 на net_graph не урезаются сервером. Если значения всё время показывают 33.3 или 66.6, это значит, что вы должны уменьшить значения до cl_cmdrate 66 и cl_updaterate 45. Поиграйте несколько раундов, и наблюдайте за loss и choke. Если у вас choke, вы должны поставить рейты на более низкие значения. Придерживайтесь соотношения три к четырём, то есть updaterate должен составлять 3/4 от cmdrate. В принципе это необязательно, но желательно. К примеру, если у вас choke 10, то и рейты следует опустить на 10 значений, до cl_updaterate 40 и cl_cmdrate 55. При игре на паблик серверах вполне нормальным считается choke 5 в середине раунда, а в начале и в конце раунда до 10-20 (choke всегда выше в начале и в конце раунда, когда сервер сбрасывает и обновляет объекты). Установка Rate Настройка рейта производится командой rate и позволяет вам установить максимальное количество байтов, которые приходят к вам от сервера в байтах в секунду. В принципе, принято устанавливать следующие значения: Modem 56k - < 20000 Slow DSL/Cable - минимум 20000 Fast DSL/Cable - минимум 25000 Для установки рейтов, просто введите в консоли нужное значение. Например: rate 25000. Еще есть пара странных моментов. После проведенной оптимизации у себя, стал замечать, что пинг на некоторых картах упал до 1-2, что не может не радовать с одной стороны. Особенно на карте ctf_turbine. Но проблема в том, что пинг этот нерегулярен, и, если например сейчас он может быть таким, то через час уже не будет на этой же карте при прочих равных. Иногда при подключении опять же пинг равен 1, но по прошествии небольшого времени становится 2 а потом и 3, 4 и 5. Самый стабильный около 5. Но в целом такие флуктуации наводят на мысль что у сервера ТФ2 есть определенный механизм регулирования как пинга так и скорости обмена с клиентами. Возможно, что он пытается как бы сравнять возможности игроков с теми у кого коннект хуже. Т.е. слегка подрезает скорость обмена с клиентом, с которым мог бы работать и точнее, но не хочет в угоду уравнивания возможностей всех игроков. Но это уже из разряда догадок конечно, и просветить тут могут только создатели игры. Собственно на этом и всё. Надеюсь, приведенная выше информация, хоть кому-то да поможет. Просьба писать о полученном опыте, решениях здесь. Попробую также ответить на возможные вопросы. Ссылки на интересные статьи по теме: http://developer.valvesoftware.com/wiki/Lag_Compensation http://counterstrike.ru/index.php?name=Pages&op=page&pid=138 |
Теги: fps, лаги, lag, оптимизация, article |
Дата: 16.02.2009 22:51 | Обновлено: 27.01.2010 15:36 Sid | все публикации автора → |