Android 8 unterstützt storaged
, einen nativen Android-Daemon, der Speichermesswerte auf Android-Geräten erfasst und veröffentlicht.
- Für tägliche „diskstats“-Daten 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 wird
storaged
/d/mmc0/mmc0:001/ext_csd
(falls verfügbar) geparst. - Bei der Zuordnung von App-I/O-Problemen durchsucht
storaged
regelmäßig/proc/uid_io/stats
und verwaltet geparste Daten, einschließlich Daten aus allen Apps (nicht nur aus laufenden Apps).dumpsys
kannstoraged
aufrufen, um die I/O-Nutzung der App in einem Fehlerbericht zu protokollieren.
Diskstat-Informationen (einschließlich steckengebliebener Diskstat-Informationen) und eMMC-Informationen werden im Android-Ereignisprotokoll protokolliert, wo sie von einem Plattform-Check-in-Dienst erfasst werden.
storaged
-Vorgänge erfolgen automatisch und werden vollständig vom Android-Framework verwaltet. Sie müssen also keine Implementierungsarbeit leisten. Auf dieser Seite wird das Design von storaged
(einschließlich neuer Schnittstellen) beschrieben und wie Sie damit den E/A-Status vom Kernel abrufen.
Speicherdesign
Für mehr Flexibilität bei der Ressourcenerfassung und -zuweisung wird storaged
als Kernelmodul implementiert, das E/A-Informationen pro Nutzer-ID zurückgibt (anstelle der Standard-proc/PID/io
-Funktion). Roh-E/A-Daten für jede E/A-Anfrage werden weiterhin im Kernel task_struct
gespeichert und aktualisiert. Der Kernel überwacht, wann ein Prozess beendet wird, damit keine E/A-Nutzung nach dem letzten storaged
-Polling-Ereignis verpasst wird.
Das Modul liest Rohdaten und verarbeitet sie nur, wenn das Framework es über einen Wechsel der UID in den Vordergrund oder Hintergrund informiert oder 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 dem storaged
-Daemon.
storaged
führt die Schnittstelle /proc/uid_io/stats
ein, die eine Liste der I/O-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-/Schreib-Byte“ sind E/A-Ereignisse von einem Speichergerät.
- read/write chars (auch in Bytes) sind Daten, die von read/write-Systemaufrufen angefordert werden.
E/A-Status vom Kernel abrufen
Wenn Sie die I/O-Nutzung aus dem Kernel dumpen möchten, 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
. Das 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