Android O bietet Unterstützung für storaged
, einen nativen Android-Daemon, der Speichermetriken auf Android-Geräten sammelt und veröffentlicht.
- Für tägliche Diskstats analysiert
storaged
regelmäßig/sys/block/mmcblk0/stat
(eMMC-Speichergeräte) oder/sys/block/sda/stat
(Nicht-eMMC-Geräte). - Für die eMMC-Lebensdauer
storaged
/d/mmc0/mmc0:001/ext_csd
(falls verfügbar). - Für die E/A-Beschuldigung von Anwendungen durchläuft
storaged
regelmäßig/proc/uid_io/stats
und verwaltet geparste Daten, die Daten aus allen Anwendungen (nicht nur laufenden Anwendungen) umfassen.dumpsys
kannstoraged
aufrufen, um die E/A-Nutzung der Anwendung in einem Fehlerbericht zu protokollieren.
Diskstat- (einschließlich blockierter Diskstats) und eMMC-Informationen werden im Android-Ereignisprotokoll protokolliert, wo ein Plattform-Check-in-Dienst die Protokolle sammelt.
storaged
Vorgänge erfolgen automatisch und werden vollständig vom Android-Framework abgewickelt, sodass Sie keine Implementierungsarbeit leisten müssen. Diese Seite beschreibt das Design von storaged
(einschließlich neuer Schnittstellen) und wie man es verwendet, um den I/O-Status vom Kernel abzurufen.
Aufbewahrungsdesign
Aus Gründen der Abrechnungs- und Berechtigungsflexibilität ist storaged
als Kernelmodul implementiert, das I/O-Informationen pro UID zurückgibt (anstatt den Standard proc/PID/io
zu verwenden). Rohe E/A-Daten für jede E/A-Anfrage werden weiterhin im Kernel task_struct
gespeichert und aktualisiert, und der Kernel verfolgt, wann ein Prozess beendet wird, damit ihm die E/A-Nutzung, die seit dem letzten storaged
Abfrageereignis auftritt, nicht entgeht.
Das Modul liest Rohdaten und verarbeitet sie nur, wenn das Framework es über einen UID-Vordergrund-/Hintergrundwechsel benachrichtigt oder wenn der storaged
Daemon einen Bericht anfordert. Zu diesem Zeitpunkt exportiert das Modul einen Dateiknoten aus dem Kernel für die Kommunikation mit dem Framework und storaged
Daemon.
storaged
führt die Schnittstelle /proc/uid_io/stats
ein, die eine Liste von E/A-Statistiken für jede UID im System zurückgibt. 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-/Schreibbytes sind E/A-Ereignisse von einem Speichergerät.
- Lese-/Schreibzeichen (auch in Bytes) sind Daten, die von Lese-/Schreib-Systemaufrufen angefordert werden.
I/O-Status vom Kernel abrufen
Um die E/A-Nutzung vom Kernel zu sichern, verwenden Sie den Befehl storaged
mit der Option -u
.
Befehl: storaged -u
Befehlsausgabeformat: 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
. Dies liegt daran, dass storaged
Daten aus /proc/uid_io/stats
verarbeitet und eigene Daten generiert.
Beispielausgabe:
com.google.android.backuptransport 2269 60 0 0 1719845663 143912573 149065728 184180736 com.android.vending 2170 60 0 0 219904796 38693092 174436352 18944000