Como dimensionar super

Dimensionar corretamente a 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 realizar 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 poderão (ou não estarão dispostos) a fazer a atualização. No entanto, se for sabido que a maioria dos usuários tem alguma porcentagem de espaço livre, os dispositivos poderão subtrair confortavelmente esse espaço de super . Ou os dispositivos podem garantir que /data nunca será necessário, simplesmente tornando-os super grandes o suficiente.

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

Confiando em /dados

O Virtual A/B incentiva a redução super para permitir o aumento do tamanho de /data . Parte desse espaço é necessário durante uma atualização. Para compreender 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 é conhecido 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 assim:

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

Assim, este dispositivo deverá contar com uma super de 11 GB.

Com compressão

Com a 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 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 deverá contar com uma super de 9,2 GB.

Sem depender de /data

Se você deseja ter OTAs que nunca exijam espaço de snapshot 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 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 snapshots OTA, seu cálculo seria assim:

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

Assim, este dispositivo deverá contar com 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 snapshots OTA, seu cálculo seria assim:

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

Assim, este dispositivo deverá contar com uma super de 10,2 GB.

Ressalvas

Pode ser tentador observar que se o tamanho de fábrica for 4 GB e a atualização final for 5 GB, então super precisa ser 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 no super poderá ser insuficiente para a atualização final. As fórmulas acima pressupõem que o crescimento da partição pode acontecer 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. Neste caso é melhor usar uma das fórmulas não compactadas como orientação.

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 dispersas. 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. 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 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.