Jump to content
Rizer

DServer - сетевые и технические проблемы

Recommended Posts

Думаю что изложенная ниже информация не очень подходит для ветки "Проблемы при игре по сети" 

и заслуживает отдельной темы.

 

Всё ниже изложенное - это не результат каких-то догадок, а выводы основанные на тестах и цифрах.

Я потратил немало времени на тестирование, написание программы для сбора данных и т.п.

Для всех тестов, где так или иначе есть задержки в сети использовался специальных софт, который позволяет эмулировать сеть с заданными параметрами качества.

 

Часть 1. Сетевые проблемы Dserver(ДС).

 

1а.  ДС слишком лояльно относится к сетевым потерям пакетов.

Тесты показали, что он не воспринимает продолжительные потери в 25%, т.е. можно зайти на сервер и летать.

Достаточно регулярно начинает выкидывать с сервера, при потерях  в 30%.

Каждый четвёртый пакет с информацией о вашей стрельбе, местоположении не будет доходить до ДС, а вам за это ничего не будет.

=FB=TL в личной переписке указал, что процент потерь зависит от настроек maxClientPing в sds. Но я проверил, этот параметр никак не влияет. Настроить отдельно этот параметр мы возможности не имеем.

(проверено в версии 2.004)

 

1б. Тот параметр, который показывается на сайте online.il2forever.com или отдаётся по РКОН ДС, не имеет ничего общего с пингом в общепринятом его понимании, скорее всего, это время пакета в пути в одну сторону. Грубо нужно умножать эту цифру на 2.

Если точно, то формула для вычисления ping: ( ДСпинг-10)*2 = realping

Цифра 10 здесь, это стандартная задержка самого ДС.

При этом в игре, в списке серверов - показывается настоящий пинг.

(проверено в версии 2.005)

 

1в. Джиттер(отклонение ping)

ДС при расчёте пинга берёт среднее за последние 25 секунд.

Т.е. у игрока может быть пинг 10мс, потом 2000мс, потом опять 10мс - средний пинг не превысит пороговых значений для кика с сервера.

Приведу пример:

Настройки sds, maxClientPing 150 - т.е. это на самом деле пинг 280(см. п.1б)

Я, игрок с пингом от 0 до 600мс.

Вот лог


Ответ от 192.168.2.56: число байт=32 время=223мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=20мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=37мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=171мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=156мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=43мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=12мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=141мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=123мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=540мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=185мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=124мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=45мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=197мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=125мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=119мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=92мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=281мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=25мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=12мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=500мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=87мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=107мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=463мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=173мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=2мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=470мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=149мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=452мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=331мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=86мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=351мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=140мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=232мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=479мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=192мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=370мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=11мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=233мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=286мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=279мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=239мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=19мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=247мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=208мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=102мс TTL=128

Ответ от 192.168.2.56: число байт=32 время<1мс TTL=128

Ответ от 192.168.2.56: число байт=32 время=253мс TTL=128

 

Статистика Ping для 192.168.2.56:

    Пакетов: отправлено = 186, получено = 186, потеряно = 0

    (0% потерь)

Приблизительное время приема-передачи в мс:

    Минимальное = 0мсек, Максимальное = 661 мсек, Среднее = 194 мсек


 

Скакать в прицеле я буду как муха, проверено. Попасть по мне тот ещё квест.

Но сервера меня не выкинет.

(проверено в версии 2.004)

 

Обо всём этом я написал в личку разработчикам, привёл цифры, но не спасибо, ни даже поправим/не поправим, в ответ не получил.

 

Будет ещё 2 части.

Часть 2 - про лаги самого ДС.

Часть 3 - про зависания ДС.
Edited by rizer
  • Upvote 20

Share this post


Link to post
Share on other sites

Спасибо за труд! Интересно. Может это и есть ключ к устранению рассинхрона в игре.

Share this post


Link to post
Share on other sites

 

Не нужно делать скороспелые выводы, очень долго могут в личке не отвечать, народ все таки работает:) Да и допускаю, что личка изрядно письмами забита:) А за работу спасибо.

Share this post


Link to post
Share on other sites

Спасибо за проведенную работу! Пост со вчерашнего дня ,а разработчики не видят. Уважаемые разработчики откликнитесь  , прокоментируйте пожалуйста.Тема ведь насущная. 

Share this post


Link to post
Share on other sites

Как и обещал. часть 2, по моему мнению, самая захватывающая.

 

Часть 2 - про лаги самого ДС.
Все графики буду дублировать pastenow.ru, так как там лучше качество, чем на форуме.
 
