Android O aggiunge il supporto per storaged
, un demone nativo Android che raccoglie e pubblica metriche 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 incolpare l'I/O dell'applicazione,
storaged
attraversa periodicamente/proc/uid_io/stats
e mantiene i dati analizzati, che includono i dati di tutte le applicazioni (non solo delle applicazioni in esecuzione).dumpsys
può chiamarestoraged
per registrare l'utilizzo I/O dell'applicazione in una segnalazione di bug.
Le informazioni su Diskstat (inclusi diskstat bloccati) e eMMC vengono registrate nel registro eventi di Android, dove un servizio di check-in della piattaforma raccoglie i registri.
le operazioni storaged
avvengono automaticamente e sono gestite interamente dal framework Android, quindi non è necessario eseguire alcun lavoro di implementazione. Questa pagina descrive la progettazione di storaged
(comprese le nuove interfacce) e come usarlo per ottenere lo stato di I/O dal kernel.
progettazione memorizzata
Per flessibilità di contabilità e autorizzazione, storaged
è implementato come modulo del kernel che restituisce informazioni I/O per-uid (invece di utilizzare lo standard proc/PID/io
). I dati I/O grezzi per ogni richiesta I/O continuano a essere archiviati e aggiornati nel kernel task_struct
e il kernel tiene traccia di quando un processo termina in modo da non perdere l'utilizzo di I/O che si verifica dall'ultimo evento di polling storaged
.
Il modulo legge i dati grezzi e li elabora solo quando il framework gli notifica un cambio di uid in primo piano/in background o quando il demone storaged
richiede un report. A quel punto, il modulo esporta un nodo file dal kernel per la comunicazione con il framework e il demone storaged
.
storaged
introduce l'interfaccia /proc/uid_io/stats
, che restituisce un elenco di statistiche I/O per ciascun 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 I/O da un dispositivo di archiviazione.
- i caratteri di lettura/scrittura (anche in byte) sono dati richiesti dalle chiamate di sistema di lettura/scrittura.
Ottenere lo stato I/O dal kernel
Per scaricare l'utilizzo di I/O dal kernel, utilizzare 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 da /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