Mengatur ukuran superpartisi

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

Ada beberapa variabel penting yang perlu dipertimbangkan. Yang pertama adalah ukuran pabrik, yang merupakan ukuran semua partisi dinamis saat perangkat pertama kali di-flash. Yang kedua adalah tingkat pertumbuhan, yaitu persentase peningkatan ukuran OS selama seluruh 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 terlalu banyak ruang yang diperlukan di /data, beberapa pengguna tidak dapat (atau tidak mau) melakukan update. Namun, jika diketahui bahwa sebagian besar pengguna memiliki beberapa persentase ruang kosong, 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 ukuran partisi super berdasarkan variabel ini.

Mengandalkan /data

A/B virtual mendorong pengecilan 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. Menemukan jumlah ini sangat bergantung pada hardware perangkat dan perilaku pengguna perangkat tersebut. Pada contoh di bawah, angka ini disebut sebagai AllowedUserdataUse.

Tanpa kompresi

Tanpa kompresi, OTA lengkap memerlukan snapshot yang ukurannya kira-kira sama dengan OS, sehingga harus diperhitungkan saat menentukan ukuran super:

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

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

  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 lengkap memerlukan snapshot 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 Virtual A/B, dengan ukuran pabrik sebesar 4 GB, perkiraan pertumbuhan 50%, dan pengetahuan bahwa hampir semua pengguna memiliki 1 GB ruang kosong (atau bersedia mengosongkan ruang hingga 1 GB untuk update). Untuk perangkat ini, super dapat diukur seperti ini:

  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

Dengan demikian, perangkat ini harus memiliki partisi super sebesar 9,2 GB.

Tanpa mengandalkan /data

Jika Anda ingin memiliki OTA yang tidak pernah memerlukan ruang snapshot di /data, maka ukuran super akan 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 Virtual A/B dengan ukuran pabrik 4 GB dan perkiraan pertumbuhan 50%. Untuk memastikan perangkat ini tidak pernah menggunakan /data untuk snapshot OTA, penghitungannya akan terlihat seperti:

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

Dengan demikian, 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, penghitungannya akan terlihat seperti:

  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 sebesar 10,2 GB.

Peringatan

Anda mungkin tergoda untuk mengamati bahwa jika ukuran pabrik adalah 4 GB, dan update akhir adalah 5 GB, maka super harus berukuran 9 GB, bukan 10 GB. Namun, jika update pertama dan update final masing-masing berukuran 5 GB, ruang di super mungkin tidak cukup untuk update final. 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 estimasi. Image OS mungkin dikompresi dengan lebih baik atau lebih buruk bergantung pada kontennya. Jika menggunakan sistem file yang dikompresi seperti EROFS, kompresi tambahan dari Virtual A/B akan memiliki hasil yang semakin menurun. Dalam hal ini, sebaiknya gunakan salah satu formula yang tidak dikompresi sebagai panduan.

Menghitung ukuran

Untuk menemukan nilai FinalDessertSize dalam contoh di atas, tambahkan ukuran semua partisi dinamis secara bersamaan. 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 diuraikan. Saat mem-build Android 12 atau yang lebih rendah, gambar di-sparse secara default, dan dapat di-unparse dengan simg2img.

Anda juga dapat menghitung ukuran partisi dari paket OTA. Tindakan ini juga memperkirakan ukuran snapshot A/B Virtual untuk setiap partisi:

  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.