Как я сократил время загрузки GTA Online на 70% / Хабр

Достаточно много у кого долго загружается GTA Online или даже однопользовательский режим. В данной статье мы разберем и найдем способы устранения проблем.

Причины бесконечной загрузки «GTA 5»

Впервые о проблеме стало известно в 2013 году, когда «Grand Theft Auto V» только появилась на полках магазинов. С тех пор прошло много времени, однако разработчикам так и не удалось избавиться от ошибки. Зато активные пользователи смогли выделить целый ряд причин возникновения бесконечной загрузки.

заставка игры

К основным причинам относятся следующие факторы:

  • неисправность файла settings.xml;
  • проблемы с подключением к серверу Rockstar Games;
  • отсутствие интернет-соединения;
  • наличие кириллических символов в директории игры.

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

появление ошибки

Первопричины

Причины того, почему долго загружается GTA Online, могут быть самыми разнообразными. В первую очередь следует отметить, что разработчики со студии Rockstar Games используют тип соединения peer-to-peer. Оно далеко от идеала, о чем следует всегда помнить. Компания всегда предпринимает попытки улучшения, но проблема остается актуальной из-за постоянных обновлений и добавления нового контента.

osibki_v_gta.png

Всегда хорошо поиграть в любимую игру с комфортом

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

Грустная правда о длинных загрузках в GTA Online

Хотим вас огорчить, но вы ничего не сможете сделать, чтобы полностью избавиться от длинных загрузок в GTA Online. Возможно, дело в том, что для своих многопользовательских игр Rockstar используют этакий гибрид из серверов и peer-to-peer, а возможно, что проблема заключается в самой архитектуре игры.

Так или иначе в интернете можно найти огромное множество обсуждений касаемо длительных загрузок в GTA Online — по сей день так и не было найдено эффективного решения, которое бы полностью устранило или в значительной мере сократило бы загрузки. Однако вы можете воспользоваться так называемыми «костылями», которые потенциально могут немножечко ускорить процесс загрузки GTA Online, чтобы тот не казался таким невыносимым.

Разведка

Для начала я захотел проверить, не решил ли уже кто-нибудь эту проблему. Большинство найденных результатов состояло из анекдотичных данных о том,

насколько сложна игра

, что ей приходится грузиться так долго, историй об отстойности

сетевой архитектуры p2p

(и в этом есть правда), сложных способов

загрузки в сюжетный режим, а после него в одиночную сессию

и пары модов, позволявших пропустить начальное видео с логотипом компании R*. Некоторые источники сообщали, при совместном использовании всех этих способов можно сэкономить аж целых 10-30 секунд!

Тем временем на моём PC…

3. Действия с роутером.

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

Фото из открытых источников.Фото из открытых источников.

Фото из открытых источников.

Ускоряем загрузки в GTA Online

Эксперименты с роутером

Если вы используете Wi-Fi маршрутизатор, то обязательно убедитесь, что тот исправно работает. Перезагрузите его несколько раз, обновите прошивку до последней актуальной версии. Также мы советуем вам протестировать, как игра будет себя вести на проводном подключении.

Установка игры на SSD

Сюжетный режим GTA 5 известен своими длинными загрузками. Благо, их можно крайне сильно сократить, установив игру на твердотельный накопитель. Понятное дело, SSD не будет играть никакой роли при установке подключения к той или иной сессии GTA Online, однако он должен ускорить процесс загрузки внутриигровых ассетов.

Переход на публичные DNS сервера

Переход на публичные DNS-сервера — популярный совет среди многих пользователей в сети. Кто-то говорит, что ему это помогло, а кто-то — нет. Впрочем, не будет никакого вреда, если вы попробуете это сделать. Существует множество публичных DNS, но мы рекомендуем вам вокруг до около и использовать адреса Google. Чтобы изменить DNS для своего сетевого подключения, вам нужно сделать следующее:

  • нажмите Win+S, чтобы вызвать системный поисковик;
  • найдите и откройте «Панель управления»;
  • перейдите в раздел «Центр управления сетями и общим доступом»;
  • кликните на ссылку «Изменение параметров адаптера» в левой части окна;
  • нажмите ПКМ на свой сетевой адаптер и выберите «Свойства»;
  • выделите в списке «IP версии 4 (TCP/IPv4)» и нажмите «Свойства»;
  • поставьте галочку возле «Использовать следующие адреса DNS-серверов», после чего пропишите вот эти адреса:
    • 8.8.8.8
    • 8.8.4.4
  • сохраните изменения и закройте все окна.

