En versiones anteriores de Android, el sistema recorría todos los archivos pertenecientes a una para medir el uso del disco. Esta medición manual podría tardar minutos que procesaremos antes de mostrar los resultados a los usuarios en Configuración.
Además, el algoritmo interno para borrar los archivos de datos almacenados en caché la hora de modificación en todas las apps. Esto permitió que apps maliciosas degraden la experiencia general del usuario al establecer horas modificadas en el futuro para que se sobre otras aplicaciones.
Para mejorar estas experiencias, Android 8.0 ofrece aprovechar el sistema de archivos ext4 "cuota" para devolver las estadísticas de uso del disco casi al instante. Esta cuota también mejora la estabilidad del sistema, ya que evita que una sola app use más del 90% del espacio en el disco o el 50% de los inodos.
Implementación
La función de cuota forma parte de la implementación predeterminada de installd
.
installd
usa automáticamente la función de cuota cuando se habilita en un
sistema de archivos en particular. El sistema se reanuda de forma automática y transparente
cálculo manual cuando la función de cuota no está habilitada o no es compatible
de bloque que se mide.
Para habilitar la compatibilidad con cuotas en un dispositivo de almacenamiento en bloques en particular, haz lo siguiente:
- Habilita los elementos
CONFIG_QUOTA
,CONFIG_QFMT_V2
y Opciones de kernelCONFIG_QUOTACTL
. - Agrega la opción
quota
a tu partición de datos de usuario en el fstab archivo:/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
La opción fstab
puede habilitarse o inhabilitarse de forma segura en archivos existentes
dispositivos. Durante el primer inicio, después de cambiar la opción fstab
,
fsmgr
fuerza un pase fsck
para actualizar todos los datos de la cuota
pero es posible que el primer inicio tarde un poco más. Posterior
las botas no se verán afectadas.
La compatibilidad con cuotas solo se probó en ext4 y Linux 3.18 o versiones posteriores. Si se habilita en otros sistemas de archivos o en versiones de kernel más antiguas, los fabricantes de dispositivos son responsables de probar y aprobar la precisión de las estadísticas.
No se requiere compatibilidad especial con hardware.
Validación
Hay pruebas de CTS dentro de StorageHostTest
, que son de uso público
APIs para medir el uso del disco. Se espera que estas APIs devuelvan valores correctos
independientemente de si se habilita o inhabilita la compatibilidad con las cuotas.
Depuración
La app de prueba asigna cuidadosamente regiones de espacio en el disco con números primos únicos
para el tamaño. Cuando depures estas pruebas, úsala para determinar la causa de cualquier
discrepancias. Por ejemplo, si una prueba falla con un delta de 11 MB, examina
Utils.useSpace()
para ver que el BLOB de 11 MB se almacenó en
getExternalCacheDir()
También hay algunas pruebas internas que pueden ser útiles para la depuración, Es posible que debas inhabilitar los controles de seguridad para que se aprueben:
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