Définir la taille de la super partition

Il est important de dimensionner correctement la partition super pour permettre la mise à jour de l'appareil. La taille a un impact direct sur le nombre de mises à jour qu'un appareil peut recevoir et sur le nombre d'utilisateurs pouvant les recevoir.

Plusieurs variables importantes sont à prendre en compte. La première est la taille d'usine, qui correspond à la taille de toutes les partitions dynamiques lorsque l'appareil est flashé pour la première fois. Le second est le taux de croissance, qui correspond au pourcentage d'augmentation de la taille de l'OS sur toute la durée de vie de l'appareil.

De plus, les appareils A/B virtuels peuvent utiliser de l'espace sur /data lors d'une mise à jour. Cela doit être pris en compte lors de la mise à l'échelle de super. Si trop d'espace est nécessaire sur /data, certains utilisateurs ne peuvent pas (ou ne veulent pas) effectuer la mise à jour. Toutefois, si l'on sait que la plupart des utilisateurs disposent d'un certain pourcentage d'espace libre, les appareils peuvent facilement soustraire cet espace de super. Les appareils peuvent également garantir que /data n'est jamais nécessaire, simplement en rendant super suffisamment grand.

Vous trouverez ci-dessous quelques modèles pour vous aider à dimensionner les partitions super en fonction de ces variables.

S'appuyer sur /data

Le test A/B virtuel encourage à réduire super pour augmenter la taille de /data. Une partie de cet espace est nécessaire lors d'une mise à jour. Pour comprendre l'impact sur la possibilité de mise à jour, il est essentiel de savoir quel pourcentage d'appareils est susceptible de disposer de cette quantité d'espace libre au fil du temps. Ce nombre dépend fortement du matériel de l'appareil et du comportement des utilisateurs à son égard. Dans les exemples ci-dessous, ce nombre est appelé AllowedUserdataUse.

Sans compression

Sans compression, une mise à jour OTA complète nécessite un instantané d'environ la même taille que l'OS. Cela doit donc être pris en compte lors du dimensionnement de super:

  FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth)
  Super = Max(FinalDessertUpdate, FinalDessertSize * 2 - AllowedUserdataUse)

Prenons l'exemple d'un appareil virtuel A/B dont la taille d'usine est de 4 Go, dont la croissance attendue est de 50 % et dont vous savez que presque tous les utilisateurs disposent d'1 Go d'espace libre (ou sont prêts à libérer jusqu'à 1 Go d'espace pour une mise à jour). Pour cet appareil, super peut être dimensionné comme suit:

  FinalDessertSize = 4GB + (4GB * 0.5) = 6GB
  Super = Max(6GB, 6GB * 2 - 1GB) = Max(6GB, 11GB)

Par conséquent, cet appareil doit disposer d'une partition super de 11 Go.

Avec compression

Avec la compression, une mise à jour OTA complète nécessite un instantané d'environ 70% de la taille de l'OS:

  FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth)
  FinalOTASnapshotSize = FinalDessertSize * 0.7
  Super = Max(FinalDessertUpdate, FinalDessertSize + FinalOTASnapshotSize - AllowedUserdataUse)

Prenons l'exemple d'un appareil configuré avec la compression A/B virtuelle, avec une taille d'usine de 4 Go, une croissance attendue de 50 % et la connaissance que presque tous les utilisateurs disposent d'1 Go d'espace libre (ou sont prêts à libérer jusqu'à 1 Go d'espace pour une mise à jour). Pour cet appareil, super peut être dimensionné comme suit:

  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

Par conséquent, cet appareil doit disposer d'une partition super de 9,2 Go.

Sans s'appuyer sur /data

Si vous souhaitez que les OTA n'aient jamais besoin d'espace d'instantané sur /data, la mise à l'échelle de super est simple.

Sans compression

Pour un appareil A/B virtuel sans compression ou un appareil A/B standard:

  FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth)
  Super = FinalDessertSize * 2

Prenons l'exemple d'un appareil A/B virtuel dont la taille d'usine est de 4 Go et la croissance attendue de 50%. Pour s'assurer que cet appareil n'utilise jamais /data pour les instantanés OTA, son calcul se présente comme suit:

  FinalDessertSize = 4GB + (4GB * 0.5) = 6GB
  Super = FinalDessertSize * 2 = 12GB

Par conséquent, cet appareil doit disposer d'une partition super de 12 Go.

Avec compression

Pour un appareil A/B virtuel avec compression:

  FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth)
  FinalOTASnapshotSize = FinalDessertSize * 0.7
  Super = FinalDessertSize + FinalOTASnapshotSize

Prenons l'exemple d'un appareil de compression A/B virtuel dont la taille d'usine est de 4 Go et la croissance attendue de 50%. Pour s'assurer que cet appareil n'utilise jamais /data pour les instantanés OTA, son calcul se présente comme suit:

  FinalDessertSize = 4GB + (4GB * 0.5) = 6GB
  FinalOTASnapshotSize = 6GB * 0.7 = 4.2GB
  Super = 6GB + 4.2GB = 10.2GB

Par conséquent, cet appareil doit disposer d'une partition super de 10,2 Go.

Mises en garde

On pourrait être tenté de constater que si la taille d'usine est de 4 Go et que la mise à jour finale est de 5 Go, super doit être de 9 Go, et non de 10 Go. Toutefois, si la première mise à jour et la mise à jour finale sont toutes deux de 5 Go, l'espace dans super peut être insuffisant pour la mise à jour finale. Les formules ci-dessus supposent que la croissance de la partition peut se produire à tout moment. L'espace nécessaire pour appliquer la mise à jour finale peut être le même que celui requis pour appliquer la première mise à jour.

Notez que les ratios de compression sont une estimation. Une image d'OS peut se compresser mieux ou moins bien en fonction de son contenu. Si vous utilisez un système de fichiers compressé tel qu'EROFS, la compression supplémentaire de Virtual A/B a des rendements décroissants. Dans ce cas, il est préférable d'utiliser l'une des formules non compressées comme référence.

Calculer la taille

Pour trouver la valeur de FinalDessertSize dans les exemples ci-dessus, additionnez les tailles de toutes les partitions dynamiques. Les images de partition dynamique AOSP sont les suivantes:

  • system.img
  • vendor.img
  • product.img
  • system_ext.img
  • vendor_dlkm.img
  • system_dlkm.img

Veillez à calculer la taille en fonction des images non analysées. Lors de la compilation d'Android 12 ou version antérieure, les images sont espacées par défaut et peuvent être désespacées avec simg2img.

Il est également possible de calculer les tailles de partition à partir d'un package OTA. Cela permet également d'estimer la taille de l'instantané A/B virtuel pour chaque partition:

  python3 system/update_engine/scripts/payload_info.py path/to/ota-package.zip

Vous pouvez également utiliser l'outil d'analyse des mises à jour logicielles. Cet outil n'importe aucun fichier et analyse les packages OTA localement.

Pour trouver la valeur de ExpectedGrowth, utilisez un appareil précédemment publié. Utilisez l'image super la plus ancienne et la plus récente pour calculer la croissance.