2а. Сетевые задержки в внутри самого ДС(Версия 2.005)
У ДС есть параметр SPS(кол-во симуляций в секунду), т.е. сколько раз в секунду пересчитывается игровой мир.
Эта цифра, если не превышать нагрузку на сервер, всегда имеет значение 50.
Часовой график с сервера крыльев, где видно что это действительно так.
post-24936-0-09636200-1479793248_thumb.jpg
 
При запуске ДС на нём сразу появляется игрок с CID 0 и пингом 10. Такой виртуальный игрок, который находится внутри самого ДС. И цифра 10 - это задержка пакетов между этим игроком находящимся внутри ДС и частью ДС отвечающей за расчёты, т.е. задержка внутри программы.
 
График этого внутреннего игрока и пары игроков с ним, ниже. Время у всех трёх одинаковое по вертикали.
post-24936-0-44382000-1479793206_thumb.jpg
Видите пики у серверного(верхнего игрока) ? И синхронно с ним лагают два нижних.
Второй игрок я, что бы не было вопросов, вот результаты пинга до сервера за тот же период:

Статистика Ping для 195.177.105.58:
    Пакетов: отправлено = 1354, получено = 1354, потеряно = 0
    (0% потерь)
Приблизительное время приема-передачи в мс:
    Минимальное = 10мсек, Максимальное = 20 мсек, Среднее = 10 мсек

Ещё пример:
post-24936-0-37779900-1479793116_thumb.jpg
Архангел снизу, четко повторяет фризы ДС.
 
Ещё:
post-24936-0-54448800-1479793335_thumb.jpg
Оба игрока со стабильным пингом лагают вслед за ДС.
 
Я специально выбирал время, когда сервер лагало не сильно, что бы были видны и всплески и моменты спокойствия - так чётче заметна взаимосвязь между задержками сервера и игроков.
Во всех примерах, да вообще всегда, SPS стабилен, 50, что даёт нам ложную иллюзию, что с сервером всё в порядке.
 
Да, корреляция есть не всегда, и бывают скачки пинга без видимых выпадов у графика игрока ДС.
Объяснение простое:
В п. 1в я писал , что ДС при расчёте пинга берёт среднее за 25 секунд, плюс результат обновляется раз в 3 секунды - небольшие или кратковременные всплески просто сглаживаются и становятся незаметны.
Из этого также следует, что даже небольшой всплеск на графиках, в реальности может быть в несколько раз сильнее.
Скачок 20-50 мс на графике - это до 150 мс в реальности, скачок в 100 - запросто может оказаться 500 мс. Помните как нас всех на дедах фризило по 100-300 миллисекунд? )
 
Я просмотрел много этих графиков - иногда пинг прыгает вместе с пингом ДС почти у всех игроков, иногда у некоторых, иногда прыгает без видимых причин. Но общая зависимость вполне просматривается, ДС сам вносит подавляющую часть задержек в задержки связи.
 
2б. Лаги от обращений к ДС по РКОН(Версия 2.005)
Моя программа, на данный момент, собирает данные раз в 3 секунды.
В процессе её тестирования, я естественно думал о нагрузке на ДС, и задавая разную частоту опроса, смотрел на нагрузку ДС, на параметр Tick(по сути этот параметр означает, сколько времени занял один цикл просчёта).
Даже очень высокая частота опроса, десятки раз в секунду никак не влияла на Tick
Но сейчас выяснилось, что достаточно опросов раз в секунду, что бы влиять на лаги ДС, того самого серверного игрока.
Объём там смешной, список игроков полного сервера это - 11 Кбайт.
Но тем не менее, факт. Не знаю, как часто те же TAW или DED expert  работают с РКОН, но это ещё один потенциальный источник лагов ДС.
 
 
Выводы по части 1 и 2.
Да, безусловно есть игроки с плохой связью, и я проводил тесты - плохая связь заставляет самолёты дёргаться, скакать и т.п.
Но во первых, как я писал в первой части, ДС очень лояльно относится к игрокам с плохой связью. И не даёт нам никаких настроек для фильтрации таких людей.
Во вторых, даже будь у нас такая возможность, сейчас толку от этого 0.
Именно синергия лагов самого ДС и возможных проблем со связью у отдельных игроков не даёт нам никакой возможности как-то отделить одно от другого.
 
У меня более вопроса, как и почему лагает, не возникает.
 
PS. Будет ещё 2 части, про технические ошибки РКОН и зависания ДС.
Edited by rizer
  • Thanks 1
  • Upvote 17

