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, yaitu ukuran semua partisi dinamis saat perangkat pertama kali di-flash. Yang kedua adalah tingkat pertumbuhan, yang merupakan persentase peningkatan ukuran OS di seluruh masa pakai perangkat yang dapat diperbarui.

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 dibutuhkan /data, berarti 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 penyingkatan super untuk memungkinkan peningkatan ukuran /data. Sebagian dari ruang tersebut diperlukan selama update. Untuk memahami dampaknya terhadap kemampuan update, penting untuk mengetahui persentase perangkat yang cenderung memiliki jumlah ruang kosong dari waktu ke waktu. Mencari tahu angka ini sangat tergantung pada perangkat keras dan pengguna perilaku perangkat tersebut. Pada contoh di bawah, angka ini disebut sebagai AllowedUserdataUse.

Tanpa kompresi

Tanpa kompresi, OTA lengkap memerlukan {i>snapshot<i} dengan ukuran yang kira-kira sama dengan OS, sehingga 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 berukuran 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 kira-kira 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, pertumbuhan yang diharapkan sebesar 50%, dan pengetahuan bahwa hampir semua pengguna memiliki penyimpanan 1 GB gratis (atau bersedia untuk mengosongkan ruang penyimpanan 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 9,2 GB.

Tanpa mengandalkan /data

Jika Anda ingin memiliki OTA yang tidak memerlukan ruang snapshot pada /data, ubah 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, penghitungannya akan seperti ini:

  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 ini:

  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 bisa terjadi pada kapan saja. Ruang yang diperlukan untuk menerapkan update akhir mungkin sama dengan yang diperlukan untuk menerapkan update pertama.

Perhatikan bahwa rasio kompresi merupakan perkiraan. 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.

Hitung 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 membangun Android 12 atau lebih rendah, gambar diurai secara default, dan dapat diurai 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.