Visão geral
Você pode atualizar pacotes de conteúdo após o lançamento modificando, adicionando ou removendo dados. Para iniciar uma atualização, carregue o pacote atualizado completo no Partner Center e publique-o. As futuras instalações digitais do conteúdo baixam o pacote atualizado diretamente. A tecnologia de atualização de conteúdo do sistema modifica as instalações existentes para espelhar o pacote atualizado. O conteúdo do Microsoft Game Development Kit (GDK) é empacotado em pacotes XVC ou MSIXVC que operam com granularidade de subarquivo. Você pode substituir dados no local. Você também pode inserir ou remover dados de um arquivo em múltiplos de 4 kibibytes (KiB) (4.096 bytes). Não é possível mover dados com eficiência. Quando um usuário instala, a partir do disco original do jogo, um jogo que já tem uma atualização de conteúdo, o processo de instalação obtém dados tanto do disco quanto da nuvem. As partes inalteradas do pacote são instaladas a partir do disco, enquanto os dados atualizados são baixados da nuvem por instalação por streaming. Esse processo se comporta exatamente como uma instalação por streaming normal na interface do usuário do sistema e para todas as APIs do jogo. Quando um console ou PC atualiza conteúdo instalado anteriormente, o processo modifica o arquivo de pacote XVC ou MSIXVC instalado no local para acomodar os dados novos ou removidos e, em seguida, baixa os novos dados. O jogo não pode ser executado entre o momento em que a atualização começa a ser instalada e o momento em que a instalação da atualização termina.Criar pacotes com eficiência
As atualizações de conteúdo tentam não interferir no processo de desenvolvimento do jogo. Independentemente das alterações que você fizer no conteúdo do jogo, você poderá atualizar um pacote corretamente. No entanto, o processo pode não ser eficiente em tamanho de download (que corresponde ao tempo em que os jogadores não podem jogar) ou eficiente em espaço consumido no disco rígido. As dicas a seguir ajudam você a empacotar um jogo para garantir a melhor experiência do usuário. Simples:- Se você usa arquivos de pacote (pack files) para agregar vários ativos em um único arquivo, verifique se o criador do arquivo de pacote alinha o início de cada ativo a um limite de 4 KiB. Essa dica é demonstrada no Exemplo de alinhamento simples.
- Se você compactar ativos, verifique se a compactação é determinística e se cada ativo é compactado de forma independente.
- Não altere uma ID de chunk nem mova um arquivo entre IDs de chunk.
- Não reordene chunks dentro do pacote, arquivos dentro de um chunk ou ativos dentro de um arquivo. Considere ordenar os ativos pelo nome ou por outro identificador estável.
-
Se você usa arquivos de pacote para agregar vários ativos em um único arquivo, verifique se o criador do arquivo de pacote alinha o início de cada ativo de forma consistente. Esta orientação é uma versão avançada de sempre alinhar ao início de 4 KiB.
Considere o exemplo de um ativo que começa no deslocamento
PriorAssetOffsetno pacote anterior e emAssetOffsetno pacote que está sendo compilado com atualizações. Para garantir que o criador do arquivo de pacote alinhe o início de cada ativo a um limite de 4 KiB, definaPriorAssetOffset % 4096 == 0eAssetOffset % 4096 == 0. Essa condição sempre satisfazPriorAssetOffset % 4096 == AssetOffset % 4096. Qualquer outra maneira de garantir que essa instrução seja satisfeita também funciona. Essa condição pode permitir que o criador do arquivo de pacote use menos preenchimento. Essa dica é demonstrada no Exemplo de alinhamento com estado. - Se você usar compactação não determinística e o ativo não compactado não tiver sido alterado, copie os dados compactados dele do empacotamento anterior para que os dados compactados também permaneçam inalterados.
- Se os ativos forem ordenados automaticamente para corresponder à ordem de carregamento esperada em runtime, considere congelar a ordenação automática no primeiro lançamento.
- Se um arquivo de pacote tiver muitos ativos pequenos que mudam com frequência nas atualizações, considere torná-los adjacentes. É mais eficiente modificar 400 KiB do que modificar 4 KiB 100 vezes.
Exemplos de alinhamento bom e ruim em arquivos de pacote
Alguns jogos combinam muitos ativos em arquivos grandes chamados arquivos de pacote (pack files). A atualização de conteúdo em nível de subarquivo melhora significativamente a eficiência do tamanho de download e do tamanho no disco rígido ao baixar atualizações para esses jogos. Para aproveitar essa tecnologia, é importante que a ferramenta de criação de arquivos de pacote do jogo preserve o alinhamento de 4 KiB dos ativos dentro do arquivo. Esta seção mostra exemplos de maneiras boas e ruins de alinhar ativos dentro de um arquivo de pacote. Para fins de ilustração, cada exemplo é mostrado como uma série de células com uma letra. Cada célula tem 1 KiB no diagrama para simplificar a ilustração. As linhas contínuas entre as células representam onde há limites de 4 KiB.Substituição de dados
No diagrama a seguir, uma única célula é substituída na atualização. O único download é a página de 4 KiB que contém essa célula.
Inserção
No diagrama a seguir, uma única célula é inserida na atualização. Como resultado, todas as células após a inserção são deslocadas em uma posição. Esse deslocamento move as células através dos limites de 4 KiB, de modo que nenhuma das páginas de 4 KiB é igual no pacote antigo e no novo após a inserção. Todas as páginas de 4 KiB após a inserção são baixadas.

