Implémenter storaged

Android 8 prend en charge storaged, un daemon natif Android qui collecte et publie des métriques de stockage sur les appareils Android.

  • Pour les statistiques de disque quotidiennes, storaged analyse régulièrement /sys/block/mmcblk0/stat (périphériques de stockage eMMC) ou /sys/block/sda/stat (appareils non eMMC).
  • Pour la durée de vie eMMC, storaged analyse /d/mmc0/mmc0:001/ext_csd (si disponibles).
  • En ce qui concerne les E/S d'application, storaged traverse périodiquement /proc/uid_io/stats et conserve les données analysées, qui incluent les données de toutes les applications (pas seulement celles en cours d'exécution). dumpsys peut appelez storaged pour consigner l'utilisation des E/S de l'application dans un rapport de bug.

Les informations de Diskstat (y compris les statistiques de disque bloquées) et d'eMMC sont consignées dans la Journal des événements Android, où un service d'enregistrement de la plate-forme collecte les journaux.

Les opérations storaged sont automatiques et sont entièrement gérées par Android. vous n'avez donc aucun travail d'implémentation à effectuer. Cette page décrit la conception de storaged (y compris les nouvelles interfaces) et son utilisation pour obtenir l'état des E/S à partir du noyau.

conception avec stockage

Pour des raisons de traçabilité et de flexibilité des autorisations, storaged est implémenté en tant que noyau qui renvoie des informations d'E/S personnalisées (au lieu d'utiliser le code proc/PID/io). Pour chaque requête d'E/S, les données d'E/S brutes stocké et mis à jour dans le noyau task_struct, et celui-ci conserve de suivre l'arrêt d'un processus afin de ne pas manquer l'utilisation des E/S qui se produisent à partir du storaged dernier événement de sondage.

Le module lit les données brutes et les traite uniquement lorsque le framework lui en informe d'un commutateur UID de premier plan/arrière-plan ou lorsque le daemon storaged demande une . À 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 des 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 périphérique de stockage.
  • Les caractères de lecture/écriture (également en octets) sont les données demandées par les appels système.

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

Pour vider l'utilisation des E/S à partir 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 la console proc/uid_io/stats En effet, storaged traite les données des /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