Estadísticas de almacenamiento más rápidas

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:

  1. Habilita los elementos CONFIG_QUOTA, CONFIG_QFMT_V2 y Opciones de kernel CONFIG_QUOTACTL.
  2. 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