1 марта 2021 1.03.21 72 51K

Энтузиаст утверждает, что нашёл причину долгих загрузок в GTA Online и сократил их на 69 %

Grand Theft Auto Online отличается чудовищно долгими загрузками — на них жаловались ещё семь лет назад, когда игра только стартовала, и продолжают жаловаться сейчас. Некто T0ST утверждает, что разобрался в проблеме, нашёл один из основных источников бед и сумел сократить загрузки почти на 69 %.

Для начала — замеры автора и конфигурация его PC.

  • Сюжетный режим загружается примерно за 1 минуту 10 секунд.
  • Онлайн-режим загружается примерно за 6 минут.
  • Стартовое меню отключено, вход в Social Club не учитывается, время считается от логотипа Rockstar Games до геймплея.
  • Компьютер:
    • процессор — AMD FX-8350,
    • SSD — Kingston SA400S37120G,
    • оперативная память — две Kingston 8 192 Мб (DDR3-1337) 99U5471,
    • видеокарта — GeForce GTX 1070.

Как подчёркивает T0ST, он прекрасно знает — PC у него староват. Но вряд ли сборка настолько дряхлая, что онлайн загружается аж в шесть раз медленнее сюжетного режима. Кроме того, он нашёл свежий опрос на Reddit, по результатам которого 80 % из 271 участника пережидают в GTA Online загрузки от трёх минут или больше.

Комментарии красным — от T0ST.
Комментарии красным — от T0ST.

В общем, T0ST надел плащ хакермена и начал раскопки. Сперва он обнаружил, что во время загрузки GTA Online есть период длиной больше 4 минут, когда одно из ядер процессора нагружается как следует, а накопитель, поток сетевых данных, ОЗУ и видеокарта практически простаивают. По наблюдениям T0ST, это начинается, когда GTAV загрузила всё, что касается одновременно сюжетного и сетевого режимов, и приступает к обработке данных, необходимых только для сетевого режима.

T0ST сделал вывод, что дело в очень плохом коде. Применив программистскую магию, он разобрал процессы GTAV на составляющие и выяснил, что в период нагрузки на одно ядро происходит синтаксический анализ файла JSON размером 10 мегабайт, куда входит около 63 000 записей. По мнению T0ST, в этом JSON хранятся данные товаров во внутриигровых магазинах (но напрямую с микротранзакциями они не связаны).

Как рассказывает T0ST, 10 мегабайт записей — это не беда, но программная логика не оптимизирована и читает эти данные слишком дотошно. С этим связана и вторая существенная проблема — программисты Rockstar не сделали толковое хеширование, из-за чего происходит чересчур много перепроверок данных.

Подозрительная нагрузка на одно ядро процессора.
Подозрительная нагрузка на одно ядро процессора.

Чтобы проверить свои догадки, T0ST собрал самопальную DLL-библиотеку и всунул её в GTAV. Она добавляет кеширование для анализа JSON и убирает ненужные проверки дублирования записей.

Результат загрузок GTA Online:

  • Без патчей — около 6 минут.
  • С патчем на устранение проверок дублирования — 4 минуты 30 секунд.
  • С патчем парсинга JSON — 2 минуты 50 секунд.
  • С обоими патчами одновременно — 1 минута 50 секунд, то есть на 69.4 % быстрее, чем в оригинальной версии.

T0ST пишет, что это не устранит вообще все проблемы с загрузками GTA Online на всех системах, но такая дыра в коде, мол, обнаруживается элементарным образом. «Если Rockstar каким-то образом это увидит — решение проблемы не должно занять больше одного дня и одного разработчика. Пожалуйста, сделайте с этим что-нибудь :<» — заканчивает своё расследование T0ST.

Подробнее изучить методику поиска можно в оригинальном посте. Осторожно: для понимания всего происходящего необходимы навыки программиста.


Поддержи Стопгейм!

Grand Theft Auto V

