Implémenter storaged

Android 8 est compatible avec storaged, un démon natif Android qui collecte et publie des métriques de stockage sur les appareils Android.

  • Pour les statistiques quotidiennes sur les disques, storaged analyse périodiquement /sys/block/mmcblk0/stat (appareils de stockage eMMC) ou /sys/block/sda/stat (appareils autres que eMMC).
  • Pour la durée de vie de l'eMMC, storaged analyse /d/mmc0/mmc0:001/ext_csd (si disponible).
  • Pour l'attribution de la responsabilité des E/S de l'application, storaged parcourt régulièrement /proc/uid_io/stats et gère les données analysées, y compris celles de toutes les applications (et pas seulement celles en cours d'exécution). dumpsys peut appeler storaged pour consigner l'utilisation des E/S de l'application dans un rapport de bug.

Les informations Diskstat (y compris les diskstats bloqués) et eMMC sont consignées dans le journal des événements Android, où un service de check-in de la plate-forme collecte les journaux.

Les opérations storaged se produisent automatiquement et sont entièrement gérées par le framework Android. Vous n'avez donc pas besoin d'effectuer d'implémentation. Cette page décrit la conception de storaged (y compris les nouvelles interfaces) et comment l'utiliser pour obtenir l'état des E/S à partir du noyau.

conception stockée

Pour plus de flexibilité en termes de comptabilité et d'autorisations, storaged est implémenté en tant que module de kernel qui renvoie des informations d'E/S par uid (au lieu d'utiliser proc/PID/io standard). Les données d'E/S brutes pour chaque requête d'E/S continuent d'être stockées et mises à jour dans le kernel task_struct, et le kernel suit la date de sortie d'un processus afin de ne pas manquer l'utilisation des E/S qui se produit à partir du dernier événement de sondage storaged.

Le module lit les données brutes et ne les traite que lorsque le framework l'informe d'un changement de premier plan/arrière-plan d'un uid ou lorsque le daemon storaged demande un rapport. À ce moment-là, le module exporte un nœud de fichier à partir du noyau pour la communication avec le framework et le daemon storaged.

storaged introduit l'interface /proc/uid_io/stats, qui renvoie une liste de statistiques d'E/S pour chaque UID du système. Le format est le suivant:

<uid>: <foreground read bytes> <foreground write bytes> <foreground read chars> <foreground write chars> <background read bytes> <background write bytes> <background read chars> <background write chars>
  • Les octets de lecture/écriture sont des événements d'E/S provenant d'un appareil de stockage.
  • Les caractères de lecture/écriture (également en octets) sont des données demandées par les appels système de lecture/écriture.

Obtenir l'état des E/S à partir du noyau

Pour vider l'utilisation des E/S du noyau, exécutez la commande storaged avec l'option -u.

Commande : storaged -u

Format de sortie de la commande: name/uid fg_rchar fg_wchar fg_rbytes fg_wbytes bg_rchar bg_wchar bg_rbytes bg_wbytes fg_fsync bg_fsync

Remarque:Ce résultat est semblable à celui de proc/uid_io/stats. En effet, storaged traite les données de /proc/uid_io/stats et génère ses propres données.

Exemple de résultat :

com.google.android.backuptransport  2269  60  0  0  1719845663  143912573  149065728  184180736
com.android.vending  2170  60  0  0  219904796  38693092  174436352  18944000