Implementar storaged

Android 8 agrega compatibilidad con storaged, un daemon nativo de Android que recopila y publica métricas de almacenamiento en dispositivos Android.

  • Para las estadísticas diarias del disco, storaged analiza periódicamente /sys/block/mmcblk0/stat (dispositivos de almacenamiento eMMC) o /sys/block/sda/stat (dispositivos que no son eMMC).
  • Para la vida útil de una eMMC, storaged analiza /d/mmc0/mmc0:001/ext_csd (si disponibles).
  • Para culpar a la E/S de la app, storaged se desvía de forma periódica. /proc/uid_io/stats y mantiene los datos analizados, incluidos los datos. de todas las apps (no solo en las que están en ejecución). dumpsys puede Llama a storaged para registrar el uso de E/S de la app en un informe de errores.

La información del disco eMMC (incluidas las estadísticas del disco detenido) se registra en Registro de eventos de Android, en el que un servicio de registro de plataforma recopila los registros

Las operaciones storaged ocurren automáticamente y las controla Android en su totalidad. por lo que no necesitas realizar ningún trabajo de implementación. Esta página describe el diseño de storaged (incluidas las interfaces nuevas) y cómo usarlo para obtener el estado de E/S del kernel.

diseño almacenado

Para mayor flexibilidad en la contabilidad y los permisos, se implementa storaged como un kernel. que devuelve información de E/S por UID (en lugar de usar proc/PID/io). Los datos de E/S sin procesar para cada solicitud de E/S seguirán estando se almacenan y actualizan en el kernel task_struct, y el kernel mantiene seguimiento de cuándo finaliza un proceso para no perder el uso de E/S que ocurre desde el último evento de sondeo storaged.

El módulo lee datos sin procesar y los procesa solo cuando el framework les notifica de un interruptor de UID en primer o segundo plano, o cuando el daemon storaged solicita un . En ese momento, el módulo exporta un nodo de archivo desde el kernel para comunicación con framework y daemon storaged.

storaged presenta la interfaz /proc/uid_io/stats, que muestra una lista de estadísticas de E/S para cada UID en el sistema. El formato es el siguiente:

<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>
  • Los bytes de lectura y escritura son eventos de E/S de un dispositivo de almacenamiento.
  • Los caracteres de lectura y escritura (también en bytes) son datos que solicitan las operaciones de lectura y escritura llamadas de sistema.

Cómo obtener el estado de E/S del kernel

Para volcar el uso de E/S del kernel, usa el comando storaged con la opción -u.

Comando: storaged -u

Formato de resultado 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: Este resultado es similar al resultado de proc/uid_io/stats Esto se debe a que storaged procesa datos de /proc/uid_io/stats y genera sus propios datos.

Resultado de ejemplo:

com.google.android.backuptransport  2269  60  0  0  1719845663  143912573  149065728  184180736
com.android.vending  2170  60  0  0  219904796  38693092  174436352  18944000