No Image

Hearts of iron 4 рассинхронизация

245 просмотров
11 марта 2020

Привет, ребята! Сегодняшний дневник будет немного коротким, потому что я сейчас на конференции (там есть бесплатные завтраки! Два лучших слова в мире!)

На прошлой неделе мы отмечали третью годовщину выхода HOI4 и выпустили обновление 1.7 «Гидра», а также набор радиостанций и бронетехнику Оси. Надеюсь, вам они пришлись по нраву.

После выходных мы просмотрели данные телеметрии после выхода 1.7 и отметили, что рассинхронизаций в мультиплеере стало больше. Это означает, что мы добавили в игру новую проблему с синхронизацией. Хотя в HOI4 и была возможность восстановить синхронизацию и хотджойн, рассинхрон был довольно утомительным явлением, так что в данный момент мы планируем решить эту проблему в небольшом хотфиксе (1.7.1). Рассинхроны довольно сложно найти и исправить, так что мы пока не назначаем дату выхода, поскольку ещё продолжаем искать их. Но буквально вчера мы напали на след проблемы, и в данный момент работаем над решением.

Техническая секция (внимание!): Что такое рассинхрон?

Я решил немного расписать для тех, кому интересно, что такое рассинхрон. Пропускайте это без колебаний, если вы. нормальный человек, думаю xD

Рассинхронизация (OOS) происходит, когда игры хоста и клиента в мультиплеерной игре начинают действовать по-разному. Например, на одном компьютере сражение закончилось победой Германии, а на другом — победой СССР. Но обычно всё не настолько серьёзно, и различия зачастую проявляются раньше, скажем, в том, что на одном компьютере у дивизии организация на 1% выше, чем на другом, или что-то в таком духе. Как только это происходит, игровой опыт разных игроков начинает различаться, поэтому мы останавливаем игру и предупреждаем игроков. В этот момент хост может нажать кнопку «Ресинхронизация», чтобы вновь синхронизировать игру. Ресинхронизация восстановит состояние игры, разошлёт в качестве сохранения текущее состояние игры у хоста, все остальные игроки загрузят его, и игра продолжится.

Итак, что же может вызвать рассинхронизацию? А вот это уже сложный вопрос, и каждый раз, когда мы обнаруживаем проблему, причина оказывается новой. В число хороших кандидатов входит кроссплатформенный мультиплеер, потому что базовые библиотеки кода могут в отдельных случаях вести себя по-разному. Другая частая причина — мультипоток. Мы разделяем на потоки значительную часть кода, но для того, чтобы поддерживать синхронизацию, мы должны убедиться, что события происходят в одинаковой последовательности на всех машинах, если они влияют на состояние мира. Ещё могут быть проблемы вроде работы с тайной памятью, которые могут неожиданным образом изменить состояние игры (или привести к вылету. но это просто найти и исправить!).

Поиск и исправление рассинхронов может быть долгим процессом, просто потому, что зачастую это редкие случаи, и определение конкретных обстоятельств обычно требует множества шагов и итераций. Для их поиска мы проводим мультиплеерные тесты с QA с особыми настройками, которые разделяют наши огромные файлы логов (зачастую это безумно замедляет игру), а как только случается рассинхрон мы сравниваем файлы логов и сохранения и ищем отличия. Зачастую это даёт нам стартовую область поиска. Скажем, к примеру, что у вас отличается уровень организации войск. Тому может быть множество причин — потери в боях, погода, плохое снабжение и т.д. Так что мы увеличиваем лог соответствующих частей кода и проводим новый тест. Если повезёт, это покажет, которая из наших догадок была правильной, а затем мы повторяем с большим количеством логов и большими деталями в данной области. Разумееся, самые интересные рассинхроны пропадают, когда вы добавляете логи и весь процесс замедляется ;P

После обнаружения и исправления, следующим этапом мы выпускаем открытый бета-патч, чтобы проверить, работает ли исправление, или, если мы уверены, что нашли проблему, то сразу выпускаем обычный патч. К слову о бета-патчах, спасибо вам за помощь в тестировании 1.7! Мы получили примерно 30 000 тестовых игровых сессий за выходные перед выходом окончательной версии, и это здорово помогло нам!

Читайте также:  Продление пакета интернета мегафон

Надеюсь, вам было интересно читать этот небольшой обзор технических нюансов закулисной работы над HOI4. Если у вас есть вопросы, спрашивайте, не стесняйтесь!

