El tamaño correcto de la super
es importante para la capacidad de actualización del dispositivo. El tamaño afecta directamente la cantidad de actualizaciones que puede aceptar un dispositivo y la cantidad de usuarios que pueden realizarlas con éxito.
Hay algunas variables importantes a considerar. El primero es el tamaño de fábrica , que es el tamaño de todas las particiones dinámicas cuando el dispositivo se actualiza por primera vez. El segundo es la tasa de crecimiento , que es el porcentaje que aumenta el tamaño del sistema operativo 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 debe tenerse en cuenta al dimensionar 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 algún porcentaje de espacio libre, entonces los dispositivos pueden restar cómodamente ese espacio al super
. O bien, los dispositivos pueden garantizar que /data
nunca sea necesario, simplemente haciéndolo super
suficientemente grande.
A continuación se muestran algunos modelos que ayudarán a guiar el tamaño super
partición en función de estas variables.
Confiando en /datos
Virtual A/B fomenta la reducción 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 probablemente tendrán esa cantidad de espacio libre con el tiempo. Calcular este número depende en gran medida del hardware del dispositivo y del comportamiento de los usuarios de ese dispositivo. En los ejemplos siguientes, este número se denomina AllowedUserdataUse
.
Sin compresión
Sin compresión, una OTA completa necesita una instantánea aproximadamente del mismo tamaño que el sistema operativo, por lo que se debe tener en cuenta al dimensionar super
:
FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth) Super = Max(FinalDessertUpdate, FinalDessertSize * 2 - AllowedUserdataUse)
Por ejemplo, considere un dispositivo Virtual A/B con un tamaño de fábrica de 4 GB, un crecimiento esperado del 50% y 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 dimensionar así:
FinalDessertSize = 4GB + (4GB * 0.5) = 6GB Super = Max(6GB, 6GB * 2 - 1GB) = Max(6GB, 11GB)
Por tanto, este dispositivo debería tener una 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 sistema operativo:
FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth) FinalOTASnapshotSize = FinalDessertSize * 0.7 Super = Max(FinalDessertUpdate, FinalDessertSize + FinalOTASnapshotSize - AllowedUserdataUse)
Por ejemplo, considere 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 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 dimensionar así:
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 tanto, este dispositivo debería tener una super
de 9,2 GB.
Sin depender de /data
Si desea tener OTA que nunca requieran espacio para instantáneas en /data
, entonces dimensionar 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, considere un dispositivo Virtual A/B 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 sería similar al siguiente:
FinalDessertSize = 4GB + (4GB * 0.5) = 6GB Super = FinalDessertSize * 2 = 12GB
Por tanto, este dispositivo debería tener una 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, considere 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 garantizar que este dispositivo nunca use /data
para instantáneas OTA, su cálculo sería similar al siguiente:
FinalDessertSize = 4GB + (4GB * 0.5) = 6GB FinalOTASnapshotSize = 6GB * 0.7 = 4.2GB Super = 6GB + 4.2GB = 10.2GB
Por tanto, este dispositivo debería tener una super
de 10,2 GB.
Advertencias
Puede resultar tentador observar que si el tamaño de fábrica es de 4 GB y la actualización final es de 5 GB, entonces 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, entonces 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 puede ser el mismo que el necesario para aplicar la primera actualización.
Tenga en cuenta que las relaciones de compresión son una estimación. Una imagen del sistema operativo puede comprimirse mejor o peor según su contenido. Si se utiliza un sistema de archivos comprimido como EROFS, la compresión adicional de Virtual A/B tiene rendimientos decrecientes. En este caso es mejor utilizar una de las fórmulas sin comprimir como guía.
Medición
Para encontrar el valor de FinalDessertSize
en los ejemplos anteriores, sume los tamaños de todas las particiones dinámicas. Las imágenes de partición dinámica AOSP son:
-
system.img
-
vendor.img
-
product.img
-
system_ext.img
-
vendor_dlkm.img
-
system_dlkm.img
Asegúrese de calcular el tamaño basándose en imágenes no dispersas. Al compilar Android 12 o versiones anteriores, las imágenes están dispersas de forma predeterminada y se pueden eliminar con simg2img
.
También es posible calcular el tamaño de las particiones desde un paquete OTA. Al hacerlo, 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
O puede utilizar la herramienta de análisis OTA . Esta herramienta no carga ningún archivo y analiza paquetes OTA localmente.
Para encontrar el valor de ExpectedGrowth
, utilice un dispositivo lanzado anteriormente. Utilice la super
imagen más antigua y más reciente para calcular el crecimiento.