Платформы
PC | PS3 | PS4 | PS5 | X360 | XONE | XBOXSX
Жанр
Дата выхода
17 сентября 2013
7K
4.5
6 504 оценки
Моя оценка

Grand Theft Auto Online

Платформы
PC | PS3 | PS4 | PS5 | X360 | XONE | XBOXSX
Жанры
Дата выхода
1 октября 2013
855
3.9
808 оценок
Моя оценка

Лучшие комментарии

Автор, конечно, молодец. Жаль, что Rockstar плевать. Если бы они хотели решить проблему, которая тянется ещё со времён PS3, они бы уже давно это сделали.

ты серьезно так думаешь?? единственное, что умеет делать rockstar/take2  в данной ситуации- подавать на человека в суд за нарушение А.П. (и распространение читов?), к сожалению

Ни в коем случае я не жалуюсь, я словил неистовые лулзы

Несложно догадаться по вашей аватарке.

А вместо благодарности ему прилетит иск от ТэйкТу — за неправомерное копание в собственности компании ТэйкТу.

Следующая новость: «Take Two подали в суд на энтузиаста и заставила его удалить все данные о разработке»

Да срали рокстары на оптимизацию. Если игра приносит баблишко, они будут только что и делать, что добавлять микротранзакции и прочий мусор.  Им же нужны только бабки)

Копнул хорошо. Вот только тем, кто действительно может это править — плевать. Оно ж и так работает, чего менять-то. Грустно.

Один и тот же кусок кода с Stack Overflow скопировали

В идеальном мире один день, а в нашем — недели две минимум :\ Это ж в спринт запихать, менеджера выделить, трудозатраты оценить, по приоритетности оно тоже окажется в… ну… не очень высоко. Потом когда очередь дойдет запрогать — еще протестировать это всё… Хотя мало ли, вдруг рокстары чуть менее бюрократы х)

Причём срут на оптмизацию они очень успешно. За последние 5 лет фпс в онлайне становится всё ниже и ниже, когда в одиночке он космически высокий

Да там и комьюнити получше будет. Все друг с другом здороваются, на чужие доставки самогонов/товаров никто не нападает, зверьё усыплять помогают. Откровенных читеров давно не видела, да и те что были агрессии не проявляли. Даже как-то странно что в РДО играют настолько нетоксичные люди.

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

Наглядная и безапеляционная демонстрация отношения Рокстар к пользователям и оптимизации, коли за семь лет так и не исправили проблему, требующую меньше суток и одного программиста.

Вот мне кажется, что все те, кто делают всякие медленные многоэтапные интерфейсы\экраны статистики — так и думают. И пофиг им, что человек заходит поиграть, например, с 8 до 12, и от того что он грузится\втыкает в эти экраны половину времени — на подольше он не задержится. Зато это время он, фактически, не участвует в онлайн-активности, т.е. реально активный онлайн от этого только снижается. Т.е. в поиске матча могло быть, например, 100к людей, но будет вдвое меньше, т.к. половина в это время проматывает не пропускаемую одним кликом статистику, грузится в меню, грузит интерфейс и прочее-прочее.

Если вдруг кому интересно узнать подробнее, на Хабре есть хороший перевод этого поста.

На самом деле это типичный пример алгоритма, достаточно быстрого чтоб попасть в продакшен, но достаточно медленного, чтоб вызвать проблемы на больших данных. Такое часто бывает, и в крупных проектах в том числе. «Сейчас сделаем чтоб работало, а затем поправим, вот я даже таску создал чтоб не забыть». И эта таска висит потом годами в низком приоритете. Лично мне непонятно почему они делали нативный парсер, хотя есть сколько угодно библиотек, которые делают это правильно. Ну а раз уж делали, то должны же быть юнит-тесты, которые выявят проблемы парсера.

Самое интересное, что в RDR Online проблему частично решили. По сравнению, с ГТА: О, там загрузки намного быстрее, а иногда прям космически быстрее

Нет, просто тупую одинаковую ошибку допустили два разных человека. Так бывает

Читай также