Android 8 aggiunge il supporto per storaged
, un daemon nativo Android che
raccoglie e pubblica metriche relative allo spazio di archiviazione sui dispositivi Android.
- Per i diskstat giornalieri,
storaged
analizza periodicamente/sys/block/mmcblk0/stat
(dispositivi di archiviazione eMMC) o/sys/block/sda/stat
(dispositivi non eMMC). - Per la durata di eMMC,
storaged
analizza/d/mmc0/mmc0:001/ext_csd
(se disponibile). - Per il blam di I/O delle app,
storaged
attraversa periodicamente/proc/uid_io/stats
e gestisce i dati analizzati, che includono i dati da tutte le app (non solo quelle in esecuzione).dumpsys
può chiamastoraged
per registrare l'utilizzo di I/O dell'app in una segnalazione di bug.
Le informazioni su Diskstat (inclusi dischistat bloccati) e su eMMC vengono registrate nel Log eventi di Android, in cui un servizio di registrazione della piattaforma raccoglie i log.
Le operazioni di storaged
vengono eseguite automaticamente e sono gestite interamente da Android
senza dover effettuare alcuna implementazione. Questa pagina
descrive il design di storaged
(incluse le nuove interfacce) e come utilizzarlo per
ottenere lo stato di I/O dal kernel.
progettazione con spazio di archiviazione
Per flessibilità della contabilità e delle autorizzazioni, storaged
è implementato come kernel
che restituisce informazioni di I/O in base all'uid (anziché l'utilizzo di
proc/PID/io
). I dati di I/O non elaborati per ogni richiesta I/O continuano a essere
archiviato e aggiornato nel kernel task_struct
, che mantiene
di tenere traccia della chiusura di un processo, in modo da non tralasciare l'utilizzo di I/O proveniente dalla
l'ultimo storaged
evento elettorale.
Il modulo legge i dati non elaborati e li elabora solo quando il framework li avvisa
di un'opzione di primo piano/sfondo UID o quando il daemon storaged
richiede un
report. In quel momento, il modulo esporta un nodo file dal kernel per
comunicazione con framework e daemon storaged
.
storaged
introduce l'interfaccia /proc/uid_io/stats
, che restituisce
un elenco di statistiche di I/O per ogni UID nel sistema. Il formato è:
<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>
- I byte di lettura/scrittura sono eventi di I/O di un dispositivo di archiviazione.
- I caratteri di lettura/scrittura (anche in byte) sono dati richiesti dalla richiesta syscall.
Ottieni lo stato di I/O dal kernel
Per eseguire il dump dell'utilizzo di I/O dal kernel, usa il comando storaged
con
l'opzione -u
.
Comando: storaged -u
Formato di output del comando: name/uid fg_rchar fg_wchar fg_rbytes fg_wbytes
bg_rchar bg_wchar bg_rbytes bg_wbytes fg_fsync bg_fsync
Nota: questo output è simile all'output per
proc/uid_io/stats
. Questo perché storaged
elabora i dati provenienti da
/proc/uid_io/stats
e genera i propri dati.
Output di esempio:
com.google.android.backuptransport 2269 60 0 0 1719845663 143912573 149065728 184180736 com.android.vending 2170 60 0 0 219904796 38693092 174436352 18944000