Cómo medir Súper

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.