Implementazione di storaged

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