Vue d’ensemble
Vous pouvez mettre à jour des packages de contenu après leur publication en modifiant, en ajoutant ou en supprimant des données. Pour lancer une mise à jour, chargez le package mis à jour complet dans Partner Center et publiez-le. Les futures installations numériques du contenu téléchargent directement le package mis à jour. La technologie de mise à jour de contenu du système modifie les installations existantes pour qu’elles reflètent le package mis à jour. Le contenu du Microsoft Game Development Kit (GDK) est empaqueté dans des packages XVC ou MSIXVC fonctionnant à une granularité inférieure au fichier. Vous pouvez remplacer des données sur place. Vous pouvez également insérer ou supprimer des données dans un fichier par multiples de 4 kibioctets (Kio) (4 096 octets). Vous ne pouvez pas déplacer efficacement des données. Lorsqu’un utilisateur installe un jeu qui dispose déjà d’une mise à jour de contenu à partir de son disque de jeu d’origine, le processus d’installation récupère les données à la fois sur le disque et dans le cloud. Les parties inchangées du package sont installées à partir du disque, tandis que les données mises à jour sont téléchargées depuis le cloud par installation en streaming. Ce processus se comporte exactement comme une installation en streaming normale dans l’interface utilisateur du système et pour toutes les API du jeu. Lorsqu’une console ou un PC met à jour un contenu précédemment installé, le processus modifie sur place le fichier de package XVC ou MSIXVC installé pour tenir compte des données nouvelles ou supprimées, puis télécharge les nouvelles données. Le jeu ne peut pas s’exécuter entre le début et la fin de l’installation de la mise à jour.Créer des packages efficacement
Les mises à jour de contenu s’efforcent de ne pas entraver le processus de développement du jeu. Quelles que soient les modifications que vous apportez au contenu du jeu, vous pouvez mettre à jour un package correctement. Toutefois, le processus risque de ne pas être efficace en termes de taille de téléchargement (qui correspond au temps pendant lequel les joueurs ne peuvent pas jouer) ou d’espace disque consommé. Les conseils suivants vous aident à empaqueter un jeu de manière à garantir la meilleure expérience utilisateur. Simple :- Si vous utilisez des fichiers pack pour regrouper plusieurs ressources dans un seul fichier, assurez-vous que l’outil de création de fichiers pack aligne le début de chaque ressource sur une limite de 4 Kio. Ce conseil est illustré dans l’exemple d’alignement simple.
- Si vous compressez des ressources, assurez-vous que la compression est déterministe et que chaque ressource est compressée indépendamment.
- Ne modifiez pas un ID de chunk et ne déplacez pas un fichier d’un ID de chunk à un autre.
- Ne réorganisez pas les chunks au sein du package, les fichiers au sein d’un chunk ni les ressources au sein d’un fichier. Envisagez de trier les ressources par nom ou par un autre identificateur stable.
-
Si vous utilisez des fichiers pack pour regrouper plusieurs ressources dans un seul fichier, assurez-vous que l’outil de création de fichiers pack aligne le début de chaque ressource de manière cohérente. Cette recommandation est une version avancée de l’alignement systématique sur le début d’un bloc de 4 Kio.
Prenons l’exemple d’une ressource qui commence à l’offset
PriorAssetOffsetdans le package précédent et à l’offsetAssetOffsetdans le package en cours de génération avec les mises à jour. Pour garantir que l’outil de création de fichiers pack aligne le début de chaque ressource sur une limite de 4 Kio, définissezPriorAssetOffset % 4096 == 0etAssetOffset % 4096 == 0. Cette condition satisfait toujoursPriorAssetOffset % 4096 == AssetOffset % 4096. Toute autre façon de garantir que cette expression est satisfaite fonctionne également. Cette condition peut permettre à l’outil de création de fichiers pack d’utiliser moins de remplissage. Ce conseil est illustré dans l’exemple d’alignement avec état. - Si vous utilisez une compression non déterministe et que la ressource non compressée est inchangée, copiez ses données compressées à partir de l’empaquetage précédent afin que les données compressées restent également inchangées.
- Si les ressources sont triées automatiquement pour correspondre à l’ordre de chargement attendu au moment de l’exécution, envisagez de figer ce tri automatique lors de la première publication.
- Si un fichier pack contient de nombreuses petites ressources qui changent fréquemment lors des mises à jour, envisagez de les rendre adjacentes. Il est plus efficace de modifier 400 Kio d’un coup que de modifier 4 Kio 100 fois.
Exemples de bon et de mauvais alignement dans les fichiers pack
Certains jeux combinent de nombreuses ressources dans des fichiers volumineux appelés fichiers pack. La mise à jour de contenu au niveau inférieur au fichier améliore considérablement l’efficacité du téléchargement des mises à jour de ces jeux, tant en taille de téléchargement qu’en espace disque. Pour tirer parti de cette technologie, il est important que l’outil de création de fichiers pack du jeu préserve l’alignement sur 4 Kio des ressources au sein du fichier. Cette section présente des exemples de bonnes et de mauvaises façons d’aligner les ressources dans un fichier pack. À titre d’illustration, chaque exemple est présenté sous la forme d’une série de cellules contenant une lettre. Dans le diagramme, chaque cellule représente 1 Kio afin de simplifier l’illustration. Les traits pleins entre les cellules représentent les limites de 4 Kio.Remplacement de données
Dans le diagramme suivant, une seule cellule est remplacée lors de la mise à jour. Le seul téléchargement est la page de 4 Kio contenant cette cellule.
Insertion
Dans le diagramme suivant, une seule cellule est insérée lors de la mise à jour. Par conséquent, chaque cellule située après l’insertion est décalée d’une position. Ce décalage fait passer les cellules au-delà des limites de 4 Kio, de sorte qu’aucune des pages de 4 Kio n’est identique entre l’ancien et le nouveau package après l’insertion. Chaque page de 4 Kio située après l’insertion est téléchargée.

