Estadísticas de almacenamiento más rápidas

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:

  1. Habilita las opciones de kernel CONFIG_QUOTA, CONFIG_QFMT_V2 y CONFIG_QUOTACTL.
  2. 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