Es importante ajustar el tamaño de la partición super
de forma correcta para que el dispositivo pueda actualizarse. El tamaño afecta directamente la cantidad de actualizaciones que puede recibir un dispositivo y la cantidad de usuarios que pueden recibirlas correctamente.
Hay algunas variables importantes que debes tener en cuenta. El primero es el tamaño de fábrica, que es el tamaño de todas las particiones dinámicas cuando se escriben en el dispositivo por primera vez. El segundo es la tasa de crecimiento, que es el porcentaje en el que aumenta el tamaño del SO durante toda la vida útil actualizable del dispositivo.
Además, los dispositivos A/B virtuales pueden usar espacio en /data
durante una actualización, y esto se debe tener en cuenta cuando se establece el tamaño de super
. Si se necesita demasiado espacio en /data
, algunos usuarios no pueden (o no quieren) realizar 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
con comodidad. O bien, los dispositivos pueden garantizar que nunca se necesite /data
, simplemente haciendo que super
sea lo suficientemente grande.
A continuación, se incluyen algunos modelos para guiar el tamaño de la partición super
en función de estas variables.
Usa /data
La A/B virtual fomenta la reducción de super
para permitir aumentar el tamaño de /data
. Parte de ese espacio se necesita durante una actualización. Para comprender el impacto en la capacidad de actualización, es esencial saber qué porcentaje de dispositivos es probable que tenga esa cantidad de espacio libre con el tiempo. La determinación de este número depende en gran medida del hardware del dispositivo y del comportamiento de los usuarios de ese dispositivo. En los siguientes ejemplos, este número se denomina AllowedUserdataUse
.
Sin compresión
Sin compresión, una OTA completa necesita una instantánea de aproximadamente el mismo tamaño que el SO, por lo que se debe tener en cuenta lo siguiente cuando se ajusta el tamaño de super
:
FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth) Super = Max(FinalDessertUpdate, FinalDessertSize * 2 - AllowedUserdataUse)
Por ejemplo, considera un dispositivo A/B virtual 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
puede tener el siguiente tamaño:
FinalDessertSize = 4GB + (4GB * 0.5) = 6GB Super = Max(6GB, 6GB * 2 - 1GB) = Max(6GB, 11GB)
Por lo tanto, este dispositivo debe tener una partición super
de 11 GB.
Con compresión
Con la 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 A/B virtual, 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 de espacio libre (o están dispuestos a liberar hasta 1 GB de espacio para una actualización). Para este dispositivo, super
puede tener el tamaño siguiente:
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 OTA que nunca requieran espacio de instantáneas en /data
, el tamaño de super
es sencillo.
Sin compresión
Para un dispositivo A/B virtual sin compresión o un dispositivo A/B normal, haz lo siguiente:
FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth) Super = FinalDessertSize * 2
Por ejemplo, considera un dispositivo A/B virtual con un tamaño de fábrica de 4 GB y un crecimiento esperado del 50%. Para garantizar que este dispositivo nunca use /data
para las instantáneas 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 debe tener una partición super
de 12 GB.
Con compresión
Para un dispositivo A/B virtual con compresión, haz lo siguiente:
FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth) FinalOTASnapshotSize = FinalDessertSize * 0.7 Super = FinalDessertSize + FinalOTASnapshotSize
Por ejemplo, considera un dispositivo de compresión A/B virtual con un tamaño de fábrica de 4 GB y un crecimiento esperado del 50%. Para garantizar que este dispositivo nunca use /data
para instantáneas 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 debe 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, es posible que el espacio en super
no sea suficiente para la actualización final. En las fórmulas anteriores, se supone que el crecimiento de la partición puede ocurrir en cualquier momento. El espacio necesario para aplicar la actualización final puede ser el mismo que se requiere para aplicar la primera actualización.
Ten en cuenta que las relaciones de compresión son una estimación. Una imagen del SO puede 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 FinalDessertSize
en los ejemplos anteriores, suma los tamaños de todas las particiones dinámicas. Las imágenes de partición dinámica de AOSP son las siguientes:
system.img
vendor.img
product.img
system_ext.img
vendor_dlkm.img
system_dlkm.img
Asegúrate de calcular el tamaño en función de las imágenes sin analizar. Cuando se compila Android 12 o versiones anteriores, las imágenes se dispersan de forma predeterminada y se pueden deshacer con simg2img
.
También es posible calcular los tamaños de partición a partir de un paquete OTA. De esta manera, también se estima el tamaño de la instantánea A/B virtual 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.