Android 8 aggiunge il supporto di storaged
, un demone nativo di Android che raccoglie e pubblica le metriche dello spazio di archiviazione sui dispositivi Android.
- Per i dati giornalieri di diskstats,
storaged
analizza periodicamente/sys/block/mmcblk0/stat
(dispositivi di archiviazione eMMC) o/sys/block/sda/stat
(dispositivi non eMMC). - Per la durata dell'eMMC,
storaged
analizza/d/mmc0/mmc0:001/ext_csd
(se disponibile). - Per l'attribuzione delle responsabilità per l'I/O delle app,
storaged
esegue periodicamente la scansione di/proc/uid_io/stats
e gestisce i dati analizzati, inclusi i dati di tutte le app (non solo quelle in esecuzione).dumpsys
può chiamarestoraged
per registrare l'utilizzo I/O dell'app in un report di bug.
Le informazioni su diskstat (inclusi i dati in stallo di diskstat) e eMMC vengono registrate nel log degli eventi di Android, dove un servizio di controllo della piattaforma raccoglie i log.
Le operazioni storaged
vengono eseguite automaticamente e gestite interamente dal framework Android, quindi non è richiesta alcuna operazione di implementazione. Questa pagina descrive il design di storaged
(incluse le nuove interfacce) e come utilizzarlo per ottenere lo stato I/O dal kernel.
design archiviato
Per la flessibilità di contabilizzazione e autorizzazione, storaged
è implementato come un modulo del kernel che restituisce informazioni di I/O per UID (anziché utilizzare proc/PID/io
standard). I dati I/O non elaborati per ogni richiesta I/O continuano a essere memorizzati e aggiornati nel kernel task_struct
, che tiene traccia dell'uscita di un processo in modo da non perdere l'utilizzo di I/O che si verifica dall'ultimo evento di polling storaged
.
Il modulo legge i dati non elaborati e li elabora solo quando il framework lo informa di un passaggio in primo piano/sfondo dell'uid o quando il daemon storaged
richiede un report. A quel punto, il modulo esporta un nodo file dal kernel per la comunicazione con il framework e il 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 i dati richiesti dalle chiamate di sistema di lettura/scrittura.
Ottenere lo stato I/O dal kernel
Per eseguire il dump dell'utilizzo I/O dal kernel, utilizza il comando storaged
con
l'opzione -u
.
Comando: storaged -u
Formato dell'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 a quello di proc/uid_io/stats
. Questo perché storaged
elabora i dati di
/proc/uid_io/stats
e genera i propri dati.
Esempio di output:
com.google.android.backuptransport 2269 60 0 0 1719845663 143912573 149065728 184180736 com.android.vending 2170 60 0 0 219904796 38693092 174436352 18944000