Il est important de dimensionner correctement la partition super pour que l'appareil puisse être mis à jour. La taille a un impact direct sur le nombre de mises à jour qu'un appareil peut recevoir et sur le nombre d'utilisateurs qui peuvent les installer.
Plusieurs variables importantes sont à prendre en compte. La première est la taille d'usine, qui correspond à la taille de toutes les partitions dynamiques lors du premier flashage de l'appareil. La deuxième est le taux de croissance, qui correspond au pourcentage d'augmentation de la taille de l'OS pendant 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, ce qui doit être pris en compte lors du dimensionnement de super. Si trop d'espace est nécessaire sur /data, certains utilisateurs ne pourront pas (ou ne voudront pas) installer 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 la partition super en fonction de ces variables.
S'appuyer sur /data
A/B virtuel encourage la réduction de 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 capacité de mise à jour, il est essentiel de savoir quel pourcentage d'appareils est susceptible de disposer de cet espace libre au fil du temps. Ce chiffre dépend fortement du matériel de l'appareil et du comportement des utilisateurs. Dans les exemples ci-dessous, ce nombre est appelé AllowedUserdataUse.
Sans compression
Sans compression, une OTA complète nécessite un instantané à peu près de la même taille que l'OS. Il faut donc en tenir compte lors du dimensionnement de super :
FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth) Super = Max(FinalDessertUpdate, FinalDessertSize * 2 - AllowedUserdataUse)
Prenons l'exemple d'un appareil A/B virtuel avec une taille d'usine de 4 Go, une croissance prévue de 50 % et la certitude que presque tous les utilisateurs disposent de 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)
Cet appareil doit donc disposer d'une partition super de 11 Go.
Avec compression
Avec compression, une 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 prévue de 50 % et la certitude que presque tous les utilisateurs disposent de 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
Cet appareil doit donc disposer d'une partition super de 9, 2 Go.
Sans s'appuyer sur /data
Si vous souhaitez que les OTA ne nécessitent jamais d'espace d'instantané sur /data, le dimensionnement de super est simple.
Sans compression
Pour un appareil A/B virtuel sans compression ou un appareil A/B normal :
FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth) Super = FinalDessertSize * 2
Prenons l'exemple d'un appareil A/B virtuel avec une taille d'usine de 4 Go et une croissance prévue de 50%. Pour s'assurer que cet appareil n'utilise jamais /data pour les instantanés OTA, le calcul se présente comme suit :
FinalDessertSize = 4GB + (4GB * 0.5) = 6GB Super = FinalDessertSize * 2 = 12GB
Cet appareil doit donc 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 avec une taille d'usine de 4 Go et une croissance prévue de 50%. Pour s'assurer que cet appareil n'utilise jamais /data pour les instantanés OTA, le calcul se présente comme suit :
FinalDessertSize = 4GB + (4GB * 0.5) = 6GB FinalOTASnapshotSize = 6GB * 0.7 = 4.2GB Super = 6GB + 4.2GB = 10.2GB
Cet appareil doit donc disposer d'une partition super de 10, 2 Go.
Mises en garde
On pourrait être tenté d'observer 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 taux de compression sont une estimation. Une image d'OS peut être compressée plus ou moins bien en fonction de son contenu. Si vous utilisez un système de fichiers compressé tel qu'EROFS, la compression supplémentaire d'A/B virtuel a des rendements décroissants. Dans ce cas, il est préférable d'utiliser l'une des formules non compressées comme guide.
Calculer la taille
Pour trouver la valeur de FactorySize dans les exemples précédents, additionnez les tailles de toutes les partitions dynamiques. Les images de partition dynamique AOSP sont les suivantes :
system.imgvendor.imgproduct.imgsystem_ext.imgvendor_dlkm.imgsystem_dlkm.img
Veillez à calculer la taille en fonction des images non éparses. Lorsque vous créez Android 12 ou une version antérieure, les images sont éparses par défaut et peuvent être non éparses avec simg2img.
Il est également possible de calculer la taille des partitions à 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 OTA. Cet outil n'importe aucun fichier et analyse les packages OTA localement.
Pour trouver la valeur de ExpectedGrowth, utilisez un appareil précédemment mis sur le marché. Utilisez l'image super la plus ancienne et la plus récente pour calculer la croissance.