Definisci le dimensioni della partizione super

Il dimensionamento corretto della partizione super è importante per l'aggiornabilità del dispositivo. Le dimensioni influenzano direttamente il numero di aggiornamenti che un dispositivo può ricevere e il numero di utenti che possono ricevere correttamente questi aggiornamenti.

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

Inoltre, i dispositivi Virtual A/B possono utilizzare spazio su /data durante un aggiornamento e questo deve essere preso in considerazione quando si dimensiona super. Se è necessario troppo spazio su /data, 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 sottrarre comodamente questo spazio da super. In alternativa, i dispositivi possono garantire che /data non sia mai necessario semplicemente rendendo super sufficientemente grande.

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

Affidarsi a /data

Il test A/B virtuale incoraggia a ridurre super per aumentare le dimensioni di /data. Parte di questo spazio è necessario durante un aggiornamento. Per comprendere l'impatto sull'aggiornabilità, è essenziale sapere la percentuale di dispositivi che probabilmente avranno quella quantità di spazio libero nel tempo. Determinare questo numero dipende molto dall'hardware del dispositivo e dal comportamento degli utenti del dispositivo. Negli esempi riportati di seguito, questo numero viene indicato come AllowedUserdataUse.

Senza compressione

Senza compressione, un aggiornamento OTA completo richiede uno snapshot di dimensioni simili a quelle del sistema operativo, pertanto è necessario tenerne conto quando si dimensiona super:

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

Ad esempio, considera un dispositivo A/B virtuale con una dimensione 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 dimensionato nel seguente modo:

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

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

Con compressione

Con la compressione, un aggiornamento OTA completo richiede uno snapshot di dimensioni pari a circa il 70% di quelle del sistema operativo:

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

Ad esempio, considera un dispositivo configurato con la compressione A/B virtuale, con una dimensione 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 dimensionato nel seguente modo:

  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 a /data

Se vuoi che gli aggiornamenti over-the-air non richiedano mai spazio per gli snapshot su /data, il dimensionamento super è semplice.

Senza compressione

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

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

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

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

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

Con compressione

Per un dispositivo Virtual A/B 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 sarebbe 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 da 10,2 GB.

Avvertenze

Potrebbe essere allettante osservare che se le dimensioni di fabbrica sono 4 GB e l'aggiornamento finale è 5 GB, allora super deve essere 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 la crescita della partizione possa verificarsi 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. Un'immagine del sistema operativo potrebbe essere compressa meglio o peggio a seconda dei suoi 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.

Calcolare le dimensioni

Per trovare il valore di FactorySize 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 sparse. Quando crei Android 12 o versioni precedenti, le immagini vengono sparse per impostazione predefinita e possono essere rese non sparse con simg2img.

È anche possibile calcolare le dimensioni delle partizioni da un pacchetto OTA. In questo modo viene stimata anche la dimensione 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 alcun file e analizza i pacchetti OTA localmente.

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