Implémentation stockée

Android O ajoute la prise en charge de storaged , un démon natif Android qui collecte et publie des métriques de stockage sur les appareils Android.

  • Pour les statistiques de disque quotidiennes, storaged analyse périodiquement /sys/block/mmcblk0/stat (périphériques de stockage eMMC) ou /sys/block/sda/stat (périphériques non eMMC).
  • Pour la durée de vie de l'eMMC, les analyses storaged /d/mmc0/mmc0:001/ext_csd (si disponible).
  • Pour le blâme des E/S des applications, storaged parcourt périodiquement /proc/uid_io/stats et conserve les données analysées, qui incluent les données de toutes les applications (pas seulement les applications en cours d'exécution). dumpsys peut appeler storaged pour enregistrer l'utilisation des E/S de l'application dans un rapport de bogue.

Diskstat (y compris les diskstats bloqués) et les informations eMMC sont enregistrées dans le journal des événements Android, où un service d'enregistrement de la plateforme 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 de travail 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 du noyau.

conception stockée

Pour plus de flexibilité en matière de comptabilité et d'autorisation, storaged est implémenté en tant que module de noyau qui renvoie des informations d'E/S par uid (au lieu d'utiliser le standard proc/PID/io ). Les données brutes d'E/S pour chaque demande d'E/S continuent d'être stockées et mises à jour dans le noyau task_struct , et le noyau garde une trace de la fin d'un processus afin de ne pas manquer l'utilisation des E/S qui se produit à partir du dernier événement d'interrogation storaged .

Le module lit les données brutes et les traite uniquement lorsque le framework le notifie d'un changement d'uid de premier plan/arrière-plan ou lorsque le démon storaged demande un rapport. À ce moment-là, le module exporte un nœud de fichier du noyau pour la communication avec le framework et le démon 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 :

<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 des données demandées par les appels système en lecture/écriture.

Obtenir l'état des E/S du noyau

Pour vider l'utilisation des E/S du noyau, utilisez 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 : Cette sortie est similaire à la sortie 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 sortie :

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