Di versi Android sebelumnya, sistem menjelajahi semua file yang dimiliki oleh aplikasi tertentu untuk mengukur penggunaan {i>disk<i}. Pengukuran manual ini memerlukan waktu beberapa menit untuk dihitung sebelum menampilkan hasilnya kepada pengguna di Setelan.
Selain itu, algoritma internal untuk menghapus file data {i>cache<i} hanya dilihat perubahan waktu di semua aplikasi. Hal ini memungkinkan aplikasi berbahaya menurunkan pengalaman pengguna secara keseluruhan dengan menetapkan waktu yang telah diubah jauh di masa depan menjadi mengutamakan diri mereka sendiri dibandingkan aplikasi lain.
Untuk meningkatkan pengalaman ini, Android 8.0 menawarkan untuk memanfaatkan sistem file ext4 "kuota" dukungan untuk mengembalikan statistik penggunaan {i>disk<i} hampir secara instan. Kuota ini juga meningkatkan stabilitas sistem dengan mencegah satu aplikasi menggunakan lebih dari 90% kapasitas {i>disk<i} atau 50% inode.
Implementasi
Fitur kuota adalah bagian dari implementasi default installd
.
installd
akan otomatis menggunakan fitur kuota saat diaktifkan di
sistem file tertentu. Sistem melanjutkan secara otomatis dan transparan
penghitungan manual, saat fitur kuota tidak diaktifkan atau didukung pada
perangkat blok yang sedang diukur.
Untuk mengaktifkan dukungan kuota pada perangkat blok tertentu:
- Mengaktifkan
CONFIG_QUOTA
,CONFIG_QFMT_V2
, dan Opsi kernelCONFIG_QUOTACTL
. - Menambahkan opsi
quota
ke partisi userdata di fstab file:/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 aplikasi yang ada
perangkat. Selama {i>booting<i} pertama setelah mengubah opsi fstab
,
fsmgr
memaksa penerusan fsck
untuk memperbarui semua data kuota
yang dapat menyebabkan {i>booting<i} pertama
yang memakan waktu sedikit lebih lama. Setelah
booting tidak akan terpengaruh.
Dukungan kuota hanya diuji pada ext4 dan Linux 3.18 atau yang lebih tinggi. Jika mengaktifkan pada sistem file lain, atau pada versi {i> kernel<i} yang lebih lama, produsen perangkat bertanggung jawab untuk menguji dan memeriksa ketepatan statistik.
Tidak diperlukan dukungan hardware khusus.
Validasi
Ada uji CTS di bawah StorageHostTest
, yang latihannya bersifat publik
API untuk mengukur penggunaan disk. API ini diharapkan menampilkan nilai yang benar
terlepas dari apakah dukungan kuota diaktifkan atau dinonaktifkan.
Proses Debug
Aplikasi pengujian dengan hati-hati mengalokasikan region kapasitas disk menggunakan bilangan prima unik
untuk ukurannya. Saat melakukan debug pada pengujian ini, gunakan metode ini untuk menentukan penyebab
yang berbeda. Misalnya, jika pengujian gagal dengan delta 11 MB, periksa metode
Utils.useSpace()
untuk melihat bahwa blob 11 MB tersebut disimpan di
getExternalCacheDir()
.
Ada juga beberapa pengujian internal yang mungkin berguna untuk proses debug, tetapi 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