Теперь запустите GTA Online и проверьте, как долго займет загрузка. Если повезет, все пройдет немного быстрее, чем обычно.

Открытие портов в брандмауэре

Вот это решение порекомендовали даже сами Rockstar Games, правда оно работает далеко не для всех игроков. Вам нужно зайти в брандмауэр своей операционной системы и открыть в нем ряд определенных сетевых портов. Давайте обо всем по порядку:

  • откройте Панель управления и перейдите в раздел «Брандмауэр Защитника Windows»;
  • кликните на ссылку «Дополнительные параметры» в левой части окна;
  • выберите «Правила для входящих подключений», после чего нажмите на «Создать правило…»;
  • в новом окне выберите «Для порта» и нажмите «Далее»;
  • отметьте «Протокол UDP» и «Определенные локальные порты»;
  • скопируйте в пустое поле следующий набор портов и нажмите «Далее»:
    • 61458, 61456, 61457, 61455, 6672
  • выберите опцию «Разрешить подключение» и нажмите «Далее»;
  • поставьте галочки возле всех типов профилей и нажмите «Далее»;
  • подпишите правило как «UDP-порты для GTA Online» и нажмите «Готово»;
  • теперь сделайте все тоже самое, но только создайте правило для протокола TCP со следующим набором портов:
    • 80, 443
  • сохраните все изменения и перезагрузите компьютер.

Порты были открыты, а поэтому запускаем нашу GTA Online и смотрим, сколько загрузка займет на этот раз.

Ограничение одним потоком

Хотя мой старый ЦП AMD имеет восемь ядер и всё ещё может себя показать, он был создан в старые времена. Тогда

однопоточная производительность

процессоров AMD

намного

отставала от показателей процессоров Intel. Возможно, это и не объясняет всю разницу во времени загрузки, но должно объяснить самое главное.

Странно то, что игра использует

только

ЦП. Я ожидал огромного объёма загружаемых с диска ресурсов или кучу сетевых запросов для создания сессии в сети p2p. Но это? Скорее всего, это баг.

Что делать, если зависает сервер Rockstar Games

Также рекомендуется проверить сервера Rockstar Games на работоспособность. Для этого перейдите на сайт support.rockstargames.com, и проверьте сервера «Grand Theft Auto Online» для PC на наличие стабильного функционала (зелёный цвет индикаторов).

Cтатус серверов GTA

Профилирование

Профилировщики — отличный способ поиска «узких мест» в работе ЦП. Есть только одна проблема — большинство из них для получения идеальной картины происходящего в процессе использует исходный код. А у меня его нет. Но мне не нужны и показания с точностью до микросекунд — «узкое место» длится целых четыре минуты.

На сцене появляется сэмплирование стека: это единственный вариант изучения приложений с закрытыми исходниками. Выполняем дамп стека запущенного процесса и местоположения указателя текущей команды, чтобы строить дерево вызовов с заданными интервалами. Затем складываем их, чтобы получить статистику о происходящем. Есть только один известный мне профилировщик (здесь я могу ошибаться), способный на такое в Windows. И он не обновлялся больше десяти лет. Это

Luke Stackwalker

! Пусть кто-нибудь подарит этому проекту свою любовь.

0d81e2a29caeaef1d92ba1009cadad88.png

Виновники №1 и №2.

Обычно Luke группирует одинаковые функции, но поскольку у меня нет отладочных символов, мне нужно глазами просматривать ближайшие адреса, чтобы понять, что это одно и то же место. И что же мы видим? Не одно, а целых два «узких места»!

Временное отключение от сети Интернет

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

Также зарекомендовало себя следующее решение:

  1. Сверните игру (помогает нажатие на Win+D).
  2. Нажмите на Win+R, введите там taskmgr и нажмите ввод.
  3. В открывшемся Диспетчере задач перейдите на вкладку «Быстродействие» (в Вин 10 – «Производительность»).
  4. Там находим «Монитор ресурсов» («Открыть монитор ресурсов»).
  5. Выбираем вкладку «Сеть».
  6. Находим здесь «GTA 5».
  7. Наводим на неё курсор, и жмём «Приостановить процесс».
  8. Подождите 10 секунд.
  9. Вновь щёлкните ПКМ здесь, и кликните «Восстановить процесс».
  10. Разверните игру и проверьте изменения.

Несколько важных советов

Любые проблемы с ГТА Онлайн и не только бесконечная загрузка могут возникать банально из-за старых версий программного обеспечения. Не стоит забывать обновлять драйвера, версии DirectX, Microsoft .NET Framework и других утилит. Должное внимание следует уделить также дефрагментации жестких дисков.

progi_dlea_raboti_igri.png

Не забудьте установить все программы, предлагаемые игрой

Это может увеличить число ФПС, особенно если эта процедура не проводилась долгое время. Запуск проекта можно также осуществлять через приложение Razer Cortex. Оно отключает все ненужные процессы на момент цифровых развлечений. Если регулярно следить за своим устройством, то проблемы с вечной загрузкой, тормозами и вылетами будут случаться крайне редко.

Запуск игры с правами администратора

Некоторым пользователям помог запуск игры ГТА 5 с правами администратора. Для этого необходимо навести курсор мышки на иконку игры на рабочем столе, кликнуть правой клавишей мышки и выбрать «Запуск от имени администратора».

Проблема №1: это… strlen?!

При дизассемблировании теперь уже менее обфусцированного дампа обнаруживается, что один из адресов имеет метку, взятую ниоткуда! Это

strlen

? Следующий вниз по стеку вызовов помечен как

vscan_fn

, после чего метки заканчиваются, однако я практически уверен, что это

sscanf

.

31237664924c2fda9c940a21a7abd587.png

Они что-то парсят. Но что? Разбор дизассемблированного кода занял бы бесконечность, поэтому я решил сдампить некоторые сэмплы из запущенного процесса при помощи

x64dbg

. Проведя пошаговую отладку, я выяснил, что это… JSON! Они парсят JSON. Целых

10 мегабайт

данных JSON с почти

63 тысячами элементов

.

…,{ «key»: «WP_WCT_TINT_21_t2_v9_n2», «price»: 45000, «statName»: «CHAR_KIT_FM_PURCHASE20», «storageType»: «BITFIELD», «bitShift»: 7, «bitSize»: 1, «category»: [«CATEGORY_WEAPON_MOD»]},…

Что это? Согласно некоторым источникам, это похоже на данные «каталога сетевого магазина». Предположу, что они содержат список всех возможных предметов и апгрейдов, которые можно купить в GTA Online.

Уточнение: я считаю, что это предметы, покупаемые за внутриигровые деньги, а не связанные напрямую с микротранзакциями.

Но 10 мегабайт — это ведь мелочь! А использование

sscanf

пусть и не оптимально, но не может же оно быть настолько плохим? Ну-у-у…

4d86cf34641645e7dc1cdbe09bdba9cd.png

10 мегабайт строк C в памяти. 1. Перемещаем указатель на несколько байт к следующему значению. 2. Вызываем sscanf(p, «%d», …). 3. Считываем каждый символ в 10 мегабайтах при считывании каждого мелкого значения (!?). 4. Возвращаем отсканированное значение.

Да, это займёт много времени… Честно говоря, я понятия не имел, что большинство реализаций

sscanf

вызывает

strlen

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

NULL

.

R*, пожалуйста, решите проблему

Просьба, если эта статья каким-то образом доберётся до Rockstar: на решение этих проблем не уйдёт больше дня работы одного разработчика. Пожалуйста, сделайте с этим что-нибудь.

Можно перейти на hashmap для устранения дубликатов или полностью пропускать эту проверку, что будет реализовать быстрее. В парсере JSON замените библиотеку на более производительную. Не думаю, что здесь есть более простое решение.

Спасибо.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: