Como dimensionar super

O dimensionamento correto da super é importante para a capacidade de atualização do dispositivo. O tamanho afeta diretamente quantas atualizações um dispositivo pode receber e quantos usuários podem obter essas atualizações com sucesso.

Existem algumas variáveis ​​importantes a serem consideradas. O primeiro é o tamanho de fábrica , que é o tamanho de todas as partições dinâmicas quando o dispositivo é atualizado pela primeira vez. A segunda é a taxa de crescimento , que é a porcentagem que o tamanho do sistema operacional aumenta ao longo de toda a vida atualizável do dispositivo.

Além disso, os dispositivos virtuais A/B podem usar espaço em /data durante uma atualização, e isso deve ser considerado ao dimensionar super . Se for necessário muito espaço em /data , alguns usuários não poderão (ou não desejarão) fazer a atualização. No entanto, se for sabido que a maioria dos usuários tem alguma porcentagem de espaço livre, os dispositivos podem subtrair confortavelmente esse espaço de super . Ou os dispositivos podem garantir que /data nunca seja necessário, simplesmente tornando super grande o suficiente.

Abaixo estão alguns modelos para ajudar a orientar o dimensionamento super com base nessas variáveis.

Baseando-se em /data

O Virtual A/B incentiva a redução super para permitir o aumento do tamanho de /data . Algum desse espaço é necessário durante uma atualização. Para entender o impacto na capacidade de atualização, é essencial saber qual porcentagem de dispositivos provavelmente terá essa quantidade de espaço livre ao longo do tempo. Descobrir esse número depende muito do hardware do dispositivo e do comportamento dos usuários desse dispositivo. Nos exemplos abaixo, esse número é referido como AllowedUserdataUse .

Sem compressão

Sem compactação, um OTA completo precisa de um instantâneo aproximadamente do mesmo tamanho do sistema operacional, portanto, isso deve ser levado em consideração ao dimensionar super :

  FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth)
  Super = Max(FinalDessertUpdate, FinalDessertSize * 2 - AllowedUserdataUse)

Por exemplo, considere um dispositivo Virtual A/B com tamanho de fábrica de 4 GB, crescimento esperado de 50% e conhecimento de que quase todos os usuários têm 1 GB livre (ou estão dispostos a liberar até 1 GB de espaço para uma atualização). Para este dispositivo, super pode ser dimensionado da seguinte forma:

  FinalDessertSize = 4GB + (4GB * 0.5) = 6GB
  Super = Max(6GB, 6GB * 2 - 1GB) = Max(6GB, 11GB)

Assim, este dispositivo deve ter uma super de 11 GB.

Com compressão

Com compactação, um OTA completo precisa de um instantâneo de aproximadamente 70% do tamanho do sistema operacional:

  FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth)
  FinalOTASnapshotSize = FinalDessertSize * 0.7
  Super = Max(FinalDessertUpdate, FinalDessertSize + FinalOTASnapshotSize - AllowedUserdataUse)

Por exemplo, considere um dispositivo configurado com compactação Virtual A/B, com tamanho de fábrica de 4 GB, crescimento esperado de 50% e conhecimento de que quase todos os usuários têm 1 GB livre (ou estão dispostos a liberar até 1 GB de espaço para uma atualização). Para este dispositivo, super pode ser dimensionado da seguinte forma:

  FinalDessertSize = 4GB + (4GB * 0.5) = 6GB
  FinalOTASnapshotSize = 6GB * 0.7 = 4.2GB
  Super = Max(6GB, 6GB + 4.2GB - 1GB) = Max(6GB, 9.2GB) = 9.2GB

Assim, este dispositivo deve ter uma super de 9,2 GB.

Sem depender de /data

Se você deseja ter OTAs que nunca exijam espaço de instantâneo em /data , o dimensionamento super é direto.

Sem compressão

Para um dispositivo A/B virtual sem compactação ou um dispositivo A/B normal:

  FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth)
  Super = FinalDessertSize * 2

Por exemplo, considere um dispositivo Virtual A/B com tamanho de fábrica de 4 GB e crescimento esperado de 50%. Para garantir que este dispositivo nunca use /data para instantâneos OTA, seu cálculo seria semelhante a:

  FinalDessertSize = 4GB + (4GB * 0.5) = 6GB
  Super = FinalDessertSize * 2 = 12GB

Assim, este dispositivo deve ter uma super de 12 GB.

Com compressão

Para um dispositivo Virtual A/B com compactação:

  FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth)
  FinalOTASnapshotSize = FinalDessertSize * 0.7
  Super = FinalDessertSize + FinalOTASnapshotSize

Por exemplo, considere um dispositivo de compactação Virtual A/B com tamanho de fábrica de 4 GB e crescimento esperado de 50%. Para garantir que este dispositivo nunca use /data para instantâneos OTA, seu cálculo seria semelhante a:

  FinalDessertSize = 4GB + (4GB * 0.5) = 6GB
  FinalOTASnapshotSize = 6GB * 0.7 = 4.2GB
  Super = 6GB + 4.2GB = 10.2GB

Assim, este dispositivo deve ter uma super de 10,2 GB.

Ressalvas

Pode ser tentador observar que, se o tamanho de fábrica for de 4 GB e a atualização final for de 5 GB, o super precisa ser de 9 GB, em vez de 10 GB. No entanto, se a primeira atualização e a atualização final tiverem 5 GB, o espaço em super pode ser insuficiente para a atualização final. As fórmulas acima assumem que o crescimento da partição pode ocorrer a qualquer momento. O espaço necessário para aplicar a atualização final pode ser o mesmo necessário para aplicar a primeira atualização.

Observe que as taxas de compactação são uma estimativa. Uma imagem do sistema operacional pode ser compactada melhor ou pior, dependendo de seu conteúdo. Se estiver usando um sistema de arquivo compactado como o EROFS, a compactação adicional do Virtual A/B terá retornos decrescentes. Nesse caso, é melhor usar uma das fórmulas descompactadas como diretriz.

Medindo

Para encontrar o valor de FinalDessertSize nos exemplos acima, some os tamanhos de todas as partições dinâmicas. As imagens de partição dinâmica AOSP são:

  • system.img
  • vendor.img
  • product.img
  • system_ext.img
  • vendor_dlkm.img
  • system_dlkm.img

Certifique-se de calcular o tamanho com base em imagens não esparsas. Ao compilar o Android 12 ou inferior, as imagens são esparsas por padrão e podem ser desparsadas com simg2img .

Também é possível calcular tamanhos de partição de um pacote OTA. Fazer isso também estima o tamanho do instantâneo A/B virtual para cada partição:

  python3 system/update_engine/scripts/payload_info.py path/to/ota-package.zip

Ou você pode usar a ferramenta de análise OTA . Esta ferramenta não carrega nenhum arquivo e analisa os pacotes OTA localmente.

Para encontrar o valor de ExpectedGrowth , use um dispositivo lançado anteriormente. Use a super mais antiga e mais recente para calcular o crescimento.