Statistiques de stockage plus rapides

Dans les versions antérieures d'Android, le système parcourait tous les fichiers appartenant à une application particulière pour mesurer l'utilisation du disque. Le calcul de cette mesure manuelle peut prendre quelques minutes avant d'afficher les résultats 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 modifiée dans toutes les applications. Cela a permis aux applications malveillantes de dégrader l’expérience utilisateur globale en fixant des heures modifiées dans le futur 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 presque instantanément des statistiques d'utilisation du disque. 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 inodes.

Mise en œuvre

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 fonction de quota n'est pas activée ou prise en charge sur l'appareil bloc en cours de mesure.

Pour activer la prise en charge des quotas sur un périphérique bloc particulier :

  1. Activez les options du noyau 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 rendre ce premier 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 supérieur. En cas d'activation sur d'autres systèmes de fichiers ou sur des versions de noyau plus anciennes, les fabricants de périphériques sont responsables des tests et de la vérification de l'exactitude des statistiques.

Aucun support matériel spécial n'est requis.

Validation

Il existe des tests CTS sous StorageHostTest , qui exercent des API publiques pour mesurer l'utilisation du disque. Ces API sont censées 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 les régions d'espace disque en utilisant des nombres premiers uniques pour la taille. Lors du débogage de ces tests, utilisez-le pour déterminer la cause de toute divergence. Par exemple, si un test échoue avec un delta de 11 Mo, examinez la méthode Utils.useSpace() pour voir que le blob de 11 Mo a été stocké dans getExternalCacheDir() .

Il existe également certains tests internes qui peuvent être utiles pour le débogage, mais ils peuvent nécessiter la désactivation des contrôles 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