Exclusão
No diagrama a seguir, uma única célula é excluída na atualização. Como resultado, todas as células após a exclusão são deslocadas em uma posição. Esse deslocamento move as células através dos limites de 4 KiB. Todas as páginas de 4 KiB após a exclusão são baixadas.

Alinhamento: simples
O diagrama a seguir mostra seis ativos. Cada ativo é armazenado em um número arbitrário de células. O início de cada ativo está em um limite de 4 KiB. Como resultado, você pode adicionar, alterar (incluindo aumento ou redução de tamanho) ou excluir ativos de forma independente. Esse alinhamento é a maneira mais fácil de alinhar ativos dentro de um arquivo de pacote.
Alinhamento: avançado sem estado
O diagrama a seguir mostra sete ativos. Cada ativo é armazenado em um número arbitrário de células. O início de cada ativo grande está alinhado a um limite de 4 KiB, mas os ativos pequenos (Ativo 6, no diagrama) são empacotados de forma contígua ao ativo anterior, sem preenchimento. Esse método de alinhamento oferece três benefícios:- Ele usa menos espaço para preenchimento.
- Quando você altera o Ativo 5, baixar o Ativo 6 não tem custo efetivo.
- Quando você altera o Ativo 6, os 4 KiB completos são baixados de qualquer forma. Não importa se eram preenchimento ou o final do Ativo 5.

