Definisci le dimensioni della partizione super

La dimensione corretta della partizione super è importante per l'aggiornabilità del dispositivo. Le dimensioni influiscono direttamente sul numero di aggiornamenti che un dispositivo può ricevere e sul numero di utenti che possono riceverli correttamente.

Esistono alcune variabili importanti da considerare. La prima è la dimensione di fabbrica, ovvero le dimensioni di tutte le partizioni dinamiche al primo flashing del dispositivo. Il secondo è il tasso di crescita, ovvero la percentuale di aumento delle dimensioni del sistema operativo nell'intero ciclo di vita del dispositivo aggiornabile.

Inoltre, i dispositivi A/B virtuali possono utilizzare spazio su /data durante un aggiornamento e questo deve essere preso in considerazione quando si determina le dimensioni di super. Se su /data è necessario troppo spazio, alcuni utenti non sono in grado (o non vogliono) eseguire l'aggiornamento. Tuttavia, se è noto che la maggior parte degli utenti ha una certa percentuale di spazio libero, i dispositivi possono tranquillamente sottrarre questo spazio da super. In alternativa, i dispositivi possono garantire che /data non sia mai necessario, semplicemente aumentando la dimensione di super.

Di seguito sono riportati alcuni modelli per aiutarti a determinare le dimensioni delle partizioni super in base a queste variabili.

Affidarsi a /data

Il test A/B virtuale incoraggia la riduzione di super per consentire l'aumento delle dimensioni di /data. Parte di questo spazio è necessaria durante un aggiornamento. Per comprendere l'impatto sull'aggiornabilità, è essenziale sapere quale percentuale di dispositivi ha la probabilità di avere questa quantità di spazio libero nel tempo. La determinazione di questo numero dipende molto dall'hardware del dispositivo e dal comportamento degli utenti. Negli esempi riportati di seguito, questo numero è indicato come AllowedUserdataUse.

Senza compressione

Senza compressione, un'OTA completa richiede uno snapshot di dimensioni approssimativamente uguali a quelle del sistema operativo, pertanto questo deve essere preso in considerazione quando si determinano le dimensioni di super:

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

Ad esempio, prendi in considerazione un dispositivo virtuale A/B con dimensioni di fabbrica di 4 GB, una crescita prevista del 50% e la consapevolezza che quasi tutti gli utenti hanno 1 GB di spazio libero (o sono disposti a liberare fino a 1 GB di spazio per un aggiornamento). Per questo dispositivo, super può avere le seguenti dimensioni:

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

Pertanto, questo dispositivo dovrebbe avere una partizione super di 11 GB.

Con compressione

Con la compressione, un'OTA completa richiede uno snapshot di circa il 70% delle dimensioni del sistema operativo:

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

Ad esempio, prendi in considerazione un dispositivo configurato con la compressione A/B virtuale, con dimensioni di fabbrica di 4 GB, una crescita prevista del 50% e la consapevolezza che quasi tutti gli utenti hanno 1 GB di spazio libero (o sono disposti a liberare fino a 1 GB di spazio per un aggiornamento). Per questo dispositivo, super può essere impostato su:

  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

Pertanto, questo dispositivo dovrebbe avere una partizione super di 9,2 GB.

Senza fare affidamento su /data

Se vuoi avere OTA che non richiedono mai spazio per le istantanee su /data, la scelta delle dimensioni di super è semplice.

Senza compressione

Per un dispositivo A/B virtuale senza compressione o un normale dispositivo A/B:

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

Ad esempio, considera un dispositivo A/B virtuale con dimensioni di fabbrica di 4 GB e una crescita prevista del 50%. Per assicurarti che questo dispositivo non utilizzi mai /data per gli snapshot OTA, il calcolo sarà simile al seguente:

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

Pertanto, questo dispositivo dovrebbe avere una partizione super di 12 GB.

Con compressione

Per un dispositivo A/B virtuale con compressione:

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

Ad esempio, considera un dispositivo di compressione A/B virtuale con una dimensione di fabbrica di 4 GB e una crescita prevista del 50%. Per assicurarti che questo dispositivo non utilizzi mai /data per gli snapshot OTA, il calcolo sarà il seguente:

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

Pertanto, questo dispositivo dovrebbe avere una partizione super di 10,2 GB.

Limitazioni

Potrebbe essere allettante osservare che se le dimensioni di fabbrica sono 4 GB e l'aggiornamento finale è di 5 GB, super deve essere di 9 GB anziché 10 GB. Tuttavia, se il primo aggiornamento e l'aggiornamento finale sono entrambi di 5 GB, lo spazio in super potrebbe non essere sufficiente per l'aggiornamento finale. Le formule riportate sopra presuppongono che l'aumento della partizione possa avvenire in qualsiasi momento. Lo spazio necessario per applicare l'aggiornamento finale potrebbe essere lo stesso richiesto per applicare il primo aggiornamento.

Tieni presente che i rapporti di compressione sono una stima. L'immagine di un sistema operativo potrebbe essere compressa meglio o peggio in base ai relativi contenuti. Se utilizzi un file system compresso come EROFS, la compressione aggiuntiva di Virtual A/B ha rendimenti decrescenti. In questo caso, è meglio utilizzare una delle formule non compresse come linea guida.

Calcola le dimensioni

Per trovare il valore di FinalDessertSize negli esempi precedenti, somma le dimensioni di tutte le partizioni dinamiche. Le immagini delle partizioni dinamiche AOSP sono:

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

Assicurati di calcolare le dimensioni in base alle immagini non analizzate. Quando crei Android 12 o versioni precedenti, le immagini sono sparse per impostazione predefinita e possono essere non sparse con simg2img.

È anche possibile calcolare le dimensioni delle partizioni da un pacchetto OTA. In questo modo vengono anche stimate le dimensioni dello snapshot A/B virtuale per ogni partizione:

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

In alternativa, puoi utilizzare lo strumento di analisi OTA. Questo strumento non carica file e analizza i pacchetti OTA localmente.

Per trovare il valore di ExpectedGrowth, utilizza un dispositivo rilasciato in precedenza. Utilizza l'immagine super più antica e più recente per calcolare la crescita.