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:
- Activez les options de kernel
CONFIG_QUOTA
,CONFIG_QFMT_V2
etCONFIG_QUOTACTL
. - 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