Suppression
Dans le diagramme suivant, une seule cellule est supprimée lors de la mise à jour. Par conséquent, chaque cellule située après la suppression est décalée d’une position. Ce décalage fait passer les cellules au-delà des limites de 4 Kio. Chaque page de 4 Kio située après la suppression est téléchargée.

Alignement : simple
Le diagramme suivant montre six ressources. Chaque ressource est stockée dans un nombre arbitraire de cellules. Le début de chaque ressource se trouve sur une limite de 4 Kio. Par conséquent, vous pouvez ajouter, modifier (y compris augmenter ou réduire la taille) ou supprimer des ressources indépendamment. Cet alignement est la façon la plus simple d’aligner les ressources dans un fichier pack.
Alignement : avancé sans état
Le diagramme suivant montre sept ressources. Chaque ressource est stockée dans un nombre arbitraire de cellules. Le début de chaque ressource volumineuse est aligné sur une limite de 4 Kio, mais les petites ressources (la ressource 6, dans le diagramme) sont placées de manière contiguë à la ressource précédente, sans remplissage. Cette méthode d’alignement offre trois avantages :- Elle utilise moins d’espace pour le remplissage.
- Lorsque vous modifiez la ressource 5, le téléchargement de la ressource 6 est en fait gratuit.
- Lorsque vous modifiez la ressource 6, la totalité des 4 Kio est de toute façon téléchargée. Peu importe qu’il s’agisse de remplissage ou de la fin de la ressource 5.

