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 | XBOXSX | XONE
Жанры
Дата выхода
17 сентября 2013
+4610
4.5
4 766 оценок
Моя оценка

Grand Theft Auto Online

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

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

AltairWN 1 марта 2021, 14:33

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

nekiiiiita 1 марта 2021, 14:40

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

Simon4 1 марта 2021, 16:10

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

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

Lekarta 1 марта 2021, 15:29

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

psychologic 1 марта 2021, 14:40

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

ViNT1369 1 марта 2021, 14:35

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

Kallysta 1 марта 2021, 15:25

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

Stas776 1 марта 2021, 14:42

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

Simon4 1 марта 2021, 15:04

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

darff 1 марта 2021, 15:53

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

Chevalert 1 марта 2021, 16:23

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

Haru 1 марта 2021, 19:17

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

DrGluck 2 марта 2021, 13:03

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

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

Stas776 1 марта 2021, 14:37

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

qb15 1 марта 2021, 16:38

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

Читай также