É importante dimensionar corretamente a partição super para que o dispositivo possa ser atualizado. O tamanho
afeta diretamente quantas atualizações um dispositivo pode receber e quantos usuários podem fazer essas
atualizações.
Há algumas variáveis importantes a serem consideradas. O primeiro é o tamanho da 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 de aumento do tamanho do SO durante todo o ciclo de 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 precisa ser considerado ao dimensionar super. Se for necessário muito espaço em /data, alguns usuários não poderão (ou não vão querer) fazer a atualização. No entanto, se for conhecido que a maioria dos usuários tem uma porcentagem de espaço livre, os dispositivos poderão subtrair esse espaço de super. Ou os dispositivos podem garantir que /data nunca seja necessário, simplesmente tornando super grande o suficiente.
Confira abaixo alguns modelos para ajudar a orientar o dimensionamento da partição super com base nessas variáveis.
Confiar em /data
O teste A/B virtual incentiva a redução de super para aumentar o tamanho de /data. Parte desse espaço é necessária 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 nele. Nos exemplos abaixo, esse número é chamado de
AllowedUserdataUse.
Sem compactação
Sem compactação, uma OTA completa precisa de um snapshot aproximadamente do mesmo tamanho do SO. Isso precisa ser considerado ao dimensionar super:
FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth) Super = Max(FinalDessertUpdate, FinalDessertSize * 2 - AllowedUserdataUse)
Por exemplo, considere um dispositivo A/B virtual com um 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)
Portanto, esse dispositivo precisa ter uma partição super de 11 GB.
Com compressão
Com a compactação, uma OTA completa precisa de um snapshot com aproximadamente 70% do tamanho do SO:
FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth) FinalOTASnapshotSize = FinalDessertSize * 0.7 Super = Max(FinalDessertUpdate, FinalDessertSize + FinalOTASnapshotSize - AllowedUserdataUse)
Por exemplo, considere um dispositivo configurado com compressão A/B virtual, com um 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
Portanto, esse dispositivo deve ter uma partição super de 9,2 GB.
Sem depender de /data
Se você quiser ter OTAs que nunca exigem espaço de snapshot em /data, o dimensionamento de super será simples.
Sem compactaçã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 um tamanho de fábrica de 4 GB e um crescimento esperado
de 50%. Para garantir que esse dispositivo nunca use /data para snapshots OTA, o cálculo seria assim:
FinalDessertSize = 4GB + (4GB * 0.5) = 6GB Super = FinalDessertSize * 2 = 12GB
Portanto, esse dispositivo precisa ter uma partição super 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 compressão virtual A/B com um tamanho de fábrica de 4 GB e
crescimento esperado de 50%. Para garantir que esse dispositivo nunca use /data para snapshots OTA, o cálculo seria assim:
FinalDessertSize = 4GB + (4GB * 0.5) = 6GB FinalOTASnapshotSize = 6GB * 0.7 = 4.2GB Super = 6GB + 4.2GB = 10.2GB
Portanto, esse dispositivo precisa ter uma partição super de 10,2 GB.
Avisos
Pode ser tentador observar que, se o tamanho de fábrica for 4 GB e a atualização final for 5 GB, super precisará ser 9 GB, em vez de 10 GB. No entanto, se a primeira e a última atualização forem de 5 GB, o espaço em super poderá ser insuficiente para a atualização final. As fórmulas acima pressupõem 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.
As taxas de compressão são uma estimativa. Uma imagem do SO pode ser compactada melhor ou pior, dependendo do conteúdo dela. Se você estiver usando um sistema de arquivos compactado, como o 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.
Calcular o tamanho
Para encontrar o valor de FactorySize nos exemplos anteriores, adicione os tamanhos de todas as partições dinâmicas. As imagens de partição dinâmica do AOSP são:
system.imgvendor.imgproduct.imgsystem_ext.imgvendor_dlkm.imgsystem_dlkm.img
Calcule o tamanho com base em imagens não esparsas. Ao criar o Android
12 ou versões anteriores, as imagens são dispersas por padrão e podem ser não dispersas com
simg2img.
Também é possível calcular os tamanhos de partição de um pacote OTA. Isso também estima o tamanho do snapshot de A/B virtual para cada partição:
python3 system/update_engine/scripts/payload_info.py path/to/ota-package.zip
Ou use a ferramenta de análise de OTA. Essa ferramenta não faz upload de arquivos e analisa pacotes OTA localmente.
Para encontrar o valor de ExpectedGrowth, use um dispositivo lançado anteriormente. Use a imagem super mais antiga e mais recente para calcular o crescimento.