Alignement : avancé avec état
Le diagramme suivant montre sept ressources. Chaque ressource est stockée dans un nombre arbitraire de cellules. Dans le premier package, toutes les ressources sont placées sans remplissage. Dans le nouveau package, chaque ressource commence au même offset dans une page de 4 Kio que dans l’ancien package. Par exemple, la ressource 3 commençait une cellule après le début d’une page de 4 Kio dans l’ancien package. Dans le nouveau package, du remplissage a été ajouté avant la ressource 3 afin qu’elle commence également une cellule après le début d’une page de 4 Kio. Cette approche préserve l’alignement requis par la mise à jour de contenu tout en réduisant au minimum la quantité de remplissage. L’inconvénient de cette approche est qu’elle exige que l’outil de création de fichiers pack connaisse la disposition de l’ancien fichier pack afin de faire correspondre ses offsets.
Fragmentation
Pour les titres qui ont un long historique de mises à jour, avec de nombreuses modifications apportées aux fichiers existants au fil du temps, et pour les packages qui comportent un nombre important de petites modifications sur des fichiers volumineux, les algorithmes de mise à jour de contenu peuvent produire des tailles de mise à jour non optimales. Vous pouvez détecter des tailles de mise à jour non optimales de deux façons :- Examinez la sortie de
makepkg packlorsque cette commande est exécutée avec/priorpackage. Elle affiche un avertissement : « More than # page-level XTS entries. Page-level update efficiency will be compromised for # pages. » - Examinez les rapports de comparaison produits par
makepkg packoupackageutil compare. Si ces rapports indiquent que des fichiers dont vous savez qu’ils n’ont pas changé sont retéléchargés à 100 %, cela peut être le symptôme d’un manque d’espace dans la structure de données des fragments de chiffrement du format de fichier XVC.
/maxencryptionfragments de makepkg pack pour générer un calcul delta plus optimal. Une valeur trop élevée augmente le risque d’erreurs de mémoire insuffisante lors du lancement du jeu ou du montage d’un DLC.
Lorsque vous insérez des données, la mise à jour de contenu entraîne une fragmentation des données du package sur le disque dur physique. La mise à jour de contenu s’efforce de réduire cet effet en effectuant une défragmentation partielle du package pendant la mise à jour. Elle garantit, sous réserve de l’espace disque disponible, que la somme des tailles de deux fragments adjacents est d’au moins 100 mébioctets (Mio). La mise à jour de contenu s’efforce de faire en sorte que tous les fragments atteignent au moins 100 Mio.
Les itérations précédentes de la mise à jour de contenu pour XBOX One ERA n’effectuaient pas de défragmentation.
Utilisation des outils
makepkg /contentid GUID: paramètre d’ID de contenu qui, avec le nom de famille du package, identifie un package d’une version à l’autre. Pour tester la mise à jour entre des packages, créez les deux packages en utilisant le même ID de contenu et le même nom de famille de package.packageutil compare: cet outil génère un plan de mise à jour qui décrit comment passer d’un ancien package à un nouveau package. Il génère également un rapport répertoriant les fichiers, et les plages au sein de ces fichiers, qui sont téléchargés pour effectuer la mise à jour. Utilisez ce rapport pour identifier les modifications inattendues.xbapp update(PC :wdapp update) : cet outil met à jour vers un nouveau package un package précédemment installé sur un kit de développement ou un PC. Il utilise la même méthode que les consoles commerciales ; vous pouvez donc l’utiliser pour tester l’expérience utilisateur et les performances d’E/S après la mise à jour.
Détails
Cette section décrit des détails d’implémentation du fonctionnement de la mise à jour de contenu. Ces détails sont susceptibles de changer. Elle s’adresse aux développeurs très intéressés qui souhaitent tout comprendre et tout affiner. Que sont les plans de streaming de mise à jour ? Les plans de streaming de mise à jour sont une évolution de la technologie XBOX FastStart. Content Update v3 utilise ces plans pour indiquer à la console XBOX et aux PC comment transformer un ancien package en nouveau package. Cette approche permet d’effectuer dans le cloud, au moment de la publication, une analyse plus approfondie que ce qu’une console ou un PC pourrait faire pendant le téléchargement. Pourquoi 4 Kio a-t-il été choisi comme multiple autorisé pour l’insertion ou la suppression ? 4 Kio est la taille de cluster NTFS sur XBOX et sur les systèmes de fichiers PC pris en charge. Effectuer une insertion ou une suppression sur un multiple différent de la taille de cluster NTFS nécessiterait d’importantes E/S disque pour installer la mise à jour. Les packages de contenu sont chiffrés et leur intégrité est protégée par blocs de 4 Kio. Effectuer une insertion ou une suppression sur un multiple différent de la taille de bloc cryptographique nécessiterait de rechiffrer les données pour installer la mise à jour. Cette exigence empêcherait les mises à jour en arrière-plan dans les scénarios où aucune licence n’est disponible, parce que l’utilisateur approprié n’est pas connecté ou que le disque de jeu n’est pas disponible. Grâce à cette exigence, les packages peuvent être mis à jour efficacement, sans nécessiter une longue étape de décompression à la fin du processus de mise à jour. Que se passe-t-il pendant makepkg/packageutil par rapport à la publication ? Le même traitement a lieu dans les deux cas. Pendant la publication, le package est chiffré à l’aide des données du package précédent jugé le plus pertinent par le cloud (l’équivalent de makepkg /priorpackage). Un plan de streaming de mise à jour à partir de nombreux anciens packages est ensuite généré (l’équivalent de packageutil compare). Le paramètre /priorpackage spécifié dans makepkg affecte-t-il le package commercial ? Non. Le processus de publication dans le cloud remplace toujours cette spécification. L’optionmakepkg est uniquement fournie pour permettre une estimation locale avant la publication.
Seules les données de jeu mises à jour sont-elles téléchargées ?
Non. Les packages contiennent d’importantes données système, notamment les hachages cryptographiques de toutes les pages de données, le Game OS (console uniquement) et un système de fichiers NTFS intégré. Ces données sont téléchargées lorsque c’est nécessaire.
En outre, certaines données inchangées peuvent être retéléchargées afin de réduire la surcharge des requêtes HTTP. Actuellement, les données inchangées de moins de 64 Kio entourées de données modifiées sont susceptibles d’être retéléchargées, mais cette configuration est susceptible de changer afin d’optimiser le temps de téléchargement.
Le rapport généré par packageutil compare inclut les informations précédentes dans son estimation.