Часть команды, не занимающаяся решением проблем с рассинхронизацией, перешла к работе над 1.8 «Хаски» и следующим расширением, но работа ещё только началась и мы ещё не скоро что-либо вам покажем. Так что это будет последний дневник перед перерывом (и предстоящим славным шведским социалистическим отпуском!), а потом уже нам будет что показать.

Увидимся на той стороне! И поглядывайте за анонсом хотфикса 1.7.1.

Я программист, которому было поручено решение этой конкретной проблемы с рассинронизацией, так что я могу добавить ещё немного технических деталей для людей с нужным сдвигом в мозгу.

На этом этапе охоты за рассинхронами мы улучшили наши средства контроля и отладки:

  • Мы переделали сложную систему логов, которую мы включали, когда пытались поймать непосредственно момент рассинхронизации и выяснить, что такого в это время делала игра, что компьютеры шли в разнос, но до того момента, когда сами компьютеры осознают расхождение. Поскольку нам интересны только последние сообщения в логе, теперь мы пытаемся регулярно отбрасывать старые данные и тем самым избегать файлов лога размером в несколько гигабайт. Это позволяет нам делать более полные логи, не рискуя под завязку забить жёсткие диски нашей команды.
  • Мы рационализировали процесс сбора логов и сохранений, так что когда кто-то из команды или QA получает рассинхрон во время мультиплеерной сессии каждая машина автоматически запаковывает все относящиеся к делу файлы, чтобы было проще добавить данные в багрепорт или отправить их программисту, в данный момент ответственному за атаку на рассинхроны.
  • Мы увеличили разброс данных из различных систем, которые мы отслеживаем каждый игровой час, повышая вероятность как можно быстрее заметить рассинхрон. Каждая рассинхронизация сначала затрагивает небольшие участки редко проверяемых данных, а затем распространяется, и всё больше и больше данных рассинхронизируется. Когда игра осознаёт различия между машинами, уже слишком много данных отличается, и невозможно понять, какой кусок данных первым рассинхронизировался. Так что чем быстрее мы обнаружим рассинхронизацию, тем выше шанс понять причину и исправить её.
  • Теперь мы можем добавлять проверки в наши внутренние версии игры, чтобы убедиться, что мы не считываем и не записываем в поток данные, которые в то же время изменяются в другом потоке. Это работает даже в одиночной игре, и программист узнает, что кусок кода сделал что-то неприятное, способное привести к рассинхронизации, в тот самый момент, когда это происходит. Нам всё равно нужно расширять проверки в значимых областях, но с ростом покрытия мы снижаем риск скрытых рассинхронов.

Наша текущая зацепка в поиске рассинхронизации связана с четвёртым пунктом. У каждой страны есть отдельный поток, в котором проверяется, что она собирается делать с войсками, и у нас есть один поток, претворяющий эти планы в жизнь, по одной стране за раз. Обычно это работает нормально, но вот добровольцы — случай отдельный, ведь они управляются одной страной, но действуют в контексте другой страны.Был отдельный кусок кода для передвижения дивизий через водные преграды, в котором проверялось, достаточно ли конвоев для транспортировки (в случае с добровольцами это проверялось в потоке отправившей их страны, но использовались конвои страны-получателя). Если конвоев достаточно, перемещение добавится в очередь ожидания для дальнейшего исполнения, когда всё исполняется в одном потоке, и нет риска различий в части приказов. В противном случае действие вовсе не появится в очереди.К сожалению, в очень редких случаях у страны-получателя едва хватает конвоев и из-за разницы во времени между потоками ситуация может усложниться. Одна машина обрабатывает страну, контролирующую добровольцев, раньше и ставит перемещение в очередь до того, как поток страны-реципиента тратит конвои на что-то другое. Между тем, другой компьютер обрабатывает страну-реципиента ещё раньше, и тратит конвои до того, как страна-отправитель задумывается о перемещении их по морю. Итак, первый компьютер пытается начать переброску по морю, полагая, что конвоев хватает, а второй компьютер оставляет войска на месте, потому что конвоев всё равно не хватило бы. Бац! Рассинхронизация.Чтобы исправить это, мы попытаемся добавить несколько слоёв защиты. Во-первых, при исполнении поставленного в очередь действия мы повторно проверим количество конвоев и просто пропустим действие, если их не хватает, и с этим согласятся все компьютеры на данном этапе исполнения. А чтобы удостовериться в синхронизации поставленных в очередь действий в тот период, когда количество доступных конвоев ещё не определено, добровольцы будут проверять последнее известное стабильное количество конвоев, а не текущее их количество, которое могло быть изменено в другом потоке.И, как отмечено в четвёртом пункте, мы добавили проверку конвоев, так что любой код, желающий проверить статус конвоев страны, будет подтверждать, что исполняется в контексте, где это делать безопасно. В противном случае исполнение прервётся, а программист получит оповещение об ошибочном коде.Так мы не только решаем проблему с ростом рассихронов, появившихся с выходом 1.7, но благодаря улучшениям инструментов оказываемся в лучшем положении для отлова других недавно добавившихся проблем с синхронизацией в процессе разработки.

