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,
storagedanalizza periodicamente/sys/block/mmcblk0/stat(dispositivi di archiviazione eMMC) o/sys/block/sda/stat(dispositivi non eMMC). - Per la durata dell'eMMC,
storagedanalizza/d/mmc0/mmc0:001/ext_csd(se disponibile). - Per l'attribuzione delle responsabilità per l'I/O delle app,
storagedesegue periodicamente la scansione di/proc/uid_io/statse gestisce i dati analizzati, inclusi i dati di tutte le app (non solo quelle in esecuzione).dumpsyspuò chiamarestoragedper 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