O dimensionamento correto da partição super
é importante para a capacidade de atualização do dispositivo. O tamanho
impacta diretamente quantas atualizações um dispositivo pode receber e quantos usuários podem receber essas
atualizações.
Há 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 é inicializado pela primeira vez. A segunda é a taxa de crescimento, que é a porcentagem do aumento do tamanho do SO durante todo o ciclo de atualização 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 muito espaço for necessário em
/data
, alguns usuários não poderão (ou não quiserem) fazer a atualização. No entanto, se for
sabido 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 aumentando o tamanho de super
.
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 permitir o aumento do 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. A descoberta desse número depende muito do hardware do dispositivo e
do comportamento dos usuários. Nos exemplos abaixo, esse número é chamado de
AllowedUserdataUse
.
Sem compactação
Sem compactação, uma OTA completa precisa de um snapshot com aproximadamente o mesmo tamanho do SO. Portanto, isso precisa ser
considerado ao dimensionar super
:
FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth) Super = Max(FinalDessertUpdate, FinalDessertSize * 2 - AllowedUserdataUse)
Por exemplo, considere um dispositivo virtual A/B 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 de espaço livre (ou estão dispostos a liberar até 1 GB
de espaço para uma atualização). Para esse dispositivo, o tamanho de super
pode ser definido 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 compactação
Com a compactação, uma OTA completa precisa de um snapshot de 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 a compactação Virtual A/B, 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 esse dispositivo, o tamanho de super
pode ser
definido 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 precisa ter uma partição super
de 9,2 GB.
Sem depender de /data
Se você quiser que as OTAs nunca precisem de 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 virtual A/B com um tamanho de fábrica de 4 GB e um crescimento
esperado de 50%. Para garantir que esse dispositivo nunca use /data
para instantâneos OTA, o cálculo será
semelhante a este:
FinalDessertSize = 4GB + (4GB * 0.5) = 6GB Super = FinalDessertSize * 2 = 12GB
Portanto, esse dispositivo precisa ter uma partição super
de 12 GB.
Com compactaçã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 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 semelhante a este:
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 da fábrica for de 4 GB e a atualização final for
de 5 GB, o super
precisará ser de 9 GB, em vez de 10 GB. No entanto, se a
primeira e a última atualização tiverem 5 GB, o espaço em super
poderá ser
insuficiente para a atualização final. As fórmulas acima presumem 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.
As taxas de compressão são uma estimativa. Uma imagem do SO pode ser compactada melhor ou pior dependendo do conteúdo. 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 descomprimidas como uma diretriz.
Calcular o tamanho
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 do AOSP são:
system.img
vendor.img
product.img
system_ext.img
vendor_dlkm.img
system_dlkm.img
Calcule o tamanho com base em imagens não analisadas. Ao criar o Android
12 ou versões anteriores, as imagens são espalhadas por padrão e podem ser descompiladas com
simg2img
.
Também é possível calcular os tamanhos de partição de um pacote OTA. Isso também estima o tamanho do snapshot 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.