FR EN ES PT

Vous trouviez le temps un peu long pendant le téléchargement des mises à jour ? Votre forfait 4G était en PLS à chaque version de DOFUS ? C’est bientôt de l’histoire ancienne ! On vous présente, ici, ce qui va changer pour le moteur de mise à jour du launcher.

Contexte

La fonction principale du launcher est de mettre à disposition les jeux et de gérer leur mise à jour (MÀJ). La gestion des MÀJ sur le launcher est assurée par un framework interne qu’on appelle Cytrus (petit descendant d’Agrum « Ankama Games Releases and Updates Manager » qui gérait les mises à jour sur l’ancien updater DOFUS et dont certains se souviennent).

Chacun a pu le constater, la version actuelle (Cytrus 5) a ses limites : chaque MÀJ est assez lourde, même lorsque les changements apportés au jeu sont relativement légers. On ne compte d’ailleurs plus le nombre de retours du type « Euh... C’est normal que je doive retélécharger tout le jeu à chaque MÀJ ? » que vous nous envoyez.

On vous explique pourquoi. Afin d’améliorer la vitesse d’installation du jeu, de nombreux assets (items, maps, emotes, etc.) ont été regroupés en fichiers plus volumineux : les « packs ». Cela permet d’avoir un nombre de fichiers à télécharger raisonnable et d’éviter d’inutiles allers-retours avec le serveur de téléchargement. Par exemple, en l’absence de pack il serait nécessaire de récupérer 18 271 fichiers juste pour les objets de DOFUS 2 ! Au lieu de quoi on télécharge un unique fichier de 11,3 Mo.

Cependant, en contrepartie, dans le cas d’une MÀJ où un simple objet a été modifié, tout le pack d’objets est retéléchargé. Il en est de même pour les traductions où une simple virgule modifiée entraîne le téléchargement de 43 Mo pour le pack français ! Cela explique en très grande partie pourquoi la taille des mises à jour ne correspond pas vraiment aux modifications qui sont apportées aux jeux.

Pour y remédier, on passe notre framework Cytrus en version 6 et on vous explique ce qui va changer !

Améliorations techniques

Remerciements

Pour commencer, nous souhaitons souligner que le marché du jeu vidéo et les technologies qui lui permettent d'exister ne cessent d'évoluer. Le partage des best practices et des innovations est un moteur essentiel de tout progrès. Nous souhaitons donc adresser nos remerciements aux acteurs du marché qui partagent leurs inspirations et leurs best practices nous permettant d'améliorer nos propres outils. Ce devblog est une manière de reconnaître leur apport et leur contribution. Un grand merci à ceux qui partagent le fruit de leurs réflexions. C'est maintenant à notre tour de le faire !

Découpage des fichiers en Chunks

Pour améliorer notre processus de mise à jour, nous allons éviter de télécharger les fichiers en entier dès qu’ils sont modifiés. À la place, nous allons uniquement télécharger la partie modifiée. Pour cela, on commence par séparer chaque fichier qui est désormais découpé en plusieurs morceaux de 16 Ko à 256 Ko ; ce sont ces morceaux-là qu'on appelle "chunks" dans le jargon. Les modifications de chaque mise à jour sont alors calculées sur les chunks (au lieu des fichiers), ce qui permet de ne télécharger que les chunks modifiés qui seront ensuite réassemblés en fichier sur votre PC.

Ça nous permet de réduire le temps de téléchargement des MÀJ en utilisant votre RAM et votre CPU pour effectuer des calculs et recréer les fichiers sur votre PC.

Le bénéfice est immédiat : si une petite partie du fichier est modifiée, on ne téléchargera que les chunks concernés.

Pour fragmenter les fichiers en chunks, nous utilisons un algorithme de détection de contenu «FastCDC » qui permet de fragmenter les fichiers de manière déterministe. On retrouvera un découpage similaire d’une mise à jour à l’autre, même si c’est le début du fichier qui a été modifié.

Pour DOFUS 2, une fois tous les fichiers fragmentés, nous nous retrouvons avec environ 123 000 chunks.

Mutualisation des chunks

Il est possible que deux chunks soient identiques dans deux fichiers différents. On peut les reconnaître, car ils auront le même identifiant. On ne télécharge alors qu’une fois le chunk pour l’utiliser dans la reconstruction des deux fichiers, réduisant ainsi davantage la quantité de données à télécharger.

Cette mutualisation nous évite de télécharger 2 000 chunks pour DOFUS 2, et nous laisse donc avec environ seulement 121 000 chunks à télécharger.

Les Bundles

Tous ces chunks sont regroupés dans des fichiers plus gros : les bundles.

Il y a environ 8 400 fichiers sur DOFUS 2. Avec l’ancien système, nous devions donc faire 8 400 téléchargements de fichier unique.

Pour éviter de faire 121 000 téléchargements distincts pour récupérer tous les chunks, nous les regroupons en bundles, soit 384 bundles pour DOFUS 2. On va pouvoir ensuite récupérer tous les chunks modifiés d’un bundle en un seul appel grâce à une « Multipart Ranges Request ». Pour faire simple, on précise quelles parties du fichier on souhaite télécharger. Ce qui réduit drastiquement le nombre maximum de téléchargements lors d’une mise à jour.

Cela signifie que pour une installation totale de DOFUS 2, nous allons télécharger au maximum 384 fichiers au lieu de 8 400 auparavant, pour un même volume de données.

Le manifeste

Pour que le launcher puisse calculer quels fichiers ont besoin d’être mis à jour, un fichier est mis à disposition par Cytrus. Il permet de savoir quels fichiers, chunks et bundles, sont présents dans la version du jeu.

Nous pouvons alors calculer la différence entre ce qui est disponible en ligne et ce qui est présent sur votre ordinateur, puis télécharger et réassembler la différence.

Ce type de fichier était déjà présent sur Cytrus 5, mais ne contenait que l’état des fichiers disponibles sans chunks et sans bundles.

Premiers chiffres comparatifs

Comparaison de la taille des fichiers à télécharger pour différentes MÀJ de jeux récentes :

Voici une petite sélection de mises à jour pour vous montrer que l’évolution de Cytrus a un gros impact, mais avec quelques exceptions :

  • Lorsque les modifications sont légères sur des gros fichiers, on va constater un énorme gain puisqu’on ne télécharge que le chunk modifié.
  • Sur les grosses mises à jour, on constate un gain moindre : les fichiers étant vraiment modifiés, on télécharge quasiment tous les chunks correspondants.

Nous espérons que cette mise à jour améliore votre expérience au quotidien sur le jeu, "gl & hf".

L’équipe du launcher.

Catégorie: Developpement