Es importante ajustar el tamaño de la partición super de forma correcta para la actualización del dispositivo. El tamaño afecta directamente la cantidad de actualizaciones que puede recibir un dispositivo y la cantidad de usuarios que pueden instalarlas correctamente.
Hay algunas variables importantes que debes tener en cuenta. La primera es el tamaño de fábrica, que es el tamaño de todas las particiones dinámicas cuando se flashea el dispositivo por primera vez. La segunda es la tasa de crecimiento, que es el porcentaje en que aumenta el tamaño del SO durante toda la vida útil actualizable del dispositivo.
Además, los dispositivos virtuales A/B pueden usar espacio en /data durante una actualización, y esto se debe tener en cuenta cuando se ajusta el tamaño de super. Si se necesita demasiado espacio en /data, algunos usuarios no podrán (o no querrán) instalar la actualización. Sin embargo, si se sabe que la mayoría de los usuarios tienen un porcentaje de espacio libre, los dispositivos pueden restar ese espacio de super sin problemas. O bien, los dispositivos pueden garantizar que nunca se necesite /data si super es lo suficientemente grande.
A continuación, se muestran algunos modelos para ayudarte a ajustar el tamaño de la partición super según estas variables.
Depender de /data
Virtual A/B recomienda reducir super para permitir aumentar el tamaño de /data. Se necesita parte de ese espacio durante una actualización. Para comprender el impacto en la capacidad de actualización, es fundamental saber qué porcentaje de dispositivos es probable que tengan esa cantidad de espacio libre con el tiempo. Determinar este número depende en gran medida del hardware del dispositivo y del comportamiento de los usuarios de ese dispositivo. En los ejemplos que se muestran a continuación, este número se conoce como AllowedUserdataUse.
Sin compresión
Sin compresión, una OTA completa necesita una instantánea aproximadamente del mismo tamaño que el SO, por lo que se debe tener en cuenta cuando se ajusta el tamaño de super:
FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth) Super = Max(FinalDessertUpdate, FinalDessertSize * 2 - AllowedUserdataUse)
Por ejemplo, considera un dispositivo virtual A/B con un tamaño de fábrica de 4 GB, un crecimiento esperado del 50% y el conocimiento de que casi todos los usuarios tienen 1 GB libre (o están dispuestos a liberar hasta 1 GB de espacio para una actualización). Para este dispositivo, super se puede ajustar de la siguiente manera:
FinalDessertSize = 4GB + (4GB * 0.5) = 6GB Super = Max(6GB, 6GB * 2 - 1GB) = Max(6GB, 11GB)
Por lo tanto, este dispositivo debería tener una partición super de 11 GB.
Con compresión
Con compresión, una OTA completa necesita una instantánea de aproximadamente el 70% del tamaño del SO:
FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth) FinalOTASnapshotSize = FinalDessertSize * 0.7 Super = Max(FinalDessertUpdate, FinalDessertSize + FinalOTASnapshotSize - AllowedUserdataUse)
Por ejemplo, considera un dispositivo configurado con compresión virtual A/B, con un tamaño de fábrica de 4 GB, un crecimiento esperado del 50% y el conocimiento de que casi todos los usuarios tienen 1 GB libre (o están dispuestos a liberar hasta 1 GB de espacio para una actualización). Para este dispositivo, super se puede ajustar de la siguiente manera:
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
Por lo tanto, este dispositivo debería tener una partición super de 9.2 GB.
Sin depender de /data
Si deseas tener OTAs que nunca requieran espacio de instantáneas en /data, ajustar el tamaño de super es sencillo.
Sin compresión
Para un dispositivo virtual A/B sin compresión o un dispositivo A/B normal:
FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth) Super = FinalDessertSize * 2
Por ejemplo, considera un dispositivo virtual A/B con un tamaño de fábrica de 4 GB y un crecimiento esperado del 50%. Para asegurarte de que este dispositivo nunca use /data para instantáneas de OTA, su cálculo se vería de la siguiente manera:
FinalDessertSize = 4GB + (4GB * 0.5) = 6GB Super = FinalDessertSize * 2 = 12GB
Por lo tanto, este dispositivo debería tener una partición super de 12 GB.
Con compresión
Para un dispositivo virtual A/B con compresión:
FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth) FinalOTASnapshotSize = FinalDessertSize * 0.7 Super = FinalDessertSize + FinalOTASnapshotSize
Por ejemplo, considera un dispositivo de compresión virtual A/B con un tamaño de fábrica de 4 GB y un crecimiento esperado del 50%. Para asegurarte de que este dispositivo nunca use /data para instantáneas de OTA, su cálculo se vería de la siguiente manera:
FinalDessertSize = 4GB + (4GB * 0.5) = 6GB FinalOTASnapshotSize = 6GB * 0.7 = 4.2GB Super = 6GB + 4.2GB = 10.2GB
Por lo tanto, este dispositivo debería tener una partición super de 10.2 GB.
Advertencias
Podría ser tentador observar que, si el tamaño de fábrica es de 4 GB y la actualización final es de 5 GB, super debe ser de 9 GB, en lugar de 10 GB. Sin embargo, si la primera actualización y la actualización final son de 5 GB, el espacio en super podría ser insuficiente para la actualización final. Las fórmulas anteriores suponen que el crecimiento de la partición podría ocurrir en cualquier momento. El espacio necesario para aplicar la actualización final podría ser el mismo que el necesario para aplicar la primera actualización.
Ten en cuenta que las relaciones de compresión son una estimación. Una imagen del SO podría comprimirse mejor o peor según su contenido. Si usas un sistema de archivos comprimido, como EROFS, la compresión adicional de Virtual A/B tiene rendimientos decrecientes. En este caso, es mejor usar una de las fórmulas sin comprimir como guía.
Cómo calcular el tamaño
Para encontrar el valor de FactorySize en los ejemplos anteriores, suma los tamaños de todas las particiones dinámicas. Las imágenes de particiones dinámicas de AOSP son las siguientes:
system.imgvendor.imgproduct.imgsystem_ext.imgvendor_dlkm.imgsystem_dlkm.img
Asegúrate de calcular el tamaño en función de las imágenes no dispersas. Cuando se compila Android 12 o versiones anteriores, las imágenes se dispersan de forma predeterminada y se pueden dispersar con simg2img.
También es posible calcular los tamaños de las particiones desde un paquete OTA. Si lo haces, también se estima el tamaño de la instantánea virtual A/B para cada partición:
python3 system/update_engine/scripts/payload_info.py path/to/ota-package.zip
También puedes usar la herramienta de análisis de OTA. Esta herramienta no sube ningún archivo y analiza los paquetes OTA de forma local.
Para encontrar el valor de ExpectedGrowth, usa un dispositivo lanzado anteriormente. Usa la imagen super más antigua y la más reciente para calcular el crecimiento.