Größe der Super-Partition festlegen

Die richtige Größe der super-Partition ist wichtig für die Aktualisierbarkeit des Geräts. Die Größe wirkt sich direkt darauf aus, wie viele Updates ein Gerät aufnehmen kann und wie viele Nutzer diese Updates erfolgreich installieren können.

Es gibt einige wichtige Variablen, die Sie berücksichtigen sollten. Die erste ist die Größe bei der Ersteinrichtung, also die Größe aller dynamischen Partitionen beim ersten Flashen des Geräts. Der zweite ist die Wachstumsrate, also der Prozentsatz, um den sich die Größe des Betriebssystems während der gesamten Aktualisierungsdauer des Geräts erhöht.

Außerdem können virtuelle A/B-Geräte während eines Updates Speicherplatz auf /data belegen. Dies muss bei der Festlegung der Größe von /data berücksichtigt werden.super Wenn auf /data zu viel Speicherplatz benötigt wird, können einige Nutzer das Update nicht installieren oder sind nicht bereit dazu. Wenn jedoch bekannt ist, dass die meisten Nutzer einen bestimmten Prozentsatz an freiem Speicherplatz haben, kann dieser Speicherplatz von super abgezogen werden. Alternativ können Geräte dafür sorgen, dass /data nie benötigt wird, indem sie super einfach groß genug machen.

Unten finden Sie einige Modelle, die Ihnen bei der Festlegung der Größe von super-Partitionen anhand dieser Variablen helfen.

Auf /data zugreifen

Bei virtuellen A/B-Tests wird empfohlen, super zu verkleinern, um die Größe von /data zu erhöhen. Ein Teil dieses Speicherplatzes wird bei einem Update benötigt. Um die Auswirkungen auf die Aktualisierbarkeit zu verstehen, ist es wichtig zu wissen, bei welchem Prozentsatz der Geräte diese Menge an Speicherplatz im Laufe der Zeit wahrscheinlich kostenlos sein wird. Die Ermittlung dieser Zahl hängt stark von der Hardware des Geräts und dem Nutzerverhalten auf diesem Gerät ab. In den folgenden Beispielen wird diese Zahl als AllowedUserdataUse bezeichnet.

Ohne Komprimierung

Ohne Komprimierung benötigt ein vollständiger Over-the-air-Aktualisierungsvorgang einen Snapshot mit ungefähr derselben Größe wie das Betriebssystem. Dies muss bei der Festlegung der Größe von super berücksichtigt werden:

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

Angenommen, Sie haben ein virtuelles A/B-Gerät mit einer Werksgröße von 4 GB, ein erwartetes Wachstum von 50 % und wissen, dass fast alle Nutzer 1 GB freien Speicherplatz haben (oder bereit sind, bis zu 1 GB Speicherplatz für ein Update freizugeben). Für dieses Gerät kann super so dimensioniert werden:

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

Daher sollte dieses Gerät eine super-Partition mit 11 GB haben.

Mit Komprimierung

Bei der Komprimierung benötigt ein vollständiger Over-the-air-Aktualisierungsvorgang einen Snapshot mit etwa 70% der Größe des Betriebssystems:

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

Angenommen, Sie haben ein Gerät mit virtueller A/B-Komprimierung konfiguriert, das ab Werk 4 GB groß ist, mit einem erwarteten Wachstum von 50 % und Sie wissen, dass fast alle Nutzer 1 GB freien Speicherplatz haben (oder bereit sind, bis zu 1 GB Speicherplatz für ein Update freizugeben). Für dieses Gerät kann super so dimensioniert werden:

  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

Daher sollte dieses Gerät eine 9, 2-GB-super-Partition haben.

Ohne /data

Wenn Sie OTAs haben möchten, für die auf /data nie Snapshot-Speicherplatz benötigt wird, ist die Größe von super ganz einfach festzulegen.

Ohne Komprimierung

Für ein virtuelles A/B-Gerät ohne Komprimierung oder ein normales A/B-Gerät:

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

Angenommen, Sie haben ein virtuelles A/B-Gerät mit einer Werksgröße von 4 GB und einem erwarteten Wachstum von 50%. Damit dieses Gerät niemals /data für OTA-Snapshots verwendet, würde die Berechnung so aussehen:

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

Daher sollte dieses Gerät eine 12-GB-super-Partition haben.

Mit Komprimierung

Für ein virtuelles A/B-Gerät mit Komprimierung:

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

Angenommen, Sie haben ein virtuelles A/B-Komprimierungsgerät mit einer Werksgröße von 4 GB und einem erwarteten Wachstum von 50%. Damit dieses Gerät niemals /data für OTA-Snapshots verwendet, sieht die Berechnung so aus:

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

Daher sollte dieses Gerät eine super-Partition mit 10, 2 GB haben.

Einschränkungen

Es könnte verlockend sein, zu sagen, dass super 9 GB statt 10 GB groß sein muss, wenn die Größe der Werksversion 4 GB und die des letzten Updates 5 GB beträgt. Wenn das erste und das letzte Update jedoch jeweils 5 GB groß sind, ist in super möglicherweise nicht genügend Speicherplatz für das letzte Update verfügbar. Bei den obigen Formeln wird davon ausgegangen, dass die Partition jederzeit wachsen kann. Der für die Anwendung des letzten Updates erforderliche Speicherplatz kann mit dem für die Anwendung des ersten Updates übereinstimmen.

Die Komprimierungsraten sind nur Schätzungen. Je nach Inhalt kann ein Betriebssystem-Image besser oder schlechter komprimiert werden. Wenn Sie ein komprimiertes Dateisystem wie EROFS verwenden, ist die zusätzliche Komprimierung durch Virtual A/B weniger effektiv. In diesem Fall sollten Sie eine der nicht komprimierten Formeln als Anhaltspunkt verwenden.

Größe berechnen

Um den Wert von FinalDessertSize in den obigen Beispielen zu ermitteln, addieren Sie die Größe aller dynamischen Partitionen. Die AOSP-Images für dynamische Partitionen sind:

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

Berechnen Sie die Größe anhand der nicht geparsten Bilder. Beim Erstellen von Android 12 oder niedriger werden Bilder standardmäßig sparsam verteilt und können mit simg2img desparsiert werden.

Es ist auch möglich, Partitionsgrößen aus einem OTA-Paket zu berechnen. Dadurch wird auch die Größe des virtuellen A/B-Snapshots für jede Partition geschätzt:

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

Alternativ können Sie das OTA-Analysetool verwenden. Dieses Tool lädt keine Dateien hoch und analysiert OTA-Pakete lokal.

Verwenden Sie ein zuvor veröffentlichtes Gerät, um den Wert von ExpectedGrowth zu ermitteln. Verwenden Sie das früheste und das neueste super-Image, um das Wachstum zu berechnen.