Читайте также:  Как изменить цвет меню пуск
Опции темы
Отображение
  • Линейный вид
  • Комбинированный вид
  • Древовидный вид

Решил поиграть со знакомым в циву через лобби. В настройках игры указали возможность случайных событий. Потом в игре часто происходила рассинхронизация, как раз после какого-либо случайного события. Конечно, сейчас играем совсем без них, но все-таки хотелось бы с ними.
Играем в "Эпоху Огня", пропатченную до 3.17 патчем с наш-фанатиков.

Рассинхронизация бывает у всех, это не ново, Привикни играть без случайных событий, почти все игры в лобби так играются

Спасибо. Я думал, что это у нас в клиенте проблемы. А при игре через ip тоже самое будет?

никогда не играл через IP и представления не имею об нем.

Странно – сегодня играл с иностранцами с случайными событиями – рассинхронизации не происходило. Так от чего это зависит? Может, моему оппоненту стоит переставить циву?

Есть предположение, что рассинхронизация вызвана не соответствием файлом или еще каким нибудь несоответствием

По сути предположение верное, также считаю. "Но воз и ныне там" самое любопытно, что версии полностью идентичны, посредством которых играем в сети(через direct ip), но рассинхронизация проявляется образуя для двух 2-3 пользователей параллельную совершенно различную историю игры. Оставшиеся варианты ругнуться на мелкософтовое детище и проверить мультиплеер BTS с патчем 3.17, а то с 3.13 параллельные миры какие-то выходят, играть просто невозможно.

We played with 10 players. But I could play with 16 in starcraft since the 2000s without any problems 🙂

And Starcraft happens to be such an incredibly poor comparison that it’s not even a comparison. Starcraft only has to send packets about unit movement to clients. HOI has to send information about each single division, their stats, their movement, construction, infrastructure and so on and so forth.

Читайте также:  Как отформатировать флешку через cmd

TDLR: There’s a LOT more data being sent back and forth between the host and players in this game than Starcraft could ever hope to do.

We have desyncs the whole time and its down to the fact that one players system is having serious performance issues. Its not an old machine, but there seem to be a lot of people having performance issues due to the fact that the engine doesnt support multithreading.

Whoever is causing the desync shoud run MSI Afterburner or something and check if his cpu is maxing one core out. Don’t know the fix yet, but will fiddle around with it later.

We have desyncs the whole time and its down to the fact that one players system is having serious performance issues. Its not an old machine, but there seem to be a lot of people having performance issues due to the fact that the engine doesnt support multithreading.

Whoever is causing the desync shoud run MSI Afterburner or something and check if his cpu is maxing one core out. Don’t know the fix yet, but will fiddle around with it later.

i really have to say i really hate the fact that i cant do anything in multiplayer. i am very much aware of the fact that lots of information is send in this game but not having a really good internet connection prevents you from doing anything because of desynchs and lagging. well of course there is a chance of me or the host doing something wrong (ports?) but still it makes me furious i really want to play this in MP but simply cant -.-*

We have desyncs the whole time and its down to the fact that one players system is having serious performance issues. Its not an old machine, but there seem to be a lot of people having performance issues due to the fact that the engine doesnt support multithreading.

Whoever is causing the desync shoud run MSI Afterburner or something and check if his cpu is maxing one core out. Don’t know the fix yet, but will fiddle around with it later.

+1 to What he said. For a game comming out in 2016! atleast they could have programmed to take use more then a single core. Which sucks bcuz average gaming PC now a day have 4 cores and some of us have Hexa cores like 5930K. Game is very engaging but mp issues are a let down for now.

Processor speed and core usage does not matter on a MP game lol, unless they are lagging in SP which there system must be very old to do so. My PC is 3 years old now, and runs the game fine on max AA etc.

GTX 770
I5-4670 @ 3.4ghz
8gb RAM

It most likely would be their internet connection.

While most desktops do use 4 cores or more now, laptops still use dual-core processors(that are fairly strong) so they cater to that market as well. Unfortunately a large number of people think laptops are good for gaming still, and as such developers take that into consideration for more money.

Комментировать
245 просмотров
Комментариев нет, будьте первым кто его оставит

Это интересно
Adblock detector