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 lorsque l'appareil est flashé pour la première fois. La seconde 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 Virtual A/B peuvent utiliser de l'espace sur /data lors d'une mise à jour. Vous devez en tenir compte lorsque vous dimensionnez super. Si trop d'espace est nécessaire sur /data, certains utilisateurs ne pourront pas (ou ne voudront 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 à 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 la réduction de super pour permettre d'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 nombre dépend fortement du matériel de l'appareil et du comportement des utilisateurs de cet appareil. Dans les exemples ci-dessous, ce nombre est appelé AllowedUserdataUse.
Sans compression
Sans compression, une mise à jour 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)
Par exemple, prenons l'exemple d'un appareil A/B virtuel avec une taille d'usine de 4 Go, une croissance attendue 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 devrait donc 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)
Par exemple, prenons un appareil configuré avec la compression Virtual A/B, avec une taille d'usine de 4 Go, une croissance attendue 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 devrait donc disposer d'une partition super de 9, 2 Go.
Sans s'appuyer sur /data
Si vous souhaitez disposer d'OTA qui ne nécessitent jamais d'espace d'instantané sur /data, le dimensionnement 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 attendue 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 devrait 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 périphérique de compression Virtual A/B avec une taille d'usine de 4 Go et une croissance attendue de 50 %. Pour s'assurer que cet appareil n'utilise jamais /data pour les snapshots 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 devrait donc disposer d'une partition super de 10, 2 Go.
Mises en garde
Il peut être tentant d'observer que si la taille d'usine est de 4 Go et que la mise à jour finale est de 5 Go, alors super doit être de 9 Go, et non de 10 Go. Toutefois, si la première et la dernière mise à jour font toutes deux 5 Go, l'espace disponible dans super peut être insuffisant pour la dernière mise à jour. Les formules ci-dessus supposent que la croissance des partitions 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 des estimations. Une image d'OS peut être plus ou moins bien compressée selon 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 FactorySize dans les exemples précédents, additionnez les tailles de toutes les partitions dynamiques. Voici les images de partition dynamique de l'AOSP :
system.imgvendor.imgproduct.imgsystem_ext.imgvendor_dlkm.imgsystem_dlkm.img
Veillez à calculer la taille en fonction des images non éparses. Lorsque vous créez des images Android 12 ou version antérieure, elles sont éparses par défaut et peuvent être rendues 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é de test 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 OTA. Cet outil n'importe aucun fichier et analyse les packages OTA en local.
Pour trouver la valeur de ExpectedGrowth, utilisez un appareil déjà sorti. Utilisez l'image super la plus ancienne et la plus récente pour calculer la croissance.