Mengatur ukuran superpartisi

Mengatur ukuran partisi super dengan benar penting untuk kemampuan update perangkat. Ukuran secara langsung memengaruhi jumlah update yang dapat dilakukan perangkat dan jumlah pengguna yang dapat berhasil melakukan update tersebut.

Ada beberapa variabel penting yang perlu dipertimbangkan. Yang pertama adalah ukuran pabrik, yaitu ukuran semua partisi dinamis saat perangkat pertama kali di-flash. Yang kedua adalah tingkat pertumbuhan, yaitu persentase peningkatan ukuran OS selama masa pakai perangkat yang dapat diupdate.

Selain itu, perangkat A/B Virtual dapat menggunakan ruang di /data selama update, dan hal ini harus dipertimbangkan saat menentukan ukuran super. Jika ruang yang diperlukan terlalu besar di /data, beberapa pengguna tidak dapat (atau tidak mau) melakukan update. Namun, jika diketahui bahwa sebagian besar pengguna memiliki ruang kosong dengan persentase tertentu, perangkat dapat dengan mudah mengurangi ruang tersebut dari super. Atau, perangkat dapat menjamin bahwa /data tidak pernah diperlukan, cukup dengan membuat super cukup besar.

Berikut adalah beberapa model untuk membantu memandu penentuan ukuran partisi super berdasarkan variabel ini.

Mengandalkan /data

A/B virtual mendorong penyusutan super untuk memungkinkan peningkatan ukuran /data. Sebagian ruang tersebut diperlukan selama update. Untuk memahami dampaknya terhadap kemampuan update, penting untuk mengetahui persentase perangkat yang kemungkinan memiliki jumlah ruang kosong tersebut dari waktu ke waktu. Mengetahui jumlah ini sangat bergantung pada hardware perangkat dan perilaku pengguna perangkat tersebut. Dalam contoh di bawah, angka ini disebut sebagai AllowedUserdataUse.

Tanpa kompresi

Tanpa kompresi, OTA penuh memerlukan snapshot yang ukurannya hampir sama dengan OS, sehingga hal ini harus diperhitungkan saat menentukan ukuran super:

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

Misalnya, pertimbangkan perangkat A/B Virtual dengan ukuran pabrikan 4 GB, perkiraan pertumbuhan 50%, dan pengetahuan bahwa hampir semua pengguna memiliki ruang kosong 1 GB (atau bersedia mengosongkan ruang hingga 1 GB untuk update). Untuk perangkat ini, super dapat diukur seperti berikut:

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

Dengan demikian, perangkat ini harus memiliki partisi super 11 GB.

Dengan kompresi

Dengan kompresi, OTA penuh memerlukan snapshot yang ukurannya sekitar 70% dari ukuran OS:

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

Misalnya, pertimbangkan perangkat yang dikonfigurasi dengan kompresi A/B Virtual, dengan ukuran pabrik 4 GB, perkiraan pertumbuhan 50%, dan pengetahuan bahwa hampir semua pengguna memiliki ruang kosong 1 GB (atau bersedia mengosongkan ruang hingga 1 GB untuk update). Untuk perangkat ini, super dapat diubah ukurannya seperti berikut:

  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

Jadi, perangkat ini harus memiliki partisi super berukuran 9,2 GB.

Tanpa mengandalkan /data

Jika Anda ingin memiliki OTA yang tidak pernah memerlukan ruang snapshot di /data, maka penentuan ukuran super sangat mudah.

Tanpa kompresi

Untuk perangkat A/B Virtual tanpa kompresi, atau perangkat A/B normal:

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

Misalnya, pertimbangkan perangkat A/B Virtual dengan ukuran pabrik 4 GB dan perkiraan pertumbuhan sebesar 50%. Untuk memastikan perangkat ini tidak pernah menggunakan /data untuk snapshot OTA, perhitungannya akan terlihat seperti:

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

Jadi, perangkat ini harus memiliki partisi super 12 GB.

Dengan kompresi

Untuk perangkat A/B Virtual dengan kompresi:

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

Misalnya, pertimbangkan perangkat kompresi A/B Virtual dengan ukuran pabrik 4 GB dan perkiraan pertumbuhan 50%. Untuk memastikan perangkat ini tidak pernah menggunakan /data untuk snapshot OTA, perhitungannya akan terlihat seperti berikut:

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

Dengan demikian, perangkat ini harus memiliki partisi super berukuran 10,2 GB.

Peringatan

Mungkin Anda tergoda untuk mengamati bahwa jika ukuran pabrik adalah 4 GB, dan update akhir adalah 5 GB, maka super harus 9 GB, bukan 10 GB. Namun, jika update pertama dan update terakhir berukuran 5 GB, ruang di super mungkin tidak cukup untuk update terakhir. Formula di atas mengasumsikan bahwa pertumbuhan partisi dapat terjadi kapan saja. Ruang yang diperlukan untuk menerapkan update akhir mungkin sama dengan yang diperlukan untuk menerapkan update pertama.

Perhatikan bahwa rasio kompresi adalah perkiraan. Image OS mungkin dikompresi lebih baik atau lebih buruk bergantung pada isinya. Jika menggunakan sistem file yang dikompresi seperti EROFS, kompresi tambahan dari A/B Virtual akan memberikan hasil yang semakin berkurang. Dalam hal ini, sebaiknya gunakan salah satu formula yang tidak dikompresi sebagai panduan.

Menghitung ukuran

Untuk menemukan nilai FactorySize dalam contoh sebelumnya, tambahkan ukuran semua partisi dinamis. Image partisi dinamis AOSP adalah:

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

Pastikan untuk menghitung ukuran berdasarkan gambar yang tidak di-sparse. Saat mem-build Android 12 atau yang lebih rendah, gambar akan di-sparse secara default, dan dapat di-unsparse dengan simg2img.

Anda juga dapat menghitung ukuran partisi dari paket OTA. Dengan demikian, ukuran snapshot A/B Virtual untuk setiap partisi juga diperkirakan:

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

Atau, Anda dapat menggunakan Alat Analisis OTA. Alat ini tidak mengupload file apa pun dan menganalisis paket OTA secara lokal.

Untuk menemukan nilai ExpectedGrowth, gunakan perangkat yang dirilis sebelumnya. Gunakan gambar super paling awal dan terbaru untuk menghitung pertumbuhan.