Como dimensionar super

Dimensionar a super corretamente é 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 êxito.

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 durante toda a vida útil atualizável do dispositivo.

Além disso, os dispositivos A/B virtuais 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 podem (ou não querem) fazer a atualização. No entanto, se for conhecido 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 da super com base nessas variáveis.

Confiando em /dados

O A/B virtual incentiva o super para permitir o aumento do tamanho de /data . Parte 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 snapshot aproximadamente do mesmo tamanho do SO, 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 A/B virtual 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 assim:

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

Assim, este dispositivo deve ter uma super partição 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 A/B Virtual, 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 assim:

  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 partição 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 é simples.

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 A/B virtual 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 ficaria assim:

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

Assim, este dispositivo deve ter uma super partição de 12 GB.

Com compressão

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

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

Por exemplo, considere um dispositivo de compactação A/B virtual 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 ficaria assim:

  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 forem de 5 GB, o espaço em super poderá 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 compressã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 arquivos compactado, como EROFS, a compactação adicional do Virtual A/B terá retornos decrescentes. Nesse caso, é melhor usar uma das fórmulas não compactadas como diretriz.

Medindo

Para encontrar o valor de FinalDessertSize nos exemplos acima, adicione 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 não esparsas 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.