Alinhamento: avançado com estado
O diagrama a seguir mostra sete ativos. Cada ativo é armazenado em um número arbitrário de células. O início de cada ativo no primeiro pacote é empacotado sem preenchimento. No novo pacote, cada ativo começa no mesmo deslocamento dentro de uma página de 4 KiB em que começava no pacote antigo. Por exemplo, o Ativo 3 começava uma célula dentro de uma página de 4 KiB no pacote antigo. No novo pacote, foi adicionado preenchimento antes do Ativo 3 para que ele também começasse uma célula dentro de uma página de 4 KiB. Essa abordagem preserva o alinhamento exigido pela atualização de conteúdo e minimiza a quantidade de preenchimento. A desvantagem dessa abordagem é que ela exige que a ferramenta de arquivos de pacote conheça o layout do arquivo de pacote antigo para corresponder aos seus deslocamentos.
Fragmentação
Para títulos que têm um longo histórico de atualizações, com muitas alterações em arquivos existentes ao longo do tempo, e pacotes que têm um número significativo de pequenas edições em arquivos grandes, os algoritmos de atualização de conteúdo podem produzir tamanhos de atualização abaixo do ideal. Você pode identificar tamanhos de atualização abaixo do ideal de duas maneiras:- Examine a saída de
makepkg packquando executado com/priorpackage. Ela exibe um aviso: “More than # page-level XTS entries. Page-level update efficiency will be compromised for # pages.” - Examine os relatórios de comparação produzidos por
makepkg packoupackageutil compare. Se esses relatórios mostrarem arquivos sendo baixados novamente em 100% que você sabe que não foram alterados, essa condição pode ser um sintoma de falta de espaço na estrutura de dados de fragmentos de criptografia do formato de arquivo XVC.
/maxencryptionfragments com makepkg pack para gerar um cálculo delta mais otimizado. Definir esse valor alto demais aumenta o risco de erros de falta de memória durante a inicialização do jogo ou a montagem de DLC.
Quando você insere dados, a atualização de conteúdo causa a fragmentação dos dados do pacote no disco rígido físico. A atualização de conteúdo tenta minimizar esse efeito realizando uma desfragmentação parcial do pacote durante a atualização. Ela garante, sujeito à disponibilidade de espaço livre no disco rígido, que a soma do tamanho de quaisquer dois fragmentos adjacentes seja de pelo menos 100 mebibytes (MiB). A atualização de conteúdo tenta fazer com que todos os fragmentos tenham pelo menos 100 MiB.
As iterações anteriores da atualização de conteúdo para XBOX One ERA não realizavam desfragmentação.
Uso de ferramentas
makepkg /contentid GUID: o parâmetro de ID de conteúdo, junto com o nome da família de pacotes, que identifica um pacote entre versões. Para testar a atualização entre pacotes, crie ambos os pacotes usando a mesma ID de conteúdo e o mesmo nome de família de pacotes.packageutil compare: essa ferramenta gera um plano de atualização que descreve como atualizar de um pacote antigo para um novo pacote. Ela também gera um relatório que lista os arquivos e os intervalos dentro desses arquivos que são baixados para realizar a atualização. Use esse relatório para identificar alterações inesperadas.xbapp update(PC:wdapp update): essa ferramenta atualiza um pacote instalado anteriormente em um kit de desenvolvimento ou PC para um novo pacote. Ela usa o mesmo método dos consoles de varejo, para que você possa usá-la para testar a experiência do usuário e o desempenho de E/S após a atualização.
Detalhes
Esta seção descreve detalhes de implementação sobre como a atualização de conteúdo funciona. Esses detalhes estão sujeitos a alterações. Ela se destina ao desenvolvedor muito interessado que deseja entender e ajustar tudo. O que são planos de streaming de atualização? Os planos de streaming de atualização são uma evolução da tecnologia XBOX FastStart. O Content Update v3 usa esses planos para informar ao console XBOX e aos PCs como transformar um pacote antigo em um novo pacote. Essa abordagem permite que uma análise mais intensiva seja feita no momento da publicação na nuvem do que um console ou PC poderia fazer durante o download. Por que 4 KiB foi escolhido como o múltiplo permitido para inserção ou exclusão? 4 KiB é o tamanho do cluster NTFS no XBOX e nos sistemas de arquivos de PC compatíveis. Fazer inserções ou exclusões em um múltiplo diferente do tamanho do cluster NTFS exigiria uma quantidade significativa de E/S de disco para instalar a atualização. Os pacotes de conteúdo são criptografados e têm a integridade protegida em blocos de 4 KiB. Fazer inserções ou exclusões em um múltiplo diferente do tamanho do bloco de criptografia exigiria que os dados fossem criptografados novamente para instalar a atualização. Esse requisito impede atualizações em segundo plano em cenários em que uma licença não está disponível porque o usuário adequado não está conectado ou o disco do jogo não está disponível. Com esse requisito, os pacotes podem ser atualizados com eficiência e sem exigir uma etapa demorada de descompactação no final do processo de atualização. O que acontece durante o makepkg/packageutil versus durante a publicação? O mesmo processamento acontece em ambos. Durante a publicação, o pacote é criptografado usando dados da melhor opção da nuvem para o pacote anterior (o equivalente a makepkg /priorpackage). Em seguida, é gerado um plano de streaming de atualização a partir de vários pacotes antigos (o equivalente a packageutil compare). O /priorpackage especificado no makepkg afeta o pacote de varejo? Não. O processo de publicação na nuvem sempre substitui essa especificação. A opção domakepkg é fornecida apenas para permitir uma estimativa local antes da publicação.
Somente os dados atualizados do jogo são baixados?
Não. Os pacotes contêm dados significativos do sistema, incluindo hashes criptográficos de todas as páginas de dados, o Game OS (somente console) e um sistema de arquivos NTFS incorporado. Eles são baixados quando necessário.
Além disso, alguns dados inalterados podem ser baixados novamente para minimizar a sobrecarga das solicitações HTTP. Atualmente, dados inalterados com menos de 64 KiB cercados por dados alterados estão sujeitos a novo download, mas essa configuração está sujeita a alterações para otimizar o tempo de download.
O relatório gerado pelo packageutil compare inclui as informações anteriores em sua estimativa.