Share this post


Link to post
Share on other sites

rizer, спасибо в очередной раз за информацию. А не знаешь ли ты случайно, как это реализуется в других играх?

 

 

 

Объём там смешной, список игроков полного сервера это - 11 Кбайт.

 

А что передается в этих данных?

Share this post


Link to post
Share on other sites

 

 

А что передается в этих данных?
 

(Ник, пинг, состояние, id профиля 2шт разных) * 85


 

 

rizer, спасибо в очередной раз за информацию. А не знаешь ли ты случайно, как это реализуется в других играх?
 

Я точно знаю, что сделать можно, яркий пример по Eve online.

А как -  всех по разному, глупо что - то измышлять не видя реализации, кода ...

Share this post


Link to post
Share on other sites

 

 

Но тем не менее, факт. Не знаю, как часто те же TAW или DED expert  работают с РКОН, но это ещё один потенциальный источник лагов ДС.

Факт. Мы, например, при работе с перезапуском\рестартом карт и управлением DServer были вынуждены отказаться от удаленного управления через консоль, ибо DServer.exe стабильно подвешивался.

Причину искать не смогли\не стали, по сию пору управляем через rdp.

Share this post


Link to post
Share on other sites

(Ник, пинг, состояние, id профиля 2шт разных) * 85

Ага, спасибо. А не знаешь случайно, какой (примерно) объем данных передается в секунду(или в какой-то момент времени) для передачи действий (позиционирование, стрельба и положение снарядов и т.п.)? Очень интересно.

 

Я точно знаю, что сделать можно, яркий пример по Eve online.

Я думаю, что разработчики тему видят и обязательно прокомментируют.

Share this post


Link to post
Share on other sites

Йонен, он про передачу данных в управляющую консоль говорил. Консоли нафиг не нужны данные про положение стрельбу, снаряды и все такое...

Share this post


Link to post
Share on other sites

Часть 3, про проблемы РКОН.(версия 2.005)

Тут ничего захватывающего, просто памятка для тех захочет писать какой-то софт для взаимодействия с ДС.

 

РКОН иногда, примерно раз в сутки у меня, в ответе подмешавает случайные символы )

Т.е. начало ответа, почти во всех случаях должно выглядеть так "STATUS=1" и дальше данные.

Но в некоторых случаях, первый символ ответа ":" или ";" , получается   ":STATUS=1" или  ";STATUS=1"

Понятия не имею почему так, но если парсите ответы РКОН имейте это ввиду и пишите корректный обработчик.

 

РКОН иногда перестаёт отдавать данные - виснет.

Может просто не отвечать, может упасть в процессе передачи данных.

Частота несколько раз в сутки, длительность 10-30 секунд.

Видимо в ДС есть какой-то триггер, который перезапускает РКОН, так как больше чем на 30 секунд он никогда не пропадает.

 

Очень странная работа с сокетом.

При любой неправильной команде или авторизации, РКОН закрывает сокет.

Но делает это не корректно, по моему мнению, так как принимающая сторона, считает что сокет всё ещё открыт.

И если вы попытаетесь что записать в этот сокет, получите ошибку.

Я не знаток, и в RFC  по этому поводу не стал лезть, но с таким странным поведением сталкиваюсь впервые.

Для себя просто сделал, поправку, если ответ, не "STATUS=1", то я со своей закрываю сокет.

  • Upvote 6

Share this post


Link to post
Share on other sites

Поскольку эта тема меня тоже задела - провел несколько экспериментов.

В системе 4 ядра и сервер начинает тормозить всего при 25% нагрузке.

При этом не важно - играю я сам на этой же системе в клиенте или нет.. т.е. ресурсов  ещё много, а они не расходуются.

Поднятие приоритета (последовательно, вплоть до "приоритет реального времени (Realtime) — 24") существенно не повлияло. Схема электропитания - давно по максимуму.

 

Промелькнула информация об однопроцессорном коде и тут да - всё сошлось.

Средствами 10-ки отдал серверу 1-е ядро, все остальные процессы(какие позволила ОС) перенаправил на оставшиеся 3 ядра. Такое разделение пошло только на пользу, устойчивость Dserver повысилась как минимум на 10%.

Как-то так.

  • Upvote 1

Share this post


Link to post
Share on other sites

Можно еще перенести на виртуальный RAM-диск всё, что подгружает сервер.....

В связи с этим вопрос - кто может подсказать, какие файлы необходимы серверу. Не весь клиент ведь, нужен, и память не резиновая

