„Gespeichert“ implementieren

Android 8 unterstützt jetzt den nativen Android-Daemon storaged, erfasst und veröffentlicht Speichermesswerte auf Android-Geräten.

  • Für tägliche Laufwerkstatistiken parst storaged regelmäßig /sys/block/mmcblk0/stat (eMMC-Speichergeräte) oder /sys/block/sda/stat (Nicht-eMMC-Geräte).
  • Für die eMMC-Lebensdauer parst storaged /d/mmc0/mmc0:001/ext_csd (wenn verfügbar).
  • Bei E/A-Blasen für die App durchläuft storaged regelmäßig /proc/uid_io/stats und verwaltet geparste Daten, einschließlich Daten von allen Apps (nicht nur aus ausgeführten Apps). dumpsys kann Rufe storaged auf, um die Nutzung der App-E/A in einem Fehlerbericht zu protokollieren.

Diskstat (einschließlich angehaltener diskstats) und eMMC-Informationen werden im Log Android-Ereignisprotokoll, bei dem ein Plattform-Check-in-Dienst die Logs erfasst.

storaged-Vorgänge werden automatisch ausgeführt und vollständig vom Android-Team abgewickelt Framework, sodass Sie keine Implementierung vornehmen müssen. Diese Seite das Design von storaged (einschließlich neuer Oberflächen) und die Verwendung E/A-Status vom Kernel abrufen.

gespeichertes Design

Für die Flexibilität von Buchhaltung und Berechtigungen ist storaged als Kernel implementiert -Modul, das per UID-E/A-Informationen zurückgibt (anstatt proc/PID/io). Die E/A-Rohdaten für jede E/A-Anfrage werden weiterhin die im Kernel task_struct gespeichert und aktualisiert werden, nachzuverfolgen, wann ein Prozess beendet wird, damit er keine E/A-Nutzung letztes storaged Umfrageereignis.

Das Modul liest Rohdaten und verarbeitet sie nur, wenn das Framework sie benachrichtigt. eines UID-Vorder-/Hintergrund-Switch oder wenn der storaged-Daemon eine Bericht. Zu diesem Zeitpunkt exportiert das Modul einen Dateiknoten aus dem Kernel Kommunikation mit dem Framework und dem storaged-Daemon.

storaged führt die /proc/uid_io/stats-Schnittstelle ein, die Folgendes zurückgibt: eine Liste von E/A-Statistiken für jede UID im System. Das Format ist:

<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>
  • Lese-/Schreibbyte sind E/A-Ereignisse von einem Speichergerät.
  • Lese-/Schreibzeichen (auch in Byte) sind Daten, die von Lese-/Schreibvorgängen angefordert werden. Systemaufrufe.

E/A-Status aus dem Kernel abrufen

Um die E/A-Nutzung aus dem Kernel zu sichern, verwenden Sie den Befehl storaged mit die Option -u.

Befehl: storaged -u

Ausgabeformat des Befehls: name/uid fg_rchar fg_wchar fg_rbytes fg_wbytes bg_rchar bg_wchar bg_rbytes bg_wbytes fg_fsync bg_fsync

Hinweis:Diese Ausgabe ähnelt der Ausgabe für proc/uid_io/stats Das liegt daran, dass storaged Daten aus /proc/uid_io/stats und generiert eigene Daten.

Beispielausgabe:

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