En versiones anteriores de Android, el sistema recorría todos los archivos que pertenecían a una app en particular para medir el uso del disco. Esta medición manual puede tardar minutos en procesarse 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é solo analizaba el tiempo modificado en todas las apps. Esto permitía que las apps maliciosas degradaran la experiencia general del usuario, ya que establecían tiempos modificados en el futuro para favorecerse de manera injusta sobre otras apps.
Para mejorar estas experiencias, Android 8.0 ofrece aprovechar la compatibilidad con "cuotas" del sistema de archivos ext4 para mostrar las estadísticas de uso del disco de manera prácticamente inmediata. Esta función de 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 reanuda el cálculo manual de forma automática y transparente cuando la función de cuota no está habilitada o no es compatible con el dispositivo de bloque que se mide.
Para habilitar la compatibilidad con cuotas en un dispositivo de almacenamiento en bloque en particular, haz lo siguiente:
- Habilita las opciones de kernel
CONFIG_QUOTA
,CONFIG_QFMT_V2
yCONFIG_QUOTACTL
. - Agrega la opción
quota
a la partición de userdata en el archivo 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
La opción fstab
se puede habilitar o inhabilitar de forma segura en los dispositivos existentes. Durante el primer inicio después de cambiar la opción fstab
,
fsmgr
fuerza un pase fsck
para actualizar todas las estructuras de datos de
cuota, lo que puede hacer que ese primer inicio tarde un poco más. Los arranques posteriores no se verán afectados.
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 anteriores del kernel, los fabricantes de dispositivos son responsables de probar y verificar la exactitud de las estadísticas.
No se requiere compatibilidad con hardware especial.
Validación
Hay pruebas de CTS en StorageHostTest
, que ejercen APIs públicas para medir el uso del disco. Se espera que estas APIs muestren valores correctos, independientemente de si la compatibilidad con cuotas está habilitada o inhabilitada.
Depuración
La app de prueba asigna cuidadosamente regiones de espacio en disco con números primos únicos para el tamaño. Cuando depures estas pruebas, usa esto para determinar la causa de las discrepancias. Por ejemplo, si una prueba falla con un delta de 11 MB, examina el método 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 depurar, pero es posible que deban inhabilitar las verificaciones de seguridad para aprobarlas:
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