Share this post


Link to post
Share on other sites

@@Rizer у рассинохрона ноги растут из части 2? Из за сглаживания сети сервером ?

Share this post


Link to post
Share on other sites

Из комбинации 1 и 2 части.

Как я писал выше, отделить одну проблему от другой нельзя на данный момент.

Share this post


Link to post
Share on other sites

Подниму тему.

На данный момент, версия 3.004, список проблем остался прежний.

 

 

Есть набор хотелок, относительно rcon:

1. Заменить сокет конект на rest сервисы

2. К сервису бана добавить параметр продолжительность 

3. Сам сервис бана должен срабатывать и когда пользователя нет на сервере.

4. Добавить сервис старт/стоп сервера с параметром сдс(как боди/как путь)

5. Сервис отправки сообщений сделать в utf-8

 

  • Upvote 1

Share this post


Link to post
Share on other sites

Dserver зависает и не убивается в диспетчере задач с установленным апдейтом:

Microsoft .NET Framework 4.7.2 for Windows Server 2008 R2 for x64 (KB4054530)

Installation date: ‎7/‎15/‎2018 5:03 PM

Installation status: Successful

Update type: Recommended

The Microsoft .NET Framework 4.7.2 is a highly compatible, in-place update for all the previous versions of .NET Framework 4.X. After you install this update, you may have to restart your computer.

More information: 
http://support.microsoft.com/kb/4054530

Help and Support: 
http://support.microsoft.com

Edited by =E95=DenLarik

Share this post


Link to post
Share on other sites

Постоянно вылетает дсервер в 3.005c

Скрытый текст

 Имя сбойного приложения: DServer.exe, версия: 1.0.0.1, метка времени: 0x5b5892f3
Имя сбойного модуля: DServer.exe, версия: 1.0.0.1, метка времени: 0x5b5892f3
Код исключения: 0xc0000005
Смещение ошибки: 0x000000000001effe
Идентификатор сбойного процесса: 0x2944
Время запуска сбойного приложения: 0x01d424fb2343d074
Путь сбойного приложения: D:\Dserver\bin\game\DServer.exe
Путь сбойного модуля: D:\Dserver\bin\game\DServer.exe
Идентификатор отчета: 4aa50aa8-11ef-4f7c-9a68-85127a8faf2f
Полное имя сбойного пакета: 
Код приложения, связанного со сбойным пакетом: 

DServer.exe 
   1.0.0.1 
   5b5892f3 
   DServer.exe 
   1.0.0.1 
   5b5892f3 
   c0000005 
   000000000001effe 
   2944 
   01d424fb2343d074 
   D:\Dserver\bin\game\DServer.exe 
   D:\Dserver\bin\game\DServer.exe 
   4aa50aa8-11ef-4f7c-9a68-85127a8faf2f 

 

AppCrash_DServer.exe_1cd47a5b647a9cfc28343022c42e2fccf19b4_e9df5395_302c9dbb.zip

Share this post


Link to post
Share on other sites

Заметил такой непонятный момент:

Запущен ДС сервер на машине клиента (не из игры). Если игроков нет - логфайлы "мишнлог...",  от которых недавно избавились, создаются в папке ДАТА Ила с завидной периодичностью раз в 1-2 минуты, а то и чаще, но при выключении ДС сервера самоудаляются (чтобы проверить - достаточно запустить любую миссию на ДС сервере клиента, открыв при этом папку ДАТА Ила).

Если же на сервере присутствовал какой-либо клиент, файлы остаются и не удаляются. Папка ДАТА опять заполняется этими "паразитами". У меня после работы сервера - одной миссии в течении одного - полутора часов накопилось более 20 таких файлов.

Edited by =K=Atom
  • Upvote 1

Share this post


Link to post
Share on other sites

Хотел бы спросить у разработчиков, появилось ли у вас какое то видение решения проблемы с серверами войнами в онлайне? 


Расширение кол-ва онлайн игроков на серверах до 128, или клонирование ТАВ сервера ? Или ваш собственный сервер с войной, статистикой и линией фронта? Помните, так же было предложение к вам запустить платный сервер с войной, для бОльшей монетизации проекта. В общем, можно ли ожидать каких то подвижек с вашей стороны в этом вопросе или в этом году таких работ не планируете?

 

PS Я так же хочу приложить скриншот с сервера статистики ТАВ. На данный момент зарегистрировано 2028 участников для сервера с мах вместимостью 84 чел.

http://prntscr.com/mw9a7s 

 

Спасибо.

  • Upvote 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...