Statistiques de stockage plus rapides

Dans les versions précédentes d'Android, le système parcourait tous les fichiers appartenant à une application spécifique pour mesurer l'utilisation du disque. Le calcul de cette mesure manuelle peut prendre plusieurs minutes avant que les résultats ne soient présentés aux utilisateurs dans les paramètres.

De plus, l'algorithme interne permettant d'effacer les fichiers de données mis en cache ne prenait en compte que l'heure de modification dans toutes les applications. Cela permettait aux applications malveillantes de dégrader l'expérience utilisateur globale en définissant des heures de modification très éloignées pour se favoriser injustement par rapport aux autres applications.

Pour améliorer ces expériences, Android 8.0 propose d'exploiter la prise en charge des "quotas" du système de fichiers ext4 pour renvoyer des statistiques d'utilisation du disque presque instantanément. Cette fonctionnalité de quota améliore également la stabilité du système en empêchant une seule application d'utiliser plus de 90% de l'espace disque ou 50% des nœuds d'index.

Implémentation

La fonctionnalité de quota fait partie de l'implémentation par défaut de installd. installd utilise automatiquement la fonctionnalité de quota lorsqu'elle est activée sur un système de fichiers particulier. Le système reprend automatiquement et de manière transparente le calcul manuel lorsque la fonctionnalité de quota n'est pas activée ou n'est pas prise en charge sur l'appareil de blocage mesuré.

Pour activer la prise en charge des quotas sur un appareil de bloc spécifique:

  1. Activez les options de kernel CONFIG_QUOTA, CONFIG_QFMT_V2 et CONFIG_QUOTACTL.
  2. Ajoutez l'option quota à votre partition userdata dans votre fichier 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

L'option fstab peut être activée ou désactivée en toute sécurité sur les appareils existants. Lors du premier démarrage après avoir modifié l'option fstab, fsmgr force une passe fsck pour mettre à jour toutes les structures de données de quota, ce qui peut entraîner un démarrage légèrement plus long. Les démarrages suivants ne seront pas affectés.

La prise en charge des quotas n'a été testée que sur ext4 et Linux 3.18 ou version ultérieure. Si l'activation se fait sur d'autres systèmes de fichiers ou sur des versions de kernel plus anciennes, les fabricants d'appareils sont responsables des tests et du contrôle de l'exactitude des statistiques.

Aucune compatibilité matérielle particulière n'est requise.

Validation

Des tests CTS sont disponibles sous StorageHostTest, qui exécutent des API publiques pour mesurer l'utilisation du disque. Ces API doivent renvoyer des valeurs correctes, que la prise en charge des quotas soit activée ou désactivée.

Débogage

L'application de test alloue soigneusement des régions d'espace disque à l'aide de nombres premiers uniques pour la taille. Lors du débogage de ces tests, utilisez-le pour déterminer la cause des écarts. Par exemple, si un test échoue avec un delta de 11 Mo, examinez la méthode Utils.useSpace() pour vérifier que le blob de 11 Mo a été stocké dans getExternalCacheDir().

Il existe également des tests internes qui peuvent être utiles pour le débogage, mais ils peuvent nécessiter la désactivation des vérifications de sécurité pour réussir:

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