Estadísticas de almacenamiento más rápidas

En versiones anteriores de Android, el sistema atravesaba todos los archivos propiedad de una aplicación en particular para medir el uso del disco. Esta medición manual podría tardar unos minutos en calcularse 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 analizó el tiempo modificado en todas las aplicaciones. Esto permitió que las aplicaciones maliciosas degradaran la experiencia general del usuario al establecer tiempos modificados en el futuro lejano para favorecerse injustamente a sí mismos sobre otras aplicaciones.

Para mejorar estas experiencias, Android 8.0 ofrece aprovechar el soporte de "cuota" del sistema de archivos ext4 para devolver las estadísticas de uso del disco casi al instante. Esta función de cuota también mejora la estabilidad del sistema al evitar que una sola aplicación utilice más del 90 % del espacio en disco o el 50 % de los inodos.

Implementación

La función de cuota es parte de la implementación predeterminada de installd . installd usa automáticamente la función de cuota cuando está habilitada en un sistema de archivos en particular. El sistema reanuda de forma automática y transparente el cálculo manual cuando la función de cuota no está habilitada o no es compatible con el dispositivo de bloque que se está midiendo.

Para habilitar la compatibilidad con cuotas en un dispositivo de bloques en particular:

  1. Habilite las opciones de kernel CONFIG_QUOTA , CONFIG_QFMT_V2 y CONFIG_QUOTACTL .
  2. Agregue la opción de quota a su partición de datos de usuario en su 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 deshabilitar de manera segura en los dispositivos existentes. Durante el primer arranque después de cambiar la opción fstab , fsmgr fuerza un paso fsck para actualizar todas las estructuras de datos de cuota, lo que puede causar que el primer arranque tarde un poco más. Los arranques posteriores no se verán afectados.

La compatibilidad con cuotas solo se ha probado en ext4 y Linux 3.18 o superior. Si se habilita en otros sistemas de archivos, o en versiones anteriores del kernel, los fabricantes de dispositivos son responsables de probar y examinar la exactitud de las estadísticas.

No se requiere soporte de hardware especial.

Validación

Hay pruebas CTS en StorageHostTest , que utilizan API públicas para medir el uso del disco. Se espera que estas API devuelvan valores correctos, independientemente de si la compatibilidad con cuotas está habilitada o deshabilitada.

depuración

La aplicación de prueba asigna cuidadosamente regiones de espacio en disco utilizando números primos únicos para el tamaño. Al depurar estas pruebas, utilice esto para determinar la causa de cualquier discrepancia. Por ejemplo, si una prueba falla con un delta de 11 MB, examine el método Utils.useSpace() para ver si el blob de 11 MB se almacenó en getExternalCacheDir() .

También hay algunas pruebas internas que pueden ser útiles para la depuración, pero pueden requerir la desactivación de las comprobaciones de seguridad para pasar:

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