Lorsque les développeurs échouent, le bricolage: Les mods de jeu sont un centime une douzaine, en particulier pour Grand Theft Auto Online. Mais parfois, quelqu’un en propose un qui est si bon et pourtant si basique que vous vous demandez pourquoi le développeur n’a pas fait la même chose dans un patch. Un pirate informatique a montré un correctif pour les temps de chargement qui est si simple que vous vous demanderez pourquoi Rockstar ne s’en est pas occupé il y a des années.

Sans aucun doute, les temps de chargement de Grand Theft Auto Online sont atroces. Un sondage non scientifique mené sur Reddit l’été dernier révélé que la plupart attendaient de trois à six minutes le début du jeu et que plus de 35% des joueurs avaient des temps de chargement supérieurs à six minutes. Dans les pires scénarios, les temps d’attente dépassaient 15 minutes.

Un hacker qui passe par T0st a examiné ce qui pourrait être à l’origine de ses temps de chargement de six minutes. Après avoir vidé la pile de processus, il découvert deux goulots d’étranglement qui maximisent un seul thread CPU. Une routine mal écrite analysait de manière inefficace un fichier JSON de 10 Mo contenant plus de 63 000 éléments.

En fait, le fichier JSON contenait des articles achetables dans les boutiques du jeu (à ne pas confondre avec les microtransactions). La routine lit chaque entrée du fichier, puis la stocke dans un tableau. À chaque passage, il vérifie à nouveau le tableau entier pour les doublons avant d’insérer le nouvel élément. Comme on peut l’imaginer, ce processus s’allonge de plus en plus à mesure que le tableau se développe.

Pour résoudre le problème, T0st a créé une DLL qui élimine les deux goulots d’étranglement. Le premier correctif “met en cache” les longues chaînes de caractères.

“S’il est à nouveau appelé dans la plage de la chaîne, [it will] revenir [the] valeur mise en cache », écrit T0st.

Étant donné que ce correctif élimine les entrées répétées, la vérification des doublons n’est plus nécessaire. Ainsi, la deuxième partie de la DLL insère simplement les valeurs dans le tableau.

Les résultats de ces deux patchs sont assez remarquables. Avec seulement le correctif de vérification de duplication installé, le temps de chargement a été légèrement réduit de six minutes à 4,5 minutes. L’analyseur JSON était beaucoup plus efficace, réduisant le temps d’attente à deux minutes et 50 secondes, et l’implémentation des deux correctifs dans la DLL améliorait le temps de chargement d’environ 70% (ou 1 min 50 s).

Les résultats peuvent varier en fonction de la configuration de la plate-forme, mais les optimisations devraient améliorer considérablement les vitesses de chargement pour toute configuration.

T0st posté la preuve de concept sur GitHub si vous êtes intéressé, bien qu’il prévienne que l’injecter en ligne pourrait vous faire suspendre. Ses écriture sur la façon dont il a trouvé et résolu le problème est également une très bonne lecture. Il espère que Rockstar aura vent de son PoC et publiera un patch officiel, ce qui n’est pas une demande déraisonnable pour la vache à lait du studio âgée de sept ans.

«Si cela atteint d’une manière ou d’une autre Rockstar: les problèmes ne devraient pas prendre plus d’une journée à un seul développeur à résoudre», écrit-il. «S’il vous plaît, faites quelque chose à ce sujet.

Oui. Je vous en prie.

Leave a Reply