Pada versi Android sebelumnya, sistem menjelajahi semua file yang dimiliki oleh aplikasi tertentu untuk mengukur penggunaan disk. Pengukuran manual ini dapat memerlukan waktu beberapa menit untuk dihitung sebelum menampilkan hasilnya kepada pengguna di Setelan.
Selain itu, algoritma internal untuk menghapus file data dalam cache hanya melihat waktu yang diubah di semua aplikasi. Hal ini memungkinkan aplikasi berbahaya menurunkan pengalaman pengguna secara keseluruhan dengan menetapkan waktu yang diubah jauh di masa mendatang untuk memberi keuntungan yang tidak adil bagi aplikasi tersebut dibandingkan aplikasi lain.
Untuk meningkatkan pengalaman ini, Android 8.0 menawarkan untuk memanfaatkan dukungan "kuota" sistem file ext4 untuk menampilkan statistik penggunaan disk hampir seketika. Fitur kuota ini juga meningkatkan stabilitas sistem dengan mencegah satu aplikasi menggunakan lebih dari 90% ruang disk atau 50% inode.
Implementasi
Fitur kuota adalah bagian dari implementasi default installd
.
installd
otomatis menggunakan fitur kuota saat diaktifkan di
sistem file tertentu. Sistem akan otomatis dan transparan melanjutkan
penghitungan manual saat fitur kuota tidak diaktifkan atau didukung di
perangkat blok yang diukur.
Untuk mengaktifkan dukungan kuota di perangkat blok tertentu:
- Aktifkan opsi kernel
CONFIG_QUOTA
,CONFIG_QFMT_V2
, danCONFIG_QUOTACTL
. - Tambahkan opsi
quota
ke partisi userdata dalam file fstab:/dev/block/platform/soc/624000.ufshc/by-name/userdata /data ext4 noatime,nosuid,nodev,barrier=1,noauto_da_alloc latemount,wait,check,formattable,fileencryption=ice,quota
Opsi fstab
dapat diaktifkan atau dinonaktifkan dengan aman di perangkat
yang ada. Selama booting pertama setelah mengubah opsi fstab
,
fsmgr
memaksa kartu fsck
untuk mengupdate semua struktur data
kuota, yang dapat menyebabkan booting pertama tersebut memerlukan waktu sedikit lebih lama. Proses booting
berikutnya tidak akan terpengaruh.
Dukungan kuota hanya telah diuji di ext4 dan Linux 3.18 atau yang lebih baru. Jika mengaktifkan pada sistem file lain, atau pada versi kernel yang lebih lama, produsen perangkat bertanggung jawab untuk menguji dan memeriksa kebenaran statistik.
Tidak diperlukan dukungan hardware khusus.
Validasi
Ada pengujian CTS di bagian StorageHostTest
, yang menggunakan API publik
untuk mengukur penggunaan disk. API ini diharapkan menampilkan nilai yang benar,
terlepas dari apakah dukungan kuota diaktifkan atau dinonaktifkan.
Proses Debug
Aplikasi pengujian mengalokasikan region ruang disk dengan cermat menggunakan bilangan prima unik
untuk ukurannya. Saat men-debug pengujian ini, gunakan ini untuk menentukan penyebab
perbedaan. Misalnya, jika pengujian gagal dengan delta 11 MB, periksa
metode Utils.useSpace()
untuk melihat bahwa blob 11 MB disimpan di
getExternalCacheDir()
.
Ada juga beberapa pengujian internal yang mungkin berguna untuk proses debug, tetapi pengujian tersebut mungkin memerlukan penonaktifan pemeriksaan keamanan agar lulus:
runtest -x frameworks/base/services/tests/servicestests/ \ src/com/android/server/pm/InstallerTest.java
adb shell /data/nativetest64/installd_utils_test/installd_utils_test
adb shell /data/nativetest64/installd_cache_test/installd_cache_test
adb shell /data/nativetest64/installd_service_test/installd_service_test