Implementa archiviazione

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ò